A common phrase we hear in the technology space is "Move fast and break things" which became words to live by for a lot of technology companies and startups and by proxy, software engineers. But should we really move fast and leave a mess behind?
As with most concepts in software engineering, It is crucial to strike a balance between moving fast and maintaining a high level of quality and maintainability. On the one hand, Fast and Furious (**inserts not-so-funny movie pun) allows us to deliver new features and updates to our users quickly, which can help to drive business growth and stay competitive. On the other hand, sacrificing code quality and maintainability can lead to a host of problems down the line, including buggy and unreliable software, increased technical debt, and a difficult and time-consuming development process.
One key way to balance the Need for speed with the need for maintainability is to invest in automation early on. For example, automated testing can help ensure that new code is reliable and does not introduce bugs, without requiring a time-consuming manual testing process. Automated code review tools can also help to catch issues before they make it into the codebase, and continuous integration and deployment systems can help to automate the software delivery process. Abstracting the mundane and replacing it with automation is one key area to optimise for speed while investing heavily in building maintainable systems.
Another important factor to consider when aiming for speed is the long-term sustainability of the codebase/ system. While it may be tempting to take shortcuts and hack together solutions in order to move quickly in the short term, these shortcuts can often lead to complex and difficult-to-maintain code in the long run. Instead, it is important to prioritize code readability, modularity, and abstraction in order to make the codebase easier to understand and work with over time. Remember, the time "saved today" by building hacky systems and taking shortcuts would be paid back down the road when there are change requests and new implementations to be done. Do not build legacy systems from the get-go!
Ultimately, the key to balancing the need for speed with the need for maintainability is to approach software development with a long-term mindset. This means investing in automation, prioritizing code quality and sustainability, and continuously reevaluating and refining our development processes in order to find the right balance for our team and our users. By taking a holistic view of the software development process, we can move quickly without sacrificing the long-term health of our codebase.