Spoiler alert (there is no definite answer 😉 ) As a CTO or tech team leader, balancing fast development with best practices is always a tricky exercise. Though, it’s crucial to strike the right equilibrium between speed and quality. Without having the pretension of giving you an absolute answer to the question, I hope you’ll…

By

New project: should we choose between speed and quality ?

Spoiler alert (there is no definite answer 😉 )

As a CTO or tech team leader, balancing fast development with best practices is always a tricky exercise. Though, it’s crucial to strike the right equilibrium between speed and quality. Without having the pretension of giving you an absolute answer to the question, I hope you’ll find there some insights to guide you along the way.

In software development, striking the right balance between speed and quality is crucial for project success. As technology and market demands evolves rapidly, companies – specifically in early stage startups – face pressure to deliver software quickly while maintaining high standards of quality. The need for balance arises from several factors:

  1. Market Competitiveness: Fast development allows companies to respond quickly to market demands and stay ahead of competitors.
  2. User Expectations: Users expect both rapid updates and high-quality, reliable software.
  3. Resource Constraints: Limited time, budget, and personnel often require trade-offs between speed and quality.
  4. Technical Debt: Moving too fast without considering quality can lead to accumulated technical debt, slowing down future development. Moreover a good quality code will attract better developers when it will be time to make the team is grow.
  5. Business Goals: While speed helps meet short-term objectives, quality ensures long-term success and customer satisfaction.
  6. Security: In a world where cyber-threats are growing, the quality of the design and protection of the code, servers and databases will make the difference both for customers and for investments.

Now time to focus on some dos and don’ts. It might seem quite obvious but those are also to mitigate with the time constraints and the size and level of seniority of the initial development team.

Dos

1. Implement Agile Methodologies

Embrace agile methodologies to balance speed and quality effectively1. Agile emphasises iterative development, collaboration, and flexibility, enabling teams to respond quickly to changes while maintaining high standards.

2. Prioritize Features

Set realistic goals and prioritize features based on their value to the product1. This approach helps maintain focus on what matters most, ensuring that you’re delivering important features quickly while upholding quality standards.
Benefits of Feature Prioritisation

Improved User Experience: By focusing on developing key features first, startups can ensure that their software provides a positive user experience, which can help attract and retain customers.

Efficient Use of Resources: By prioritising features, startups can allocate their resources more effectively, focusing on developing the most important features first.

Increased Speed-to-Market: Prioritising features can help startups bring their software to market more quickly, allowing them to capitalise on opportunities and gain a competitive edge.

3. Adopt CI/CD Practices

Implement Continuous Integration and Continuous Deployment (CI/CD) pipelines. This automates testing and deployment processes, allowing for frequent code changes while maintaining high quality through regular integration and automated tests. Depending on your project this might include different practices, listing, unit-testing, functional testing, DataOps, MLOps. This is the CTO’s role to have a broader view of it all in order to enable good CI/CD strategy.

4. Encourage Code Reviews and Pair Programming

Prioritise code reviews and pair programming to maintain code quality without significantly slowing down the development process. These practices help catch potential issues early and promote knowledge sharing among team members. This has the double effect of creating bounds between teammates and also create redundancy in the code knowledge.

5. Use Feature Flags

Implement feature flags to deploy new features to production without immediately exposing them to all users. This allows for faster deployment while providing flexibility to test and refine features before full release. This, I’ve never implemented before but we are planning to. I have to admit that sharing a feature with a small number of testers or introducing it to a proportion of the users in order to test its impact on business or see if it is really adopted by the users and we should put more efforts on it is something done for a while by big techs and an interesting tool.

Don’ts

1. Don’t Sacrifice Quality for Speed

Easiest said than done for sure especially under the pressure of VC’s CEO and with the release date arriving quick. This comes with the ability to estimate properly how much time is needed to develop a feature. This is not always easy when facing a new team not knowing how and how fast they work. Trust has to be given but checked. If time is not enough, discuss feature that can be delayed. Avoid taking shortcuts that compromise quality, even under pressure to meet tight deadlines2. This comes hand in hand with CI/CD practices. If a good development and deployment pipelines are in place then this will let the team focus on the code. Maintain high standards to prevent accumulating technical debt.

2. Don’t Ignore Technical Debt

While moving fast, don’t neglect addressing technical debt. Allocate time for refactoring and improving existing code to prevent long-term issues.

Why Ignoring Technical Debt is Risky ?

  1. Increased Costs: Over time, the cost of addressing technical debt escalates. Fixing accumulated problems requires more effort, resources, and time compared to addressing them promptly.
  2. Reduced Efficiency: Outdated or poorly optimised software and processes hinder productivity and efficiency, leading to employee frustration and decreased job satisfaction.
  3. Competitive Disadvantage: Ignoring technical debt can impede innovation and agility, putting your business at a disadvantage compared to competitors who can adapt more swiftly.
  4. System Failures: Accumulated technical debt increases the likelihood of bugs, crashes, and performance issues, potentially disrupting business operations.

Strategies to Address Technical Debt :

  1. Regular Code Reviews: Implement a process for ongoing code reviews to catch and address issues early.
  2. Refactoring: Allocate time for refactoring legacy systems and improving existing code.
  3. Automated Testing: Implement comprehensive automated testing suites to catch issues early without slowing down development.
  4. Debt Calculation: Use top-down and bottom-up approaches to calculate and address the incremental costs related to technical debt.
3. Don’t Overcommit

Avoid overcommitting to features or deadlines without considering your team’s capabilities and limitations. Be realistic about what can be achieved within given timeframes. As already stated, this can be tricky in new teams as it is hard to assess the delivery capabilities, the degree of seniority. In addition a clear view of the project’s roadmap that does not change too often is critical.

4. Don’t Neglect Documentation

There is nothing worse than a good project that nobody else than the original author can understand. Taking over thousands of lines of code with our comments and / or documentation on the why, where and how can be overwhelming, even for senior developers. By experience, they oftentimes refuse to dive into this kind of code because this turns into a lost quest. In the rush to develop quickly, don’t skip proper documentation. Clear and up-to-date documentation is crucial for maintaining and scaling your software In this case more is better. Is you hesitate to add it to the documentation, put it in the worst case nobody reads it, in the best case it saves you long explanations.

5. Don’t Ignore Scalability and security

While focusing on rapid development, don’t overlook the importance of building scalable solutions. Consider future growth and potential challenges when making architectural decisions. Indeed a web-platform might add features, the number of users can have rapid ups and downs, people might use your application for some of its features in an unexpected way. The only thing to do is prepare for the worst.

Take home message for maintaining Balance

  1. Set clear priorities for each project, considering both speed and quality in decision-making. This will clear everyone’s head and it is easier to work when you know in which direction. This will have a good effect on your team’s mood, and probably yours.
  2. Monitor key DevOps metrics to track progress and identify areas for improvement2.
  3. Foster a collaborative culture between development, operations, and quality assurance teams.
  4. Implement the DRY (Don’t Repeat Yourself) and YAGNI (You Ain’t Gonna Need It) principles to improve code efficiency and prevent over-engineering3.
  5. Utilise version control and conduct regular code reviews to maintain code quality and facilitate collaboration.

Leave a comment

This site uses Akismet to reduce spam. Learn how your comment data is processed.