- Will iPads Replace TV Screens in NYC Taxis?
- Do Students Understand the Material? A New App Helps Teachers Know For Sure
- What Is Anonymous?
- "Thinking Cities" - Ericsson’s vision of a networked society expands with
- Massive information dump by Anonymous on hundreds of cops, including a ‘pedo cop’ @CabinCr3w @ItsKahuna
Desktop-filing and under-engineered applications
I am sure you know all about the desktop filing system. Yes, when you use the desktop as a filing system. This works well to start off with - adding stuff is a breeze. However, as the pile grows:
- it becomes unstable. Adding new stuff requires a bit more effort to make sure you don't topple the pile
- it becomes harder to find the thing you want - it's somewhere right in the middle of the pile
This technique is almost very well in practice but never works in theory. The end result, at least for me, is sit down and re-organise everything from the start. It takes time, and effort. But at the end of it, I can find things faster and hopefully have an idea of where to put new stuff. Now if only I could maintain this habit.
But we all know this is all very well in theory but never works in practice.
Under-engineered application
The desktop-filing system is akin to an under-engineered application, where an application is poorly designed. Some hints of an under-engineered system are (quote from Refactoring to patterns)
Data structures may be haphazardly constructed, or even next to non-existent. Everything talks to everything else...Functions themselves may make extensive use of global variables,... are lengthy and convoluted, and perform several unrelated tasks. Code is duplicated. The flow of control is hard to understand, and difficult to folow.
As with desktop filing, an under-engineered system will become expensive and hard to maintain. It becomes progressively slower to add new features, and eventually it topples over.
Why do we under-engineer
Some common reasons given for an under-engineered system are
- we don't know how the system will evolve, how the new requirements are going to change
- we work on too many tasks at once
- over-analysis will waste time and money, and be the death of us
- we need to add new features quickly
- that pesky king, the customer, is breathing down my neck and I have to do this now. I will think about the design later.
- there is no time/budget for refactoring
- lack of sufficient knowledge on software design
You will be happy to know there is a way out of this mess - it's called refactoring.

Add new comment