The ability to simplify means to eliminate the unnecessary so that the necessary may speak. — Hans Hoffmann
A little while ago I’d come up with the following as a semi-serious description of Just Enough Programming:
Are you tired of over architected applications? Does infinite scalability imply infinite development time? Are you surrounded by applications whose sole goal is to be buzzword compliant? Do you suffer indigestion from the “extra sauce” that makes the management happy? Do the systems diagrams look like a redneck family tree?
If any or all of these are true, then you need Just Enough Programming™. JEP makes liberal use of Ockham’s Razor, cutting through the cruft and getting to the crux of the issue. It slices. It dices. It even juliennes. JEP fosters simplicity and elegance by seeking to make systems as simple as possible, but not simpler. Its goal is to achieve perfection by reaching the state where we have nothing more to take away. JEP is not just a methodology; it’s a way of life.
While it’s tongue in cheek I’d like to talk about the foundations of JEP.
As I envision it, JEP is built on the following:
- Ockham’s Razor
- “entia non sunt multiplicanda praeter necessitatem”, or, if you will, “All things being equal, the simplest solution is the best”. Less is more.
- YAGNI
- Your spreadsheet is really not going to need that built-in flight simulator. No matter how cool it might be, there are things which your application doesn’t need. Also, there’s no reason to code something on the off chance you’ll need it. It’s better to wait until you actually do need it. By then the specs will have changed anyway and you won’t be redoing work.
- DRY
- Cut and paste is right out. Maintaining the same code or even the same information, in multiple locations leads to problems. Besides, why type it twice?
- TDD/BDD
- Testing is needed to ensure that as we add to and refactor/simplify our applications, that they continue to work.
- Agile Methodologies
- Testing, integration, short development cycles. All of these help to focus on the task at hand.
Truth be told, there’s a lot of overlap in the list. I’ll definitely be shaving down the list, but this works for a start. I’ll investigate each of these topics in turn over time. If anyone has any thoughts or anything to add, please share it in the comments.
1 ping
Ramblings » Blog Archive » Just Enough Programming: The missing cornerstone
August 15, 2008 at 2:44 pm (UTC -5) Link to this comment
[…] with a coworker about JEP. In the course of our conversation I realized that in my list of the foundations of JEP, I had left off what is perhaps the most important one of all — Pragmatism. If I were to sum […]