Perhaps the most overlooked—and amazing—characteristic of electric vehicles is the significant reduction in engineering complexity when compared to internal combustion engines. There's plenty of chatter about batteries and acceleration, and recharging and cost. But the reduction in moving parts for the EV drivetrain is nothing short of eye-popping.
Several sources approximate this difference as a reduction from 2,000 moving parts in the typical internal combustion engine to 20 in the EV. In other words, an internal combustion engine requires approximately 2,000 moving parts to power the car whereas an EV requires only 20. Think about that for a moment. That means a reduction of 99% in parts that have a likelihood of failure.
For those of us who work in the software engineering profession, this can serve as inspiration for finding new ways to create simplicity in our software engineering efforts. There are many ways to drastically reduce software complexity, and the rewards can be substantial.
One example is a practice known as "code reuse." There are many cases in a software application where a function is performed over and over again throughout the system. And in too many cases, that piece of code is rewritten every time it's used. In many cases, it’s coded slightly differently, which adds another dimension to the complexity. We not only have to deal with frequency, but we also have to contend with variability.
Well-designed software uses a single instance of this function, and it can be called upon whenever it's needed. There are big benefits here: it always performs the same way, it can be fixed quickly, and when new requirements come up, they can be implemented with much less effort. And if that function is used 2,000 times in the software application, you could get the same 99% reduction in complexity that you get with an EV. That might represent a rare case, but the practice of code reuse can yield significant gains in simplicity. If we don't make it a practice in our discipline, it will not happen organically.
There are other examples of techniques to achieve gains through simplicity. The most important opportunity here is to make simplicity a priority in our software development methodology and design practice. Not only does it benefit a company and its development team, but in the end it significantly benefits customers and users.