Developing Software using the latest complex technology is cool. Software evolution by adding features and fixing bugs can be a burden. Both lead to brittle, buggy, overly complex and poorly performing software solutions. The value of Simplicity of a software solution is often neglected by many software people today. Making software simpler increases its value, because of lower maintenance burden and easier extendability. This talk explains what "simple" software means and how to approach it with "Decremental Development" even for existing (unnecessarily) complicated software.
Software has a problem: It is much easier to create complex solutions than to create simple elegant solutions. Thus most software is much more complicated and larger than it needs to be. This unnecessary complexity leads to lower quality and hinders further evolution. Space is no longer a problem in the computer, but the human brain capacity hasn't grown like computer memory capacity. Brains create software; therefore we need to understand software.
Time has come for a change: programmers must consciously reduce complexity and size of solutions to keep up with the growing problems to be solved. There is need for a dramatic reduction in program complexity: "Decremental Development" aims for reducing a system's size TO 10 % (a tenth) while improving quality and maintaining required functionality.
Less code means more software!
To progress in the direction of this goal requires change in several areas. One area is the underlying culture of our industry. A project approach to software development almost automatically leads to short-term solutions just barely working until the project is delivered, because a project manager is not payed for establishing long term success, but to deliver a product with as little resources spent as possible and on time. So-called software maintenance is often viewed as a low-profile job, close to being a janitor cleaning up the worst dirt. Another area is the qualification of developers. It is extremely hard for an outsider (=manager) to evaluate existing differences in talent and skill or at least to judge a really bad programmer from a better one. Sometimes the skill-level is just too low or too outdated. And I don't speak of mastering latest technology, but of understanding what one is doing.
Dirty code starts in the very small, like a dirty city starts with the first dog dropping on the sidewalk. So you can start today cleaning our code by just caring for cleanness, like the Swiss dog owners do with Robidog.
It is also OK to throw away useless or bad code. You can always recycle it from your version control system, if really needed. The fastest code is the one not there. Inexistent code also never has errors. Have courage to delete and change.
The current economic crisis might help us with a culture change, increasing the valuation of sustainable software and thus Simplicity in software design and code. Also software maintenance should not be viewed as it is. Valuable software is handed to a thousand code monkeys for maintenance with the hope it stays intact, but who would you hand a valuable painting for restoration?
We do not yet know all means or tools one can imagine to make software simpler and smaller with Decremental Development, but nevertheless you can start today by caring more about software quality.