Having worked in Corporate Infrastructure for many years, fighting the good fight and trying to get the enemy to conform to best practise and generally think beyond the next line of code that they are writing, I surrender! I throw the towel in!
I’d like to take an example without being too specific from my own experience; currently in the race to innovate, many corners are cut. Every screen whether it is a TV screen or the screen on a hand-held games device is now potential target for a product.
Our developers build proof-of-concept systems on servers under their desks at best and often on desktops which might be laying around spare; proof-of-concepts are demonstrated and then proof-of-concepts are products. Cycle times for delivery of new product are often measured in weeks, not the months and years of the past.
No thought is made to non-functional requirements, the capability is all and it’s now a product with paying customers who expect it to be up and running. In fact, the mention of non-functional requirements are enough to send customers running for the hills, they don’t want to know.
But of course, in reality we have to retro-engineer in all those requirements that are required to make it a supportable service. And whilst we are doing this, our people are in a constant struggle to keep this system up. At times, our people do remarkable things in this battle and they should be commended for doing so.
But there must be a better way than PCs under desks and developers acting like MacGyver to get a new service together? I think there is, I think it’s a dynamic, scalable, on-demand infrastructure; call it Cloud, call it what you will. Users should be given the ability to throw-up an environment quickly and easily with almost no thought made to the availability, scalability requirements which will surely be required if the development is a success.
Yes, some use is made of public Cloud but I think that pales into insignificance when compared to use of commodity hardware which is just lying about; this has been going on since the PC reared it’s ugly head but as PC’s have become more powerful with the ability to run server operating systems and especially with the rise of Open Source, every developer has the ability to build a ‘production environment’ without permission.
Are they doing things in Cloud? Yes, they surely are but I suspect it is a more common situation for a infrastructure team to be presented with a skunk-works system built out of commodity and be told to make it live…..tomorrow.
And it is then that the Cloud comes into play, it would be much better to have built an environment which allows developers the flexibility and agility that they require, having them work in an environment which can be promoted to a production environment rapidly. An environment which is as cheap and as flexible as the development teams believe that their PCs are but gives the infrastructure teams the supportability that they require.
Non-functional requirements whether we like it or not are just bolt-ons; after-thoughts. They are seen as the obstacles which stop customers gettting the new services which they require, it’s time to move on. I still believe that developers should pay attention to non-functional requirements, I still believe that systems should be designed with availability, scalability, recoverability etc in mind but I think that this is now needs to provided in such a way that it is transparent to all.
Of course this transparency should be completely transparent and open allowing rapid migration between providers, private and public…but that is another story!
You bring up great points. Cloud computing is going to be critical to helping deliver the the flexibility and agility that developers (and researchers) require, having them work in an environment which can be promoted to a production environment rapidly. NASA's Nebula Cloud Computing project (http://bit.ly/NASA-Nebula) was designed to do just that. Great post! Thanks!
Kevin Houston
You bring up great points. Cloud computing is going to be critical to helping deliver the the flexibility and agility that developers (and researchers) require, having them work in an environment which can be promoted to a production environment rapidly. NASA's Nebula Cloud Computing project (http://bit.ly/NASA-Nebula) was designed to do just that. Great post! Thanks!
Kevin Houston