Innovation starts with simplification, we can't create if we're always fixing.
Why battle against technical debt?
Why invest into refactoring?
Why fight for Clean Code?
To simplify lives, save money, and improve the world through innovative invention.
Clean Code is DRY, minimalistic, tested, & simple
Clean code doesn't repeat itself, it's DRY (Do not Repeat Yourself). When we duplicated code, we have required the developer whom must make a change to one piece of code to be required to make a change to all duplicated pieces of that same code.
Cognitive load, technical debt, visual debt, & bugs increase.
Progress and passion decrease.
More code is more stuff that each of those things making up all of that stuff depends on. More than that developers are now required to keep all of that extra stuff in their head and if it's not already in their head they must go through all of the extra fluff to understand what's going on.
Less code is less buggy.
Less code is less onboarding.
Less code is less maintenance.
Code in of itself is liability. You are liable to maintain, update, refactor, understand, teach, and utilize code.
Simply put, less code is less liability.
90% of all of your tests passed ~ ouch. This is not clean code. You know you messed up if your not passing all of your tests. You also know you messed up when your test coverage is 0%.
Clean Code is tested thoroughly and passes those tests with flying colors
Common causes of technical debt:
- Ongoing development long series of project enhancements over time renders old solutions sub-optimal.
- Insufficient up-front definition, where requirements are still being defined during development, development starts before any design takes place. This is done to save time but often has to be reworked later.
- Business pressures, where the business considers getting something released sooner before the necessary changes are complete, builds up technical debt comprising those uncompleted changes.
- Lack of process or understanding, where businesses are blind to the concept of technical debt, and make decisions without considering the implications.
- Tightly-coupled components, where functions are not modular, the software is not flexible enough to adapt to changes in business needs.
- Lack of a test suite, which encourages quick and risky band-aid bug fixes.
- Lack of documentation, where code is created without supporting documentation. The work to create documentation represents debt.
- Lack of collaboration, where knowledge isn't shared around the organization and business efficiency suffers, or junior developers are not properly mentored.
- Parallel development on multiple branches accrues technical debt because of the work required to merge the changes into a single source base. The more changes done in isolation, the more debt.
- Delayed refactoring; As the requirements for a project evolve, it may become clear that parts of the code have become inefficient or difficult to edit and must be refactored in order to support future requirements. The longer refactoring is delayed, and the more code is added, the bigger the debt.
- Lack of alignment to standards, where industry standard features, frameworks, technologies are ignored. Eventually integration with standards will come, and doing so sooner will cost less (similar to 'delayed refactoring').
- Lack of knowledge, when the developer doesn't know how to write elegant code.
- Lack of ownership, when outsourced software efforts result in in-house engineering being required to refactor or rewrite outsourced code.
- Poor technological leadership, where poorly thought out commands are handed down the chain of command.
- Last minute specification changes, these have potential to percolate throughout a project but no time or budget to see them through with documentation and checks.
Clean code is easier to understand, simpler to utilize, cheaper to maintain, and effective towards the goals in which it is created towards.