All posts
JavaScript & TypeScriptQA & Testing

JavaScript, TypeScript and the Reality of Complex Software Projects

08 May 20263 minKarim Benna
JavaScript, TypeScript and the Reality of Complex Software Projects

Personal lessons from automotive projects at BMW – why good software consists not only of working code, but of structure, responsibility, and a team that can handle complexity.

JavaScript was never just a language for small web effects or simple frontend logic to me. In my professional career, I experienced JavaScript and later TypeScript in environments where software not only had to work, but had to remain stable, maintainable, and comprehensible under real-world conditions.

First Contact: JavaScript in the Automotive Environment

My first intensive experience with JavaScript was in automotive projects at BMW. It wasn't about classic websites, but about applications and scripts that ran on infotainment platforms or processed vehicle data. Especially in such environments, you quickly realize: a programming language is only part of the truth. What matters is how well requirements are understood, how clearly interfaces are defined, how testable the code is, and how cleanly a team handles complexity.

Lessons Learned in a Legacy ES5 Project

One of my most formative experiences was working on an older JavaScript project based on ECMAScript 5. The code was difficult to read, had grown organically over time, and was partially barely documented. Local debugging was not easily possible, interfaces were unclear, and many bugs had to be analyzed under difficult conditions.

This wasn't always pleasant, but it was instructive. Such projects show you very clearly how expensive missing structure, missing documentation, and technical debt can become. You learn to analyze carefully, not to judge prematurely, and to bring clarity into a system step by step.

The Switch to TypeScript – More Than Just Syntax

Later I worked with TypeScript, among other things in a project for a Spotify application in the BMW infotainment environment. For me, TypeScript was an important step forward at the time. Not because TypeScript automatically produces good software, but because it helps teams detect errors earlier and make data models, interfaces, and expectations more explicit.

Especially in larger teams, this is an important point. JavaScript allows a lot of freedom. This freedom can be productive, but it can also lead to systems becoming difficult to understand and error-prone. TypeScript brings more clarity here. Types, interfaces, and generics force developers to think more carefully about structures.

Of course, TypeScript is not a miracle cure. If you use any everywhere, you lose a large part of the advantage. Then the code may look like TypeScript, but remains fundamentally unsafe and difficult to control. For me, the value of TypeScript lies precisely in dealing more consciously with data models and interfaces.

Crowd Data Collector: JavaScript in a System-Level World

Particularly interesting for me was also the work in the BMW Crowd Data Collector environment. There, JavaScript scripts were used to collect and process specific vehicle data based on clear use cases. A script essentially consisted of three parts:

  • Input signals
  • Process logic
  • Output signals

This experience showed me that JavaScript can also be used in very technical and system-level contexts. At the same time, it also became visible where the limits lie when simulation, typing, or sufficient testing capabilities are missing. In such situations, uncertainty and risk arise — not necessarily because the language is bad, but because the development environment doesn't provide enough safeguards.

Therefore, my assessment at the time was clear: a simulation environment and the switch to TypeScript would be important steps to increase quality and safety in development.

Today: Viewing JavaScript and TypeScript Pragmatically

Today I view JavaScript and TypeScript pragmatically. JavaScript is flexible, widely used, and extremely versatile. TypeScript complements this flexibility with structure and additional safety. But in the end, the language alone doesn't decide the quality of a project. What matters is:

  • Architecture
  • Requirements
  • Tests
  • Documentation
  • Communication
  • and the team's ability to handle complexity responsibly.

For me, JavaScript and TypeScript were important milestones because they didn't just advance me technically. They showed me how important readability, clear interfaces, testability, and long-term maintainability are.

Good software doesn't just emerge because code works. Good software emerges when a team understands why the code is built that way, what risks exist, and how a system can still be safely developed tomorrow.


JavaScript showed me flexibility.

TypeScript showed me structure.

And complex projects showed me that you need both: technical freedom and technical responsibility.

Did this post inspire you?
Let's talk.
Get in touch