The Spike

I've been speaking with a potential client the last several days. He described problems with their current developer's failure to properly estimate the time required for a project combined with feature creep, etc. As with most software projects they are behind schedule and over budget. Needless to say, the owner is hesitant to spend any more money. So selling my skills has been challenging to say the least. How do I provide an accurate estimate for a "nebulous" project? They are too small to spend a bunch of resources writing up detailed specifications, that will likely change anyway. And if I want a future with this company I need to be very accurate. The project sounded simple enough. Create a web app/interface into their current back end that looks and functions similar to their existing iPhone app. What to do?

Well, what I did was spike it. I sat down yesterday and looked at what they wanted. I also looked at some of their existing Groovy on Grails admin system source code. From there I took a SWAG and spent the day creating a web app just to see how long it would take me to figure out their existing schema. I've never written a Groovy on Grails app before, but I pride myself in being a programmer who understands things at a more pragmatic level where syntax isn't all that important. I discovered that their app had some controllers that served JSON responses. They weren't all that hard to figure out. The class names were all in the form Api{SomeName}Controller. I figured these comprised the API that were used by the current iPhone app.

By the end of the day I had mocked up a Ruby on Rails app that used HTTParty to communicate with the JSON API. I also used Twitter/Bootstrap and ended up with a very clean UI.

The spike answered two questions for me. Could I effectively communicate with the existing API and how much effort would be required to do so. And how much effort would be involved in completing the typical controllers/views for the project. By the end of the day I was able to estimate the project with much more confidence than I had originally. But more importantly, after placing the project on Heroku, the client had an example of my capabilities and what I could accomplish in a typical day.

Edit | Back