DEV Community

Frank
Frank

Posted on

Maintaining Velocity Amidst Complexity

View a tl;dr on Substack

As a startup grows, complexity grows with it:

  • With more and more engineers working on the same codebase, you no longer have complete control over the code that gets shipped.
  • A more sophisticated product means a more interconnected web of services, schemas, and external dependencies.
  • More users and stakeholders mean that you now have to solve for an increasing number of different preferences.

Whether it be launching a new product line or raising another round of fundraising, your ability to embrace this complexity is critical to maintaining velocity within a startup. Here are some things that I’ve found works well.

1 Hire & train the right people

Technical founders have a tendency to want to do everything themselves. This works well for an early-stage company, where complete ownership means fast execution and holistic understanding of the product.

However, as the company and the product grows, trying to maintain complete ownership is a recipe for burnout. Instead, founders that scale have key delegates that they trust to own a particular organizational/product domain.

A startup’s first hires are critical. You want to enlist intelligent and self-driven individuals that can eventually grow to take partial responsibility of the company. Additionally, it’s important to invest time and energy into onboarding and training these hires. It may be tempting to do something yourself because it’s easier and faster, but allowing your hires to struggle with tasks of increasing scope is an important part of their learning process.

Without the right people, even the most robust processes will fail to drive results.

2 List and delegate dependencies

When embarking on a new initiative, you must first define what exactly you are trying to accomplish. It’s important to ask the following:

  • What are all the things that need to happen in order for us to succeed?
  • What is the order in which these tasks need to occur? Which tasks are interdependent?
  • Who can take full responsibility of these tasks?

Start from the end result and start tracing the dependency tree back to the current day. This will allow you to create a list of tasks that act as a high-level roadmap.

Then, delegate these dependencies to the people best suited to take responsibility.

3 Have frequent check-ins

With items 1 and 2, you will have created a plan and assembled a team to execute on that plan. However, the entire process can easily fall apart without a leader to act as a lubricating mechanism to the cogs of an organization.

Touchbase with stakeholders regularly to understand progress and adjust timelines as needed. These check-ins are also good opportunities to realign priorities and address blockers. Answer key questions, such as:

  • What has the team been working on since the last sync?
  • Is anyone experiencing any blockers on their progress?
  • Does anyone have concerns about the success of the project deliverables and timeline?

While async workflows can be great for this, I find that a weekly synchronous call does wonders for team cohesion.


The ability for you to execute a complex project ultimately rests on:

  • Having the right people to take responsibility
  • Proper planning to ensure all dependencies are met
  • Regular check-ins to update progress and revise projections

These might seem painfully obvious, but it is one thing to understand how to do something and another to actually to do that thing properly. The best leaders have a plethora of experience in past projects, both successful as well as not, from which they gain an intuition for managing complexity.

Top comments (0)