Some Thoughts on Software Design and Maintenance

There is a definite Art in Computer Programming [pragprog.com] shaped by the Structure and Interpretation of Computer Programs [mit.edu]. From a technical pespective, Refactoring [refactoring.com] is the essential technique to incrementally remove harmful code patterns such as the Go To Statement [c2.com] and other AntiPatterns [antipatterns.com] such as the Big Ball of Mud [laputan.org].

Following Design Principles and Design Patterns [mil-oss.org] and making appropriate choices for fundemental details such as Error codes or Exceptions [damienkatz.net] to support this type of sustainable maintenance is essential to the long term success of any software solution.

Thus any organization that seeks to eliminating irreversibility in software designs Needs an Architect [martinfowler.com] who understand the Classic Mistakes [stevemcconnell.com] for Why Software Fails [ieee.org] and how to manage Technical Debt [construx.com].

How Software Evolves [oreilly.com] and knowing what to fix (hint: It’s Not The Code [whattofix.com]) are they keys to success. The reasons Why Good Programmers Are Lazy and Dumb [outer-court.com] and Worse Is Better (maybe) [dreamsongs.com] often seem paradoxical to industry outsiders untrained in basic critical thinking and unaware that there is No Silver Bullet [wikipedia.org] to the essential difficulties of software development.