In the world of acting, an actor or actress is said to have a wide acting “range” if they are able to play a variety of roles. Those who have a wide acting range are considered to be some of the best, and others are sometimes known for playing the same role in every movie. I’m sure you’ve noticed this before…
I believe that in the world of software development, there are two main “roles” that can be played. The people that I’ve worked with and have managed typically fall into one of these two buckets:
The Startup Developer
The first type of developer is one that works well at startups. This person works well under pressure and is not afraid of shipping quickly written and untested code. Often times, this person is motivated by the mission or end-goal of the software, and looks at code as merely a tool to solve problems.
Pros: The Startup Developer can ship tons of code quickly, which is great when you’re trying to get a new product off the ground. This person will build out an entire feature, tear it down and rebuild it multiple times until it solves every problem. This person is not afraid to get their hands dirty, make mistakes, and learn new things as they work.
Cons: The code that the Startup Developer writes will likely be code that solves short term problems, but does not consider longer term problems. At some point this code will likely need to be re-written.
The Enterprise Developer
The Enterprise Developer is an engineer who’s talents are better aligned with larger companies. This person looks at code as an art form, and is motivated by writing perfectly written code with full test coverage. They take pride in doing things the proper way.
Pros: The Enterprise Developer is capable of writing foolproof code that can last years or decades without being updated or fixed. This person often deeply understands the programming language and tools they are working with at an expert level.
Cons: It can be difficult to understand the Enterprise developer’s motivations, or get them excited about the business problem being solved. Without understanding their motivation, it can be difficult to get this person to have a sense of urgency in delivering a working solution.
A Third Role
All companies need a mixture of people that fall into both of these roles in order to be successful. The Startup Developer is likely more valuable to the organization in the beginning as you’re vetting ideas and business problems. However, once you know the problems you’re solving are worth solving, having an Enterprise Developer to build a foolproof solution is extremely valuable. For most companies that are innovative, there is a continuous cycle of need for both of these types of people.
However, I believe there is a third way for developers. Learning from the world of acting, I think that Developers should challenge themselves to have “range” when it comes to their work. When solving new problems with unknown markets, the Startup Developer role should be used. Solve problems quickly without writing the perfect solution. When there is a problem that is core to business and it is proven that customers need a reliable solution, bring out the Enterprise Developer and invest in making a solution that will last years.
This “dynamic” approach to problem solving should seem obvious, but from what I’ve seen this is extremely challenging for software developers to do. What I’ve seen that naturally happens is that new software developers fall into the Startup role because they do not have strong opinions about how software should be written. Thus, they aren’t afraid to make mistakes.
As they learn more, they develop strong opinions about the right way to build software. This is where things are counterintuitive. Once most developers reach this point, they lose the ability to act in the Startup Developer role. It’s not that they choose not to. It’s that they can’t.
I want to be extremely clear here because you may think that I prefer the Startup Developer over the Enterprise Developer. I think both of these personas have strengths and weaknesses. What I’m saying in this post is that truly great developers can evaluate their circumstance, and pick the correct approach for each individual problem. This is something that takes practice, and not every developer is capable of this.
If you’re anything like me, I got into software because I was excited about what could be created. I was motivated by all the possibilities, and at that time I was the Startup Developer. Then, at some point, the code became more important to me. I was obsessed about learning how to write immaculate code, but what problems I could solve with that code become unimportant. Now, I’m once again realizing that code is a tool used to solve problems and make things that bring people happiness. That is my new purpose, and I’ll have to use both the Startup and Enterprise Developer roles in order to achieve this purpose.
Many things can’t just be told to people. They have to learn it themselves, and this is likely one of those things.