In today’s world we are fortunate enough to have so many technologies, frameworks and open source projects to help us focus on solving business problems and build great products. There are certainly more than one options to solve any problem therefore it becomes equally important that technology to solve the problem is very well aligned with your business goals and maximizing the shareholder’s returns.
My belief is that technology should be selected based on the business problem you are trying to solve and not the other way round where bunch of enthusiasts decide to use new cutting eadge technologies and thereafter try to fit what all problems can be solved using the selected technology. This certainly can not be in the best interest of the organization. I am not against innovation or experimenting with new set of technologies but one should not use new set of technologies because one wants to add new set of keywords in ones resume. One should also think about other cost e.g. maintenance, support and hiring. Let’s look at some real world examples…
Another example is the buzzword BigData. Big data and NoSql is in fashion today and people who are dealing with 500GB of data talk about using nosql solutions without having full understanding. I have seen many examples where postgresql/mysql can be used to handle the data volume but no we want hadoop!. Chris has summarized this in his blog nicely.
And the last example is – worrying too much about scalability at the initial phase itself instead of making product valuable enough for the end user. Sometime it is good to cross the bridge when it comes.
So what are the factors which affect technology selection? There are no set rules but one rule must be taken care of i.e. Solve the business problem by using right set of technologies. Few other points which should be considered..
What is the technology vision of the company?– If you are just supporting legacy system for some time and would like to move on to new product all together definitely you should explore usage of newer and widely accepted framework.
Talent and Knowledge – The most important asset of any organization is its people therefore if you already have experts in some area why not optimize that. e.g. If you already have rockstars in Python there is no need to develop app in PHP or in Asp.Net. Productivity will also be very high in this case.
Attracting new Talent – If you are using very new technology you might not find good talent but again if your business problem requires to build a new high concurrent system and you already have java guys one should definitely try Scala/GoLang for new products.
Build smarter tool & POC- When Facebook faced issues with php scalability they didn’t migrate the whole code to different tech stack rather they created a new tool hiphop which compiles code into C++. Every company doesn’t have the luxury of smart talent pool like Facebook but still some work around can be explored depending upon the situation. Creating prototypes/POCs are always helpful.
Remove obsolete tech – Organization should also innovate continuously and use newer but production ready technologies wherever possible. It also helps in attracting smart talent. Who wants to still work on asp?
So in a big organization who should be accountable for technology convergence?
As I said there are no set rules to decide things, that’s why the job of technology leader becomes critical. Depending upon organization size CTO/Chief Architect/VP Engineering is the person where the buck stops. He/She should make sure that engineers are focusing on solving the business problems and not using new technologies just because there is a buzz around it.
Comments/Feedbacks are welcome.