Decremental Development (Kevlin Henney)

Kevlin Henney introduces Decremental Development, a refactoring discipline that reduces code complexity, identifies unnecessary features, and improves software maintainability and scalability, sharing practical examples and economic benefits.

Key takeaways
  • Decremental Development: Kevlin Henney introduces the concept of decremental development, where instead of constantly adding features, the goal is to reduce existing code to make it simpler, easier to maintain, and more efficient.
  • Why reduce code?: Reducing code helps identify unnecessary complexity, reduces technical debt, and leads to better understanding and maintainability of software.
  • Decremental development as a refactoring discipline: Decremental development is not just about refactoring, but a conscious approach to software design and development, focusing on frequent small steps towards simplification.
  • Challenges in decremental development: The biggest challenge is breaking away from the additive mindset, which assumes that software is built incrementally, and recognizing that modification of existing code is also valuable.
  • Comparison with incremental development: Incremental development looks at adding features, while decremental development looks at reducing the complexity of existing code.
  • Economic cases for decremental development: Decremental development can lead to significant economic benefits, such as reduced maintenance costs, improved scalability, and increased productivity.
  • Prerequisites for decremental development: Decremental development requires a strong culture of understanding, continuous refactoring, and a willingness to simplify existing code.
  • Unmanaged technical debt: Unmanaged technical debt is a major obstacle to decremental development, as it can lead to inconsistencies and make it harder to refactor code.
  • Benefits of understanding and controlling technical debt: Understanding and managing technical debt helps identify opportunities for simplification and reduction.
  • Practical examples of decremental development: Examples include simplifying code, reducing duplication, and removing unnecessary complexity.
  • Focusing on simplicity: Decremental development is about recognizing that the goal is to create something simple, not just to add features.
  • Intrinsic assumption in software development: The assumption that software is built incrementally can lead to unnecessary complexity and difficulties in refactoring.
  • The importance of radical change: Periodic radical changes can be necessary to break away from complexity and achieve simplicity.