This article will be helpful for those who are working on many products in his company whether it was in concurrent or serial manner.

Problem 1: Jack of all trades

At the beginning, it was really joy to work on these products. You will learn a lot from working on them: new technologies, new tools, new programming languages.

Here is the list of them that I had to face:

  • Programming languages: Java, C++, Python, JavaScript, Typescript, R language, Scala, Kotlin
  • Frameworks and libraries: QT framework, React, Spring Boot, Flask, Fastapi, NestJS, Pandas, Keycloak, Express, OSRM
  • Mobile: Android(only Java one)
  • Databases and caches: Apache Cassandra, MongoDB, MySQL, PostgreSQL, Redis, BigQuery, Datastore + plus tools for connecting and interacting them
  • Devops: Kubernetes, Docker, Docker Swarm, Gitlab CI, Cloudbuild
  • Messaging tools: Apache Kafka, PubSub, RabbitMQ, ZeroMQ + plus tools for connecting and interacting
  • Device standards and protocols: Scada(Modbus), TFTP + plus tools for connecting and interacting

Yes, you learn many things but on other side, you will have shallow understanding of programming languages and frameworks. You will lag in knowledge compared to your counterparts.

Problem 2: Costly context switching

Imagine situation:

  • you are implementing something on backend, let’s say on Spring Boot, it goes well
  • next day, you are being asked to do something on NodeJS Express
  • after that day, you are checking Kubernetes or Docker Swarm
  • next day, you are doing on Python Flask or Fastapi

Initially, you don’t mind about context switches because you are enjoying this. However, after some time you start to feeling the effects of the context switching. You will dread all these routine things. Congratulations, you have burnout. You will lament about diversity of technologies, why you didn’t chose one stack.