A bit like a House

I’m often wracking my brain to come up with good analogies to explain why we should develop things one way rather than another or to try and explain a development strategy to non technical people. Sometimes these people are Clients, sometimes Employers, often Designers (you get the picture).

But the question remains how best do you explain (often slippery) concepts to people who haven’t got a clue what you are talking about, and without resorting to Jargon or Technical Terms?

Lately I have spent a lot of time figuring out how to evangelise various Frameworks; or actually just the concept of a Framework. Specifically I want to spend most of my time at work developing in CakePHP not jury rigged and ad hoc or home brewed libraries built by either myself or others. I think we’ve all been there… very early on as a developer you come to realise that you need organisation. You start gathering together useful classes and functions, maybe you come up with naming conventions.

It’s great your development speeds up, you learn a great deal along the way. Your boss is happy, but then for your next project they want you to do something just a little bit different. You start off no problem, I’ve got all this code, it’s great – it’ll be done in no time… except it isn’t because your system can’t bend and you are stuck writing so much code to deal with the exceptions that your benefits seem to evaporate.

A good framework seems to provide a solution – you get to take advantage of a lot of very smart people, you get the benefit of a community, you learn good practice, hopefully a lot of the mistakes and dead ends have already been avoided. In fact for me probably the worst thing is when I have to work back in mud of projects and systems that have just accumulated over years, the sinking feeling…

I think they key point is that there is a sense of an overview – that everything has a place. The framework buzz at the moment is all about MVC based systems – they have that organisation. What is nice is that looking at something written in say CakePHP or Code Igniter it’s usually pretty obvious what is going on, but even something written in Rails or Django will have familiarity due to the similar structure (my Ruby and Python skills are essentially non existent).

But back to my analogies. I live in a beautiful old cottage that is probably a few hundred years old, but some of it is made of brick, some of it is stone. One wall (we believe) is made entirely of mud (Cobb), there aren’t really any foundations and the house is listed that means we can’t fiddle about too much. Over the years people have added water and gas and electricity but it would have been so much better if they had been planned in from the start.

Of course, if you build a new house you can make something amazing (as long as the architect’s OK).