TrueSeniorDev

Are You a PROFESSIONAL Developer? Or Just a Code Monkey?

In a nutshell

The evolution of software development (too critical to neglect, too complex to micromanage)

As Marc Andreessen famously said in 2011, software is eating the world.

Modern companies depend on software as never before. Even if they don't sell it directly as a product, software is still fundamental to driving their operations and growth. It's critical for their customers, employees, suppliers, and partners. It's the engine that runs the business - and the network that connects it with other businesses. It's the cornerstone of the company's success.

At the same time, the software got bigger. Much bigger. And the software development process got incomparably more complex: Huge teams. The whole portfolios of products. A vast network of interconnected APIs. Complex distributed architectures. Tens or even hundreds of external vendors. Constant progress at a crazy pace. Cutthroat competition and continuously changing user tastes. No manager, analyst, or architect is able to micromanage it all. The responsibility has to be distributed.

And this completely changes the game for us, developers.

Raising the bar for software developers (the new definition of a "code monkey")

A "code monkey" isn't a new term. Developers who just churn out code without looking at a broader context were frowned upon from the early days of programming. However, for a long time, this "broader context" just meant more conceptual work like code design or architecture. But it doesn't cut it anymore.

Nowadays, I'd define a code monkey differently: A code monkey is a developer who contributes only to building software, not to the holistic company's success.

Yes, this is why we, developers, are hired. To generate business value. To make companies grow and thrive. And this requires a different mindset and a different, broader set of skills.

But, first of all, you need to understand what makes companies successful - and where you fit into this puzzle.

The 4 key elements of the company's success (and how you can influence them as a dev)

The recipe for a company's success, while insanely hard to achieve, is, at its core, very simple.

First of all, a company needs to have a competitive advantage. It needs to be better than the competition (or at least differentiate itself enough) in one or more of these aspects: have a better product, be more innovative technologically, build new products faster, or be cheaper.

Then, when the company becomes successful, it naturally starts to grow. Rapid growth is hard to manage and - if the company is not skillful at it - can destroy its competitive advantage.

Next, to be truly successful, a company needs to sustain its competitive advantage over time. It needs to cut enough corners to win now - but not as many as to die the "death of a thousand cuts" later.

Finally, the world never stands still. To not lose its edge, a company needs to continuously evolve to adapt to the ever-changing user tastes, competition, and market.

Let's now take a look at these 4 ingredients in more detail.

Competitive advantage: Product

Building a better product is the most obvious competitive advantage. If users like and buy your product more than the other ones - you win. But what convinces them to do so?

It all boils down to two things: addressing users' needs and providing a great user experience.

So how you, as a developer, can influence these two areas?

Competitive advantage: Technology

Developing more advanced technology is another competitive edge. This is a bit different from just creating a better product. Of course, you still need to solve real user problems, but your winning strategy is not making the product more fine-tuned and polished but making it capable of things no one else is capable of.

Imagine invoicing software. Making re-typing the content of paper invoices into the system by hand smoother, faster, and done in fewer steps is one thing but being able to import them automatically, without typing anything, through advanced text recognition and extraction would be at a completely different level, even if the interface is not that polished.

It doesn't have to happen at such a dramatic scale, though. Even small technical advancements can provide a competitive edge: make processes faster for the user, reduce their costs, make the product more capable.

But how a regular developer can help their company gain a technological advantage?

Competitive advantage: Process

The next way of gaining a competitive advantage is through better processes. In other words, the ability to build stuff faster than the competition without sacrificing quality. In the short term, it will give your company the first-to-market advantage. In the long term, it will allow you to experiment more rapidly, which will impact also the first two advantages: better product and technical innovation.

An important part of a good process is also the ability to continuously refine the process itself, to stay ahead of the competition in the long run.

Processes - especially related to efficient delivery - are something developers have a lot of influence over.

Competitive advantage: Operations

The last type of competitive advantage is more efficient operations. Depending on your company's profile you may have different teams involved in acquiring, onboarding, and supporting users: sales, call center, customer success, customer support, implementation, operations, invoicing, and so on. Making these teams faster, cheaper, and more user-friendly is another way to win over over the competition.

How can you help with this as a developer?

Growth

To become successful, companies need to constantly grow their revenue. It almost always means also growing the team. This, in turn, means more recruitment effort (including onboarding and mentoring), a bigger codebase, more complicated architecture, and increased complexity of organizational structure. It also makes communication, teamwork, and management more challenging - usually to the point where top-down micro-management doesn't cut it anymore.

This sounds like a management problem. But even as a "regular" developer, you can help much more than you think.

Sustainability

Companies are long-living entities. Gaining a competitive advantage and achieving initial success is only the start of the game. A company needs to sustain its success over decades.

But when a company is under constant pressure, fighting off new challengers and chasing ever-changing market conditions, it's often necessary to cut corners. Which may put the company at risk further down the road.

To thrive over a long time, a company needs to strike a fine balance between aggressive and sustainable. How can you help maintain this balance?

Adaptability

To stay successful for a long time, sustainability alone is not enough. Companies also have to continuously adapt (or even reinvent themselves).

A company has to adapt to the macro-scale events (changing market conditions, changing customer tastes, new technologies, economic situation, fashion, and social trends) and to the micro-scale events (finishing and starting projects, people leaving and joining, reorganizing teams or departments, adopting new methodologies and processes).

It may, again, seem like something out of the scope of a software developer. But with the right attitude, you can help much more than you think.

Bottom line

A purpose of a developer is to make the product and company successful. That's why we're hired. That's why we exist. And modern software is so complex that this process can't be micromanaged. We must proactively contribute to the company's success. Become the experts on the topic.

If you understand the holistic view - what makes companies successful, how the software fits into this puzzle, and how you can influence it as a developer - you'll be invaluable. (And it also opens the door to a future leadership career.)

Plus, it's much more satisfying to understand the whole picture than to just blindly follow what you're told.


Don't want to be just a code monkey? Read my "Definitive Guide to Becoming a TRUE Senior Dev" (FREE on GitHub).