What it Takes to Be a Successful Developer

q1.jpg

In today's world, web and mobile development are at the forefront of the most coveted, in-demand, and fruitful jobs out there. The pay is great, the schedule is flexible, the future is bright, what's to lose, right? Programming is a skill that is so desperately needed by companies in any industry right now, that it has become quite the trendy career to get into. Students are enrolling in computer science programs across the country in record numbers, people in careers from education to health care are teaching themselves a bit of code to make their current jobs a bit easier, and more and more people are making the jump form other fields to a full time career in development for any number of reasons. When I give talks or teach classes, the number one question I get asked is, "what does it take to be a developer?" so I thought it'd be a nice place to kick off this blog. This article is not meant to discourage anybody from entering the field of computer programming, but to educate folks on what it takes, not only to be a part of this profession, but to be successful in it.

I thought I'd start by giving you a look into how I became a successful developer. My story is a bit different than somebody entering the field from college since I was an electrical engineer for about 5 years first. I was a controls engineer co-op for one of the big three auto companies during college and once I graduated I was hired on full time at a solar cell manufacturer as a systems engineer. The fields may seem unrelated, but at the point of switching careers into web development, I had worked on production databases, headed up company-wide electronic inventory tracking, and coded machines and interfaces to keep people safe and processes efficient. I had coded microchips, PLC's (programmable logic controllers), HMI's (human machine interface), robotics, electronic devices like industrial barcode scanners and live-feed cameras, and desktop, mobile and web applications. So when I say I entered a brand new field, web development was fairly new to me, but I had extensive experience in writing all sorts of code. I knew a bit of front end code, introductory Visual Basic .NET, and a decent amount of transact SQL going into my career switch, but not enough to hit the ground running. I worked tirelessly, into the wee hours of the morning a lot of times, failed projects miserably, got help from colleagues, friends, and family, and finally, after a year or two of complete immersion in this new career, found my little niche. I went on to become a successful front end web developer with junior level back end .NET skills, and moved from a large dev firm to a very well established start up, specializing in front end angular.js work. Once I had our first child, I felt deep down that it was time to go out on my own for a number of reasons that will be discussed in a future post. I have never made a better decision in my life. While the first year was tough, I found consistent work at my top rate, and haven't stopped chugging along since. My clients are all very happy with me, and the leads are pouring in lately, so things are looking great for the foreseeable future.

Now as far as getting started in the world of development, there are three must-have qualities that, in my opinion, will help you through a successful career progression. They are the desire to learn new things, the ability to teach yourself, and to be able to do those things relatively quickly. I'm not saying other qualities are not necessary or helpful to be successful, but if you don't have these, your life will be very tough as a developer. I've hosted my fair share of interviews, and I know these are qualities that most candidates say they have, whether they do or not, but it will become very apparent, very quickly if you are lacking any one of these traits, so just be honest with yourself. 

Let's break it down. This is a career where you quite literally never stop learning. If you do, you'll be passed up. Very few of us have brains capable of continuous improvement 24/7, so that is definitely not what I'm talking about here. This also doesn't mean that you need to constantly be obsessed over the latest technology blog or programming framework. What I am saying is that you need to have an innate desire to problem solve, and you need to be somebody who looks forward to said problem solving, maybe not all the time, maybe not during a specific project, but at your core, it should be something you enjoy because you'll be making a career out of it.

As far as independent learning goes, I've worked with developers who think they have the entire world figured out, and would probably take a bullet before swallowing their ego and asking a question. I've also worked with people who are incapable of making a decision, learning a new skill, or solving a problem on their own. To be a successful developer, you need to be independent, but not to the point of being bullheaded and isolated. When interviewing potential engineering and computer science interns for a coding position, I asked them, "What do you do when you are stuck?" The candidates answers to this question were extremely telling. Some immediately said they'd ask for help. Others said they'd google it, then ask for help, and a few went into depth about their problem solving methodologies. In this industry, you need to be able to teach yourself things. Almost everything we need to further our skills as developers is available online. Some people learn better in a classroom setting, and there's nothing wrong with taking classes or going to seminars or Meetups, but when you're on the job, you can't be pestering other developers for help for every little thing. Like I said previously, in this job, you're always learning. If you can't do most of that learning on your own, you'll quickly become a burden to others. If you're a freelancer, you won't make it very far without this skill. If you're at a firm or a startup, hopefully they provide lunch and learns or group outings or retreats to share knowledge as a group outside of billable time. That all being said, if you're brand spanking new, make sure that your boss knows and understands that you need time to ramp up and will have questions, nobody learns this career overnight. If they are smart, they'll designate a bit of somebody's time to helping you get up to speed so that it doesn't detract from anyone's planned billable time.

You will also need the ability to learn and apply new information quickly. Technology changes, best practices change, frameworks and the tools that help us build our product(s) change faster than we can imagine. The product you are building could inevitably be changing right out from underneath you. There is no programmer alive that knows everything in this career, or even a specific language or framework. An individual might specialize in one area or another, but trust me when I say that none of us know it all. One day you'll be looking up how to re-order elements on a responsive site for smart phone users, the next you'll be learning best practices for non-relational databases, and after that you could be thrown into an all java project as a C# developer. Your project deliverables could move from having 400 hours left in the budget to having 200, and you need to propose a way to include all of the deliverables on a smaller budget. You could be leading a team of junior developers, or you could be on your own on a project that you underquoted by 16 hours. My point is that you need to be able to learn new technology, new people skills, and new practices quickly and be able to apply that knowledge to your job. It doesn't matter how good of a developer you are if it takes you twice as long as your peers or competition to complete a task correctly. 

I am in no way saying that in order to be successful you'll need to code the fastest, never ask questions, learn the most, and have the most fun doing it. The skills I'm highlighting are vital to a successful career in development similar to how a doctor needs to have a good memory in order to remember all of the medical conditions, symptoms, treatments, etc. that they need to give their patients the service they require, or how a teacher needs to have the patience and persistence to teach both the most gifted and the most challenged of students. They are just traits that you need to be a good developer, plain and simple. When I first started web development, I was having a hard time going from knowing only a bit of HTML, CSS, and javascript to learning .NET MVC, C#, basic back end architecture, and database migrations. I was overwhelmed, overworked, and losing my mind. The lucky colleague that was in charge of getting me up to speed told me something that I'll never forget. He said, "I know this is a lot to learn all at once, but you are doing it. You're not asking me the same questions, and you're not making the same mistakes twice, so just keep going." As long as you're learning, you're making progress.

As far as the great pay, the flexible schedule, and the perks like the casual dress code, office video games, and copious amounts of coffee, those are all things you should worry about after your development skills. If any of those things is the sole reason you want to get into development, don't bother. I know that is blunt, but as with any career, going into it for the perks or pay will hardly result in success and happiness. Maybe one or the other, but not both. The media used to publicize developers as pimply nerds in their parents' basements, but now they show coding careers to be a bunch of hipsters playing video games and shooting nerf guns, drinking fancy pour-over coffee and making six figure salaries. While some of these perks are real things, what you don't often see if the developers working tirelessly around the clock to deliver a product with an impossible deadline. The work we do from home, from the office, from coffee shops, etc. can make it one of the toughest careers for switching it off at the end of the day. The amount of time and effort that it takes to write high quality, robust code is a concept lost on pretty much everyone not in the field. What I'm trying to get across is that the perks of the job, while usually pretty great, should not be the focus of why you want to become a developer.

I want people, who don't know me already, to know that I'm no perfect developer. I'd consider myself successful in the field, a well-rounded intelligent developer who knows how to get the job done. However, I've made and will continue to make mistakes, I've written code I'm not proud of, done poorly on projects, and I've had some pretty tough lessons learned in the area of consulting, but we all have a history, and nobody has gotten to be a successful developer without failures. This is a wonderful, rewarding career, but it is not for everybody. With the job growth outlook, a lot of people are trying to become developers, and that's awesome, because the jobs are out there, but it isn't a career for everyone, and you should go after it for the right reasons, armed with the right skills and expectations.