In a perfect world of client software development, you would have a full blueprint for the software you are developing and the client would never want to modify that blueprint. Sadly, the world is not perfect.
A client recently came to me late in a project wanting to add two data fields to a project that is in the late stages of development. I implemented the change and provided an invoice to the client for the change, and they were shocked to see the time it took the implement the change.
- Sketching the new UI: When I design a data form, I try to use the least amount of space as possible, while still keeping everything logical. Adding in two fields can screw up the layout, so I need to do some sketches that try out a few ways to add the fields to the form.
- Building the UI: After sketching out the UI into something that is workable I have to build it.
- Testing the UI: After the UI is build it needs to be tested. If I’m working on a Mac application, this involves making sure things look good in each version of Mac OS X I am targeting. If it’s a Web application, it can be even more hairy thanks to the need to target multiple platforms and browsers.
- Modifying the database: With the UI complete, the second part of the process begins with adding the data fields to our database. This is usually pretty easy, unless we are playing with Core Data. Damn your lack of easy migrations!
- Modifying tests: Before we write any production code, the TDD gods require me to modify my unit and functional tests to ensure that everything runs correctly in my application.
- Modifying the methods: Finally! Any method that works with those data fields will need to be modified to accept the new data fields.
- Final tests: Before sending off to the client, we need to run our tests as well as hating my code to see if and how it would break under certain situations.
How long this would take obviously depends on the complexity and size of the application you are developing. The client thought it was simple a matter of adding two fields and everything would magically work. Ah, the joys of client work.

