Thursday, July 10, 2014

Making the Best out of Your Career as a Software Engineer

My ride as a Software Engineer hasn't always been the best, smoothest or easiest in the past, but in the past few years it's become very, very interesting, fun, and extremely positive in many ways, so I wanted to share how and why, and what lead up to that.

I'm very passionate about development and very much a perfectionist....always have been.  And at the same token it took a LOT of hard work to come to where I'm at today.  I wasn't the best developer starting out of college and I'll be first to admit that.  Some people are just natural developers in that they either came out of college a master of programming and very comfortable with it or they did not.  Or maybe they started programming at a very early age.  I did not.

It did not come easy.  I worked my ass off and forced myself because I cared to greatly improve myself over the past 14 years, and today I feel very happy with where I am at finally and what I have to contribute as a Software Engineer.

Today I'm very into TDD and happy I've gotten to a level where I can understand and use that approach to development to my advantage in terms of opening my eyes and learning tools to create better software more efficiently and with much higher quality.  Doing TDD has paid off for me tremendously just for myself in many ways on the job personally, but also has a much more positive impact on the apps I build going forward for whoever I work for.  I am aware of principals and now able to apply them after years of practice and much happier that I understand now about principles and/or patterns like DRY, KISS, SOLID, IoC, ect. because used in the right places, they truly make a difference in how flexible and maintainable your software can be.

So I wanted to give that context before writing what I meant to write today for this blog post because it's leading up to my main point of this post.

...Now into my main points.

I want to start off by mention just amazingly small Software Development world is in Chicago.  One might think Chicago would have huge unconnected circles but it's just the opposite here.

Now in California, that might the be different.  I lived out there and never crossed paths with anyone in the 5 years I was out there.  Meaning you could hop to 5 different jobs and not one person knows anything about you, your friends, or fellow colleges.  The number of people is just huge and circles are just too many.

When I tell people it's a small world every day throughout my career I've seen that world gets smaller and smaller.  The more people I meet, and through them the circles I become aware of are but just a hop away from contact to contact, closer than I realize.

I've been a long time follower of great people in our industry such as Martin Fowler, Uncle Bob Martin, Kent Beck, Eric Evens, and a slew of others who helped to mold craftsmanship in our trade.  What I didn't realize is that some of these people and the people they have affected or worked with are closer to home that I realized at first.

As you might know, Martin Fowler works for Thoughtworks in Chicago.  Now when I started young buying a few of his architecture books, I really just focused on reading some of the books he wrote.  Yea I visited a lot blogs at the time and still do, but for some reason a few years back I was sorta under a rock.   I didn't really know of the company M. Fowler worked for - Thoughtworks in the beginning.  Today that's different.  As my thirst and curiosity for code just keeps growing, I eventually woke up and realized this guy worked for one of the top notch consulting companies in the nation, right in my own back yard.

Later in my career I had the opportunity to work for Magenic, another top notch consulting firm.  My world became even smaller.  The connections there made me aware of so much more going on in Chicago and the development world and I learned a ton more than I would have if I would have stayed at one or two companies for my entire career.  So even though I hopped jobs for various reasons, I am so much more experienced and have seen 10x more in code, ways to do things, and meat so many different kinds of people than you would if you have stayed put at a company for your entire career which we all know is rare today anyway.

This small world became even smaller when I reconnected with an old friend from college.  This was my mentor in college, his name is Dave as well.  I'm lucky to have known my friend Dave.  He mentored me in college while I was beginning C++.  C++ was my first taste of programming period and at the time, that was a crapload to swallow if you haven't developed code so I needed help with it.  When I met Dave, he tutored several devs including myself.  And while I didn't realize it then, we were essentially doing what is commonly known as Pair Programming today.

During college I'd go over to Dave's apartment to get some help with some of my C++ code.  Dave would switch with me.  He'd have me what we know today in XP as "drive" and he'd "watch/observe" and have me try to think through my code and assignment while he sat behind me observing and making suggestions.  When I got really stuck, we'd switch and he'd sit down and I'd get up and he'd code and I'd observe and usually ask questions while he coded more than anything.  We did this in Dave's apartment.  This was back in 1999.

After graduating college in 2000, Dave (my friend) went off to work for, company owned by Live Nation.  I didn't talk to Dave for about 10 years.  I don't know why.  We just both got busy with work and life and didn't think about keeping in touch TBH.  Maybe it was because I was too ashamed that the last time we paired at his apartment in college, I tried to lick my fingers and then put my hands back into a bag of Doritos that he had laying on his desk that he was trying to share.  Gross right?  He let me know how gross that was at the time and yelled at me.  But somehow I reached out to him a couple years ago, and we reconnected.

Dave's journey actually was interesting.  He left 4-5 years ago and went on to work for Cengage Learning, and works out of the Farmington Hills, MI  location which he's now a Sr. Architect driving their company-wide SOA implementation and new development platform.  What's ironic is that I recently started working for another Live Nation company as well so again it became a very small world.  What are the chances of that happening right?  That we'd both end up working for a couple subsidiaries of a parent company....Weird.

But it didn't stop there.  I started to game with some of the cengage guys.   Dave kept telling me that I needed to try playing this game World of Tanks.  I kept telling him I had no time with the job and kids.  But one day I made the mistake of trying it.  Now I'm hooked.  I now log onto one of the chat servers one of Dave's collegues at Cengage runs  and we all connect almost every night to an app called Ventrilo which lets us all talk to each other real-time while we play whatever game it is we are playing.  But when I game, we all talk about code a well, so it's one big nerd session almost every night.  And I've learn a shitload from the guys at Cengage and my friend Dave as well ever since, a blessing in disguise.

One day we were talking on Ventrilo about all the great people working at Cengage Learning in Farmington Hills.  Cengage at that particular location is well known for their cutting edge TDD/XP shop.  In fact Uncle Bob Martin and other companies from out of state such as California, or companies like General Motors in MI, and so on go though there regularly to see just how they run their shop because it's run so well.  Dave tells me it's a common occurrence for some "group" of individuals from some outside company to be walking through their XP development floors to see how thy do things...they have become used to such events around them while they are coding at Cengage.  They're full of passionate Craftsmen there and it shows.

Dave loves to talk code, and he loves talking about the great people he's had the opportunity to work with.  He started mentioning when we first re-connected about some companies I was not familiar with which they had hired to get some extra hands to help in some of their coding initiatives.  When they need to add some extra hands whereas they need some guys to hit the ground running, they often look for developers who are already Craftsmen and who already are very versed at TDD / XP...because those are the kinds of developers who fit in well and can hit the ground running.  Cengage also does hire people who are passionate and driven who want to become craftsmen and who want to learn TDD but do not yet know it.  Cengage brings people in and trains them on TDD right off the bat.  They make sure everyone coming in is in the same boat and honors the same ideals and principals.

Dave told me at the time that Cengage hires extra hands from companies like 8th Light (remote-pairing with 8th light consultants), Pillar Technology, and some folks who used to work for companies like ThoughtWorks, etc. came over full-time to work at Cengae in MI.   To me this was pretty awesome, these are companies known for their Craft...and that he was able to work with such interesting individuals in addition to the great perm devs already at Cengage as well.

And so this is ultimately how I first learned of the company 8th light.  At the time I was a huge follower of Uncle Bob but I did not realize his son co-owns a company called 8th light.  Once I started to dig in more about 8th light, I was amazed.  Their blog alone is one that is amazing and just has a ton of great posts in it.

And the world gets even smaller.  Recently I've had a rare chance to actually work with some guys from 8th Light.  It's ironic.  Here I was talking to my friend Dave about 8th light 2-3 years ago and just by fate, here I am being able to actually work with the same company and even one of the same guys who had been pair programming remotely with Dave at one point over at Cengage for a period at the company I am working at now.  I mean that's crazy.  The chances of working with 8th light but then also one of the guys my friend knows and has remote paired with Dave now works directly with me on a project...what are the chances of that happening.  Most developers who follow Uncle Bob and 8th light and are fans would fathom to be able to work with such talented people.  And here I am working directly with the same guy my friend Dave worked with.   I am pretty blessed to have this sort of luck which earlier in my career I'd say I had a lot of bad luck looking back.

What is my point to all this?

First it's a smaller world than you realize.  Don't take that for granted when people tell you this and you're a  younger developer.  Get to know a LOT devs outside just the company you work for, it's critical to your career.  Ask a  LOT of questions to both your fellow devs and people you meet outside.  Be very curious about things.  Ask how and why people coded something, ask why they did it that way.   And don't just stay in the Microsoft Stack, you're limiting yourself, or whatever stack you are coding in now.

Go to other events such as Node.js, Angular, etc.  You will meet great people and will learn that no, the way you are doing things might even be a really bad way to code or to approach Software Development.   You will meet devs who follow the craftsmanship movement.  And those are the types of people you want to talk to and get to know.  They are the developers who have gone through and been trained by some of the best in our industry and have gone through all the pitfalls far before us and know ways that work.  Or they are developers like you and I who simply have the passion and are perfectionists in that they care about the quality of code they write and have great attitudes and push each other to adhere to that standard.

And it's not just about being friendly.  I might add that it's hard to find friendly devs period first off all in past experience let alone a team of devs who are all friendly to each other and work as a true team...but it's even harder to find friendly devs who care about our craft and have extreme passion and care to write clean maintainable code and drive their development via TDD/XP, stuff like that.   I finally realized these were the kinds of people I should have sought to meet and try to find a way to work with years ago, many of which come from the TDD/XP community for the most part.   I didn't know back then that I didn't have to continue to work with developers who had Ego trips, who worked in silos and didn't want to share knowlege or work as a team, or with people who thought it was ok to work 18 hour days just to fix bug after bug after bug as if it's just part of the job because some manager drove them to code and run some slop and now they have to risk their health and be stressed 24x7 fixing the crap their managers pushed them to deliver too fast.

I just didn't know where to look all those years.  I now know that can find people out there who see that this is just a stupid way to run a dev shop and that some shops won't work with people who have huge Egos which is what you want to see removed from a development shop.  You can find fellow devs (I call Craftsmen) who care about the code they write AND have great attitudes and more often than not adhere to TDD, XP and the like.  These are the developers you want to work with.

A side note about XP (pairing).  Most people including myself at one point naively thought that act of pairing means you are working with another jerk developer who's going to be critical of how you code and be jerks but it's quite the contrary.  I used to think that's what pairing was till I actually learned about and found people who did pair and found that those are the best people to work with actually.  They are the most positive and some of the most smart people out there.

So venture out.  Don't stick to just the technologies you know.   Go to Craftsmanship talks, or just simply go to a lot of code talks period, especially the languages that some naive people still think are "ridiculous" such as Node.js.

It's a small you need to know that small world so you can better yourself but more importantly find a place where you will like to work.  For me that's not only finding nice people with positive attitudes but people who are extremely passionate about delivering quality, not just delivering.   That involves HOW to deliver quality.  You need to work in a culture that facilitates that expectation and behaviors and walks that walk and expects everyone else to as well.  That cares about abiding by proven principals and practices in the development teams.   That practices principals like TDD/BDD to drive their development.  That works in a culture where you pair with other devs half the time.   That phrase "Good enough" is not what you should be hearing from your fellow dev.  One quote that I love is "As developers we should always strive for perfection knowing that we'll never get perfection" (a quote from Uncle Bob Martin).

I think I'm finally at a point where I can say I'm happier in my career in terms of the options I have and the know-how to find people who care.  I feel more comfortable in code and I am much more lazy in that I know how to write code that maintains itself more and has my back and allows me to go home to spend more time with my family rather than stay late hours fixing code was written without tests in mind.  It's been a blessed having to have met my friend Dave and to now have had the opportunity to work with a company like 8th light and know how to find people like this.  It was right there all along, I just didn't know of it or how to find that.

So for you devs who are not happy with your job (I there are many out there, most my fellow devs friends are not) and just want to find fellow devs who care as much as you do about code, how it's done, and that you work with positive team oriented people that put quality first above delivery, you can, you just gotta look in the right place and get to know the right people in order to see that.

Strive to meet new people and to work with Great people always.  Great = Skill + Attitude + Attention to Quality of Code whereas all three are equally as important as part of delivering value to the team and the business.  Don't work with people who just talk the talk.  "We should do this right the first time" but never actually try to do that.  Gotta love to hear such a thing then see the opposite happening time and time again day in and day out right?

Work with people who actually DO care about these things and actually DO work hard to push and to get themselves and others to apply them and see results because of it.  It'll make you a much more happier developer and your family much more happier when you can come home and say you loved working with the team and company you are working with.  Far too often I've experienced the opposite, including many of my friends and I'm here to tell you the grass can be a bit greener if you seek the right people and know what to look for in your next job and company.