Engineering Momentum: The Formula for Balanced Software Development

Miguel Pessoa
12 min readOct 28, 2024

--

Image generated with ChatGPT
Engineering Momentum and linear momemtum images, generated with ChatGPT

In the fast-paced software development environment, achieving sustainable growth often depends on balancing delivering value quickly and maintaining high-quality engineering. This equilibrium is what I call engineering momentum — the product of business values (the speed of delivery) and mastery (the quality depth of your ecosystem). Like linear momentum in physics (ρ = m * v), engineering momentum is about moving forward without losing control, where velocity is our delivery speed and mass is our technical mastery. If one element — speed or mastery — outweighs the other, the system collapses. This article will explore why maintaining this balance is crucial and how teams can cultivate engineering momentum for long-term success.

The Definition of Engineering Momentum

Engineering Momentum Formula

Engineering momentum is about the right balance between speed and quality. It’s about moving quickly enough to satisfy business demands while ensuring that the technical foundation remains solid. Pushing for speed without adequate quality can lead to accumulating technical debt while prioritizing quality too heavily can cause a team to miss out on valuable opportunities. The challenge is finding a pace that allows for rapid progress without compromising the long-term stability of the system.

To visualize this concept, think of linear momentum: It represents how much motion an object has and how difficult it would be to stop or change its trajectory. The greater the mass or velocity, the larger is momentum, and the harder it is to disrupt the object’s forward movement.

In the software engineering context, velocity represents the pace at which features and products are delivered, driven by business strategy. Mass, on the other hand, symbolizes the engineering robustness — technical excellence that can carry the weight of future development

Balancing business strategy with technical excellence is crucial since it ensures that teams can meet short-term goals while securing long-term sustainability. Failing to maintain this balance results in two common, but dangerous, extremes: runaway technical debt or stagnation caused by overly cautious development practices. In either case, the team’s ability to deliver value is compromised. In both cases, momentum (whether linear or engineering) is about moving forward without losing control.

The Trade-offs

To keep moving forward, having an acceptable threshold should guide decision-making when one side tilts more heavily.

When we focus too much on accelerating the business to deliver new features and evolve the product, we can reach a dangerous scenario where our systems and services fail to scale. For example, consider a monolithic structure with both read and write APIs. If read volume spikes suddenly and our system can’t scale horizontally, it may lead to service unavailability and impact business support.

On the other hand, if we don’t tune in to business signals showing growth opportunities, we might adopt engineering practices like microservices, read replicas, and autoscaling tools based on CPU, memory, and queues that don’t make sense without sustained use. Another example is code quality: starting with advanced patterns like a hexagonal architecture instead of simpler models like MVP can make maintenance costly over time. What was initially built to support rapid growth can eventually become a maintenance burden and even be deemed overengineering.

Engineering teams that collaborate effectively, align needs with stakeholders, and listen to customer insights tend to make simpler, more context-driven decisions. It’s crucial to remember that there’s no shame in first adopting simpler, naive solutions. A strategic short-term vision delivers value quickly and builds a roadmap from simplicity to scalability. The more product-driven engineering is, and the more data we have to justify potential needs, the easier it is to prioritize demands where balance is both valid and beneficial.

Business Strategy: Speed and Market Opportunities

Businesses often demand rapid feature releases, especially in competitive environments where first-mover advantage is key. A focus on speed means embracing trade-offs that can introduce technical debt. Quick fixes, rushes to meet deadlines, or shipping a Minimum Viable Product (MVP) can all accelerate time-to-market, but they often come at the cost of code quality.

  • Examples: You’ve likely seen this with aggressive launch schedules, where engineers implement quick-and-dirty solutions or postpone refactoring (a “later” that never seems to come).
  • Impact: In the short term, you meet market demands and deliver value quickly. However, the technical debt accumulated can become a long-term burden, making future changes more difficult and costly. It means that launching new user features will not be as easy as intended.

Technical Excellence: Breathing Room for Stability

On the flip side, when the pressure to ship fast is relieved (there always will be time for that), teams can focus on refactoring, optimizing performance, and enhancing platform stability. By addressing technical debt and improving quality, teams create systems that are easier to maintain and scale over time. Engineers should advocate for improvements and communicate clearly why the improvement plan makes sense for the business.

  • Examples: Prioritizing codebase decomposition, improving test coverage, or conducting performance optimizations fall under this category.
  • Impact: Long-term stability is ensured, and future development becomes smoother. However, this approach can slow down immediate delivery, which may cause friction with business stakeholders.

The Trade-offs Across Company Stages

Depending on the organization’s phase, being more aggressive in business or focusing on technical excellence might be more important. As engineers, our role is to communicate potential problems and act as facilitators, providing visibility into risks at each stage. Beyond good intentions, we need proactivity, organization, communication, and documentation to uphold quality within the company. Leaders play a crucial role in guiding and paving the way.

Below, we can explore different organizational phases and how engineering momentum applies to each. Although they are presented linearly, these phases are rarely linear in reality. It’s essential to observe and quickly adapt strategies, whether the organization is expanding or shrinking.

Early Stage (Pre-seed, Seed)

In the earliest phase, speed is everything. The focus is on validating ideas, building MVPs, and getting a product to market quickly to find product-market fit. This is a phase where rapid iteration and willingness to make trade-offs are critical, but it can lead to certain risks if not managed carefully.

Example: In the pursuit of delivering quick wins, our team often opted for hardcoded solutions to accelerate MVP delivery. This decision allowed us to validate features quickly, such as using low-code platforms that later required a more sophisticated service for scale. While effective in the short term, it increased technical debt that needed to be addressed before scaling became possible.

🎯 Focus: Survival and Validation, MVP

Engineering Momemum factors:

Speed: Rapid prototyping to achieve product-market fit
Mastery: Focused on working code, not perfect code.

Trade-offs:

— High speed often means technical debt is accumulated
— Quick pivots may lead to rework.

Priorities:

— Deliver a working MVP quickly
— Minimal viable stability

Series A: Building the Core Product

Once product-market fit is achieved (check for satisfaction, demand, and efficiency [ref]), the focus shifts to scaling core systems and handling increased user demand. This phase requires more attention to technical robustness while still delivering value quickly to stay competitive. Imbalances at this stage can expose weaknesses in the architecture and lead to significant roadblocks.

Example: We can encounter moments where teams operate with conflicting roadmaps, resulting in duplicated work and misalignment. Features can be implemented without proper synchronization between teams, causing inefficiencies.

🎯 Focus: Scaling core product, acquiring more users

Engineering Momemum factors:

Speed: Scaling features to attract more users
Mastery: Still secondary (quality depth) but becoming more important.

Trade-offs:

— Scaling fast can expose gaps in the initial architecture.
— Delayed Refactoring: Quick wins from the early stages start to show cracks if technical quality doesn’t catch up. As a company grows, refactoring is needed to handle more complex requirements, but this often takes a back seat to rapid feature development.

Priorities:

— Build scalable architecture (pave the road)
— Start addressing technical debt.

Series B: Scaling the Business

At this stage, companies are expanding into new markets and refining their product. The codebase becomes more complex, and systems require scalability to support larger user bases. The stakes are higher, and the consequences of moving too fast or too slow become more pronounced.

Example: Team focus on delivering business features quickly sometimes resulted in delayed communication with product teams. This lack of alignment led to confusion, such as features descending through the development funnel without sufficient cross-functional visibility (engineers requested changes, due to miscommunication). This created a cycle of rework, slowing down the momentum.

🎯 Focus: Expansion and market growth

Engineering Momemum factors:

Speed: Must maintain velocity to stay ahead of competitors
Quality: More focus on refactoring, stability, and performance.

Trade-offs:

— Balancing between speed and codebase stability is critical
— High technical debt can cause outages or inefficiencies.
— Implementing scalable solutions like microservices without a clear need can lead to over-engineering. Conversely, failing to refactor monolithic systems that have outlived their purpose can result in poor performance under increased load.

Priorities:

— Optimize the platform for performance
— Improve development processes
— Important moment to plan for developer experience (DevEx)

Series C,D, and Beyond: Focus on Long-Term Sustainability

In the maturity phase, the focus is on fault-tolerant, reliable, and optimized processes. Moving too quickly can lead to quality issues while moving too slowly can stagnate innovation and growth. Companies in this stage need to balance maintaining the system’s integrity while continuing to innovate.

Example: Overemphasis on stability can lead to slow-moving releases, creating friction with business stakeholders eager for faster feature delivery. Refactoring legacy systems is crucial for long-term success, but it sometimes overshadows the need to respond quickly to market shifts.

🎯 Focus: Optimization, product diversification

Engineering Momentum factors:

Speed: Focused on reliability and reducing bugs.
Quality: High priority; teams focus on refactoring, and optimizing code.

Trade-offs:

— Prioritizing stability can slow down new feature releases
— Teams may spend more time improving the existing system.
Mature companies often face the challenge of addressing accumulated technical debt from earlier stages. If not managed properly, the cost of maintaining and updating older systems can slow down progress.

Priorities:

— Maintain reliability at scale
— Ensure new features don’t disrupt stability.

What emerges from going fast vs. slow is the realization that no one-size-fits-all approach works at every stage. Instead, teams need to continuously adapt, assess their current needs, and recalibrate their engineering momentum. Knowing when to slow down for quality and when to speed up for market demands is what differentiates successful companies from those that lose their way.

Maintaining Engineering Momentum

So, how do you maintain engineering momentum — moving fast, ensuring quality without holding back progress?

In traditional software development, the process of delivering a product or feature is divided into several steps. Considering that teams adopt an iterative and incremental delivery culture, software specifications can change as new deliveries are made. This model works up to a certain point, but several challenges emerge:

  • Software specifications that don’t consider the product holistically are dangerous
  • If the team doesn’t reflect and adjust processes, each stage can become a bottleneck
  • Opportunities for individual and collective evolution are often missed
Regular software development culture.

Therefore, we need to cultivate a development culture that goes beyond feeding technical requirements to retroactively inform business decisions at each phase.

Technical Specification and Requirements: Functional and non-functional requirements are essential for determining success. Understanding the core pain points and addressing aspects like fault tolerance and scale is crucial. When these requirements are properly identified, it becomes easier to estimate effort and engage in meaningful dialogue about priorities.

Execution: Consider a scenario where your team adopted MVC architecture for rapid prototyping, but over time, business rules evolved and became increasingly complex. As new APIs were added, maintaining controllers and services updated creates coupling (requiring updates to controller, service, and model at the same time). So, it is necessary to maintain balance:

  1. Bringing visibility to risks (in this case, coupling between API configurations and business rules) and explaining the risk related.
  2. Reflecting on whether the team sustains and keeps the flow without solving the problem or, if it is time to consider a new architecture where adding and testing new business rules becomes more straightforward.
Feedback loop, at each stage looks for functional and non-functional requirements.

For the following stages, similar principles should be applied. Do we have a CI/CD system robust enough to support rapid development and deployment of new features? Are we tracking key metrics like latency, error rates, and throughput that impact not only service quality but directly affect user experience?

In these examples, the engineering team should stay close to the business side to understand requirements accurately and adjust the pace as needed. The process remains consistent across stages: identifying and communicating risks, documenting them, and developing a plan for incremental evolution. This is often a challenging task that requires clear ownership and team members investing in ongoing improvement. Software development is inherently a collective effort, requiring a quality-focused mindset across the team. Furthermore, there must be a strong focus on data integrity and strategy after the feature is running in production. What are the rules for database mapping? How frequently are updates applied? How do we connect the database to analytical processes? Software and data engineering teams need to collaborate closely to deliver the full value that the business demands.

Feedback Loops for business and engineering demans

At the right time, a process that may have seemed simple at the start needs to be refined and enriched at every step. Functional requirements should evolve from user needs, backed by research data and with an analytics structure (events, audit, raw, etc.). Risk factors should be assessed and communicated to the engineering team, requiring ongoing discipline to iterate on each step. It’s essential to create a plan that balances ownership, code quality, and technical debt having space for experimentation.

To make this process work effectively, it’s vital to cultivate a cross-collaborative culture that prioritizes communication, continuous learning, and, above all, the capacity to adapt to different organizational phases. Technical leaders and engineering managers must align to evaluate the plan, retention strategies (setting clear expectations for individuals and teams), and hiring of new team members with the skills that align with the business’s current needs. Maintaining engineering momentum requires constant observation and adaptability.

Below is a simplified overview of this process:

1. Regular Assessments

Regular reflection is key to aligning business objectives with the software engineering process. This involves not only tracking metrics and outcomes but continuously questioning the relevance and impact of ongoing projects. Is the engineering work aligned with the evolving business needs? Do the systems, tools, and processes still provide efficiency and scalability? Assessments should be methodical, with action items documented, shared, and integrated into ongoing workflows. These evaluations help identify and address gaps in speed, stability, and scalability, ensuring the engineering process remains synchronized with business growth and market demands.

2. Engineers Should Aim for Autonomy, Mastery, and Purpose

Once software is delivered, engineers should cultivate a mindset centered on autonomy, mastery, and purpose. Autonomy empowers engineers to make decisions within their domain, which fosters accountability and trust. Mastery drives individuals to improve their technical skills, engage in problem-solving, and continuously seek better solutions. Purpose gives engineers a sense of the larger mission, enabling them to see the value of their work beyond individual tasks. Together, these three pillars fuel motivation, job satisfaction, and, ultimately, higher-quality outcomes.

3. Communicate — Over-communicate When Necessary

Steps 1 and 2 converge through communication. Documentation is the bedrock of alignment, ensuring that progress, changes, and risks are visible across the team. Transparent communication prevents misalignment and misunderstandings, which can slow down momentum. Effective documentation and regular updates offer stakeholders active visibility into the project’s status, enabling them to make informed decisions and allocate resources appropriately. Over-communicating — providing additional updates, details, or context when necessary — helps solidify this visibility, especially during critical transitions or challenges.

4. Cultural Shift

To effectively balance engineering momentum, there needs to be a cultural shift across the organization. Engineers should be empowered to advocate for technical excellence, while business leaders must recognize the importance of high-quality deliverables in the long term (share Accelerate with cross-leaders). Encouraging open communication between business and engineering teams can bridge gaps in understanding, promoting a culture that values both speed and quality.

Conclusion

Engineering momentum is more than just delivering features or maintaining a clean codebase. It’s about finding a rhythm that allows your team to move forward consistently, balancing the needs of the business with the health of your technical infrastructure. Regular assessments, debt management, and continuous improvement are key strategies for achieving this balance. As we sustain engineering momentum, it’s not just a matter of maintaining speed but ensuring technical mass increases in a way that supports, rather than impedes, our progress.

--

--