Things to consider when choosing a new technology

Happy new year! Finally we are in 2021, the last year was definitely something very special. Hopefully everybody of you had fantastic holidays and now you get back to your job fresh-minded and motivated. And what better opportunity can we get than the beginning of new year to start with a new technology ? Wouldn’t it be great to eliminate the problems of the old framework or wouldn’t it be fantastic to use all the advantages of a new programming language?

First of all, nowadays we face the fact that we get new languages, new frameworks, new technologies nearly every hour. You just need to compare how you implemented code in 2015 and how you do it today, actually two different things. If you look a little further back in time you will see that 20 years ago solutions needed to be reimplemented all the time. For instance, most softwares included some custom implementation of a datagrid with all of its functionality. Must have been hell, or? In contrast to that, most of the programming languages used today enable us to use third party libraries for free, so we don’t have to reimplement things again and again. Ironically we get to the problem now, that there are too many libaries out there, just check the number of Javascript libraries and you understand the problem.

So, in that big cluster of programming languages and frameworks, how can you choose the correct one for your problem? The first step for me is always to check if you really need a new framework or if you can use something that exists in the company. Of course, starting from zero is something great, you can choose whatever you want, but in reality you always start from somewhere. Maybe some modules exist already, maybe there are already implemented parts. It occurs too often that programmers are too enthusiastic about a new language, just check your own feelings when you see some new language that will make your life so much easier. Personally I think that today we need to stay up to date in terms of technology but there are too many people that are a bit, let’s say critical, when it comes to learning a new technology. And that is a key factor as you are not the only software engineer in your company, if you are the only one that is aware of a language your life will get very difficult when it is used in your company.

What you also need to consider is whether or not the new technology fits to existing software modules. Sometimes it is neccessary to reimplement a software from the bottom up. But when you do that, you not only have a lot of work to do that has no obvious advantage for users of the software, but also you are throwing away years of experience. I am not saying that you shouldn’t modernize applications, but often there is a step by step way so that you do not run into a big bang where you loose all the experience from past years. I did that mistake already when I used a technology which wasn’t able to communicate with some old services that were delivering data via CORBA (yes, that thing still exists…). So I needed to reimplement the whole service, a bit more research on the project requirements would have lead to solutions that provide a interface for CORBA.

Next it is important to check if the technology is being updated regularly. Nothing is worse than implementing something in a way that will not be able to maintained because of some old technology. By doing so you would run into the same problem as I explained already, at a point you need to throw away everything and this point will come earlier than you might expect. Maybe you ask yourself now where you can check if something is maintained. Often that is specified on the website of the creators of a technology. When using a Javascript framework it is always a good idea to check the number of weekly downloads together with when the last version was deployed to npm. Also you can check Github for the last commits if there are some. For me a good number of releases is at least one every half year and if I check github and see that the last commit was 2 weeks ago everything is fine. If you see that the last commit was 5 months ago it is likely that the framework is no more supported. To make sure that this is the case also check the weekly downloads because maybe the framework is just so stable so that no checkins are needed.

Another important question is the existing know how in your company and also how likely it is that the new technology will get used without problems. Sometimes it is necessary to switch the used programming language but if nobody is able to write code with it it will not help you a lot. For instance, in a company full of C++ programmers you will not be able to choose Java as the one and only programming language, senior software developers will argue with you about the speed of the language, about how bad Java is and so on. In such a situation it would be better to question why you would use Java. Maybe it is because of the fact that it is easier to find new employees or because you are able to use some framework. To improve the acceptance it is one idea to make workshops, trainings or coding sessions with that you are able to prove that some language is better for the company. Another possability would be to choose a technology that is easier to be learned from software developers with their existing skills (in my example C# for example).

Ok, now we have chosen something that fits the requirements and is able to be used by others too. Unfortunally every creator promises everything from some framework or some language. That means that you need to make a prototype to check if the technology is really the correct solution for the problem you have. Prototyping doesn’t mean to include all the details, it means to provide some proof of concept. How long can prototype building take? Good question, the answer is actually “it depends”. But I would say, for a medium-sized problem (for instance a new module for displaying something with 3D-grafics) I would take a day to create a proof of concept. This prototype always includes an interface to one existing module to proof that it is possible to connect it to the existing software. Also I normally go throught the code with some of my colleagues just to check if everything is understandable. What you also can do is to start with a version of the framework or technology that is older and then try to update the proof of concept. By doing so you can check if the framework is able to be updateable.

Sometimes you need to cover very specifc requirements or you need to cover requirements that you are not able to cover with the proof of concept. One example would be a performance requirement in production that you will not be able to cover at the early stage as you have not the data available. In such example it is recomendable to check the internet for reports or blog posts like mine when I explained why I prefer using Angular (https://www.styriandev.at/styriandevblog/index.php/2020/02/23/some-reasons-why-i-think-you-should-consider-using-angular-for-your-next-project/). By doing so you are also checking the size of the community, a bigger community means that you can find help faster.

Also include a check if you are still able to test the software with this technology. Not only I mean that you are able to click throught it but also check if automatic unit tests or E2E tests are still possible.

One point that programmers might forget is the compatibility of the technology with the companies strategy. For instance, you will not be very successful when you try to make the company use Firebase (Backend as a Service solution by Google) when the company states in the strategy to not move towards the cloud. To not loose credability during the presentation of a technology in front of the management you should check that point.

Before we get to the end I would also like to state something that seems clear to me but might be unclear to some of you. Every decision process must be documented. It is not important which decision you make, but it is for sure that this decision will be questioned by somebody all the time. And if you have nothing that explains why you decided that something should be used by the company you can’t do this explanation. So make sure to document the advantages of the new technology, document how you plan to use it and which problems are not covered by that technology. Also communicate that documentation, at least somebody will read it and may give you useful input that you can include.

I would like to end this post by addressing you to try something out. There are fantastic new technologies enable us to do things you couldn’t have imagined some years ago. Take your pick, you will find something that will generate a perfect solution! If you try you do more than most of the others.

Leave a Reply

Your email address will not be published. Required fields are marked *