Why we should be agnostic to technology?

In my experience as a software engineer and more than 8 years working in different companies with different businesses such retail, medical services, construction and communication networks, I have realized that people in most cases tends to have preference to some technology providers. I'm very curious about this behavior, and why is so common in companies.

We can hear some expressions like:
  • Don't use Windows, it's insecure. 
  • Windows is useless. 
  • Don't use Linux, it is unstable. 
  • Don't use open source software, it is useless. 
  • Don't use licensed software it is too expensive, use open source instead. 
  • Don't use that language, use this one instead.
And so on.

I think that statements like those above are because sometimes we don't really know an alternative technology or just because my boss and people around me said something bad about some technology or a provider.

The really big problem of this behavior is that unintentionally, we are limiting technology and sometimes a little problem can become a really headache.
For example:

Let's say you have a small company with low economic resources in the business of software development, and you need to have a version control of your developing software that also allows you to develop fast and have a CI (continuous integration) and CD (continuous deployment) in the cloud. Which software would you use?
  • Source Control (Team Foundation Server) 
  • Git (GitLab, GitHub) 
  • Subversion (Tortoise)
They all can do the job, but, because we are talking of a small company, and they may not have so much economic resources we can discard Source Control (TFS), we need a license to use it. In this case Git and Subversion can be an option.

Well, now we have two options, let's evaluate them:

Git

  • CI : YES 
  • CD: YES 
  • Cloud deployment support as a native: YES 
  • Difficulty: Easy 
  • Community support: YES 
  • Clients: YES 
  • Integration with others software: YES 
  • Branch strategy: YES 
  • Need license: NO 
Subversion 

  • CI : YES 
  • CD: YES 
  • Cloud deployment support as a native: NO 
  • Difficulty: Medium 
  • Community support: YES 
  • Clients: YES 
  • Integration with others software: YES 
  • Branch strategy: YES 
  • Need license: NO 

Both are very similar, and both can be a good option, but if we want to use one of this two solutions, we should consider if this technology will work for future developments. We know that Cloud Computing is coming to stay strong as the future of the computing world and cloud providers are adopting Git as a way to deploy to their clouds, and also as a default repository. So, Git is ahead in this case.
The winner: Git

So, for general purposes, what is the best choice when we need to decide which technology we should use?


Best practices teach us: "Always use the right tools for the job"
And I agree with best practices, when you need to decide which technology to use, you should ask yourself:

  • Is this solution right for the problem? 
  • If my customer wants to change something, can I easily do it? 
  • Is this technology ready for the future? 
  • Is this technology a patch or a real solution? 
  • Is this technology going to make everyone's job easier? 
  • Will this technology be support it by the vendor in further versions of my OS? 
  • Are the benefits of my solution equal or higher than my invest?

If you follow the list above, you may have a very nice implementation of your solution and you will not die on the road.

I hope this post helps you a little bit to open your possibilities and have a better decision when you need to decide with solution implement for your problem or enhance your app.


Cheers :)

Popular posts from this blog

How to implement OAuth 2.0 server with Redis

Integrar Web API de .NET en proyecto de Xamarin.Forms utilizando Visual Studio y Azure API App

Como crear una aplicación .NET Core y almacenarla en un contenedor de Docker usando Visual Studio

Geospatial queries in Azure Redis Cache using Node.js Azure API App

Configurar y desplegar una Web API en Azure App Service Environment