But I can’t help but feel that even with all of these acronyms and buzzwords that we are sometimes missing the point. Software, regardless of design is about providing a service. This may be a humble “beep” to let people know something has happened, to keeping people connected and communicating, to maintaining a life support machine to keep someone alive!
As developers, we should never forget this core purpose. Think about the application, what it is going used for and what it could be used for. The “could” is important, as this sparks innovation. You may be able to write a Facebook clone, but can you make it better?
I like to think of it like this. You go in to a store, you want to purchase that awesome new Christmas sweater you have seen, you get to the store and are horrified that they are out of stock! Oh noes! So you ask the cashier if they have any more in stock they look up, rather bothered that you have interrupted their stream of nothing and say “sorry that was all our stock” (let’s say they are telling the truth as well). You then walk away from the shop, saddened by the fact you will not be looking cool this Christmas.
Now, lets say the cashier is the software, at this point, it is serving customers and taking their money, exactly what all cashier’s do. Does it work? Sure, but how is the service? Terrible.
Now, take two. You go into the store and they are out of stock, you ask the cashier and they say “I’m really sorry, we are out of stock – but wait a second, I will see if our other stores have any in stock”. They then run off to a phone, and you hear them talking. They return to the desk.. “I’m really sorry, these sweaters are real popular, they are out of stock too”. “Oh, OK” you reply with a sad, sad face and slowly begin to turn to leave. “Wait!” the cashier shouts, “I have one more thing I can try”. They then run off to the phone again, you hear some more talking, and they return to the desk..
“I have just been on the phone to distribution, they are getting more of these in stock on the 19th, they will be in store on the 20th. Did you want me to take your name and number and let you know when it’s here?”.
Bingo. The cashier has thought outside of the box, and done their best to provide an end-to-end service. They went far beyond the required “take money, put in till, give receipt” to strive towards a goal of service delivery.
Perhaps we need to think about development differently? Do we need a new focus? A new paradigm? Goal/Service-Driven Development perhaps?
What are your thoughts?