01 May 2013
When a product grows in complexity it can be difficult to justify to clients, stakeholders and even other developers why adding a single feature can be such an involved process.
There are many methodologies to use when developing complex software (Agile, TDD, DRY, XP etc) however I would like to share an analogy to explain the rationale behind such practices.
Lets imagine a simple, completed application; it has 5 views (A-E) and all is functional.
In reality there is more than meets the eye; those 5 views might pass data around, update a database and do other wonderful things in the background, a more accurate expression of the app might be:
Even now you're talking a different language to your client!
When we want to add a new view (X) to the app, your client can be forgiven if they think we only need to do this - after all their view of the product can be substantially different to yours
If only it were that simple! Lets consider how this new view might sit inside the app as we know it:
Previously we had 10 connections to manage, now we have 15! That's significantly more work than we originally expected!
Well, as software grows in size I believe it grows exponentially in complexity - or rather, it can grow exponentially. There are many things that you can do to minimise the issue of complexity that I would consider good programming practices but ultimately as you work on your application it will become more and more time-consuming.
Don't despair, just be an awesome programmer and manage expectations!
The next time you hear a peer or client ask for just a little tweak and you have trouble explaining the issue at large, send them this way, hopefully I can save you a bit of trouble vocalising it :-)
That word "just" makes my hairs stand on end - it trivialises the task before you've had time to do investigate...