Summaries > Technology > Capital One > Does Code Quality Still Matter? It Depends on This — Max Kanat-Alexander, Capital...
https://www.youtube.com/watch?v=bU5gDVyu_28
TLDR Code quality preserves the structure that lets engineers understand and safely change durable software, while disposable tools can justify less rigor because they’re cheap to replace and low-risk. AI will make both kinds more common, so teams should judge rigor by failure consequences, dependencies, replacement costs, and maintenance needs—and use standardization and fast, automatic tools to make quality inexpensive.
Code quality is more than readability or personal preference: it helps engineers understand what a system actually does and modify it without causing harm. Clear, recognizable structure makes large systems easier to reason about because no one can understand every component at once. Changes can create immediate problems, such as bugs or delays, and can also make future changes harder. Both risks grow when the system’s behavior and structure are difficult to understand.
Not every application needs the same level of engineering rigor. Disposable software is typically small, isolated, inexpensive to replace, and low-consequence if it fails. Durable software serves many users or systems, has significant failure risks, and requires ongoing maintenance. Assess consequences of failure, replacement cost, dependencies, and maintenance needs before deciding how much quality investment is appropriate.
Treat software as disposable only when its limited scope and low replacement cost make that assumption realistic. Isolate its environment and data, avoid connections to production systems, and provide reliable backups where needed. Keep dependencies and responsibilities limited so a failure does not spread to more critical systems. These safeguards make it easier to replace a small tool without disrupting durable software.
A tool that starts as a one-time experiment may gain users, acquire dependencies, or become important to a business. If that happens, replacing it may become costly and failures may carry greater consequences than expected. When the software’s future is uncertain, limit the cost of raising its engineering standards later. This makes it easier to move from a disposable approach to durable maintenance if circumstances change.
Teams can reduce the cost of code quality by standardizing languages, frameworks, protocols, and development workflows. Automated tools should run reliably and quickly, with as little setup or decision-making required from developers as possible. Fast, deterministic tests help teams and coding agents verify changes consistently; in-memory fake services can make testing easier without relying on production systems. Applying strict lint rules early can prevent a growing backlog, provided false positives remain low and harmless.
Software success depends on understanding what a system does and being able to change it correctly and safely. Clear structure makes complex systems easier to understand and modify.
Changes can cause immediate problems such as bugs, delays, and budget overruns, while also making future changes harder and riskier. These risks compound over time as the system becomes more difficult to understand.
Disposable software is a small, isolated tool with few dependencies, low failure consequences, little expected maintenance, and a low replacement cost. For example, a one-time party planner can often be replaced or abandoned if it fails, so extensive engineering rigor may not be worthwhile.
Durable software serves many users or other systems, can have serious consequences when it fails, and requires long-term maintenance. AI may make it easier to create, but these systems still need engineering rigor and may grow in total volume.
Consider its failure consequences, replacement cost, dependencies, and maintenance cost. These factors place software on a spectrum from disposable to durable; engineers should generally avoid underestimating how durable a system needs to be.
Isolate its environment and data, prevent dependencies on production systems, provide reliable backups, and limit its scope. It is also useful to make it inexpensive to add engineering rigor if the software proves more durable than expected.
Standardize languages, frameworks, and protocols to reduce choices. Make tools automatic, reliable, and fast; make tests fast and deterministic, using in-memory fake services where useful; and apply strict linting early while keeping false positives low and harmless.
Code quality matters for durable software, but may not be necessary to the same degree for disposable software. With standardization and effective tooling, achieving quality does not have to be expensive.