Chapter 2. What makes companies successful?

What defines a true professional is their focus on the success of their company, not just churning out code like a robot.

Which is, obviously, impossible without understanding what makes a company successful.

Of course, there's no universal recipe. Building a successful company is incredibly challenging and requires getting hundreds of small details right.

But while every company is unique, at a high level they all share a few core characteristics. If you understand them - and how to influence them as a developer - you'll be well on your way to contributing to your company's success and becoming a highly sought-after professional.

So, what makes companies successful?

The 4 key elements of the company's success.

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

  1. Gain competitive advantage. First and foremost, a company needs to gain a competitive advantage. It needs to be better than the competition (or at least differentiate itself enough) in one or more of these aspects: having a better product, being more technologically innovative, building new products faster, or being cheaper.

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

  3. Sustain 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.

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

Let's take a look at these 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.

How can a company achieve it?

  • Adopt an empirical, iterative approach. Discover what users want through a series of short experiments.

  • Excel at rapidly validating ideas. Become efficient at quick iterations and prototyping, and develop a robust toolbox of product discovery and prototyping techniques.

  • Engage closely with users and understand what they do. Build strong relationships, gather feedback directly, and capture a robust set of metrics from product usage.

  • Foster cross-functional collaboration. Ensure close cooperation between engineering, product, design, marketing, and commercial teams so they all work together towards the same goal, without silos or stage gates.

  • Develop top-notch UX capabilities. Don't just understand and solve users' problems, but do so in a smooth and elegant manner.

Competitive advantage: Technology

Providing superior technical capabilities is another competitive edge. This is different from creating a more polished product. While you still need to solve real user problems, your winning strategy is not focused on refining the product but on making it capable of things no one else is capable of.

ChatGPT is a famous example. When it was first released, its interface was rudimentary and clunky, features limited, and it wasn't particularly tailored to solve specific user problems. However, its novelty and unprecedented capabilities made it one of the fastest-growing products ever.

It doesn't have to happen on such a dramatic scale, though. And it's achievable even without "big tech" resources. Smaller technical advancements can provide a competitive edge, too: make processes faster for the user, reduce their costs, make the product more capable.

How can a company achieve it?

  • Reap the benefits of being an early adopter, not an inventor. Understand how to still stay ahead of its competition without bearing the costs of developing the solution yourself.

  • Keep up with the latest trends. Be on the constant lookout for new and upcoming technological advancements, even outside of its direct niche.

  • Know how to capitalize on these advancements. Understand how to repurpose and adapt them to its specific business niche.

  • Understand which trends are worth investing in. Develop a strong intuition for distinguishing potential breakthroughs from fads.

  • Excel at incorporating new technologies quickly. Become proficient in researching, prototyping, learning, and integrating new solutions.

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.

How can a company achieve it?

  • Prioritize developer productivity. Invest in tooling, reducing technical debt, modular architecture, and an infrastructure that enables fast and frequent deployments.

  • Maintain high code quality. Don't get bogged down by bug fixes and hard-to-understand code.

  • Adopt modern product discovery and development processes. Implement lean and agile methodologies, continuous integration/continuous deployment, feature-flag-based development, and similar.

  • Implement a solid continuous improvement process. Ensure it has a system in place to consistently refine and optimize its processes.

  • Strike the right balance between going fast now and maintaining speed over the long term. Navigate the fine line between cutting too many corners and over-engineering, as well as between building things fast and building the right things.

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 the competition.

How can a company achieve it?

  • Equip "operations" teams with high-quality tools. Make them as good as customer-facing features, not just an afterthought.

  • Provide "operations" teams with outstanding tech support. Ensure it's responsive, timely, and proficient.

  • Ensure that "operations" teams have access to necessary expertise. Provide them with robust documentation, technical training, and direct access to engineering teams.

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.

The ability to cope with these complexities is a necessary ingredient to become a successful company.

How can a company achieve it?

  • Develop the capability to rapidly grow the team. Become proficient at recruitment, onboarding, and training new hires.

  • Effectively scale the organizational and management structure. Build a network of autonomous, self-organizing teams that don't need to be micro-managed.

  • Make architecture and codebase modular. Enable multiple teams to work concurrently without conflicts.

  • Make it easy to share, discover, and reuse existing code. Empower teams to go fast without duplicating work.

  • Ensure effective coordination between teams. Foster top-notch communication, goal-setting, planning, documentation, and cross-team collaboration.

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 a company achieve it?

  • Keep technical debt under control. Consciously manage it, keeping it in check without compromising business value or getting bogged down in massive, risky refactoring projects.

  • Make deliberate architectural, vendor, and technology choices. Be aware of their consequences: vendor lock-in, maintainability, long-term support, ease of learning, ease of recruitment, the robustness of the ecosystem, and ease of future replacement.

  • Be aware of the business impact of technical decisions. Understand which opportunities these decisions may enable or hinder.

  • Balance functional and non-functional concerns. Never stop delivering value to customers but don't neglect the non-functional requirements of its product.

  • Avoid ad-hoc decisions. Develop and follow a deliberate, long-term technical strategy.

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).

How can a company achieve it?

  • Be able to swiftly pivot market strategies. Cultivate agility to adapt to changing market conditions.

  • Build the capability to efficiently assimilate new technologies. Maintain the platform and train the team in a way that makes this possible.

  • Develop the ability to reorganize quickly. Excel at adopting new processes and adjusting the organizational structure.

  • Effectively implement radical changes. Be able to accomplish this without causing chaos, slowing down, compromising quality, freezing projects, or requiring massive retraining or rehiring.

Do you really need to know all of this?

If you want to be a true professional - the "proactive chef" from the previous chapter - then yes.

The purpose of a professional 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 - 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 far more satisfying to understand the whole picture than just blindly follow what you're told.

And, what's most important, while many of the points discussed above might appear to be management problems, beyond the reach of an individual developer, you have much more influence over them than you think.