Cars aren’t defined only by their hardware anymore. The software that comes with them is no less – and sometimes even more – important to customers now. That’s all because it makes a myriad of things possible, from intuitive infotainment to self-driving capabilities.
When it comes to development, however, it’s not your typical “move fast and break things” story. Automotive applications are highly regulated, understandably so: even the tiniest mistake in the code can endanger someone’s life. That’s not even to mention the complexity of any modern automotive system!
But what does it take to create this particular type of software? Let’s break down ten must-have automotive software development skills, according to your friendly developers at Develux. (Spoiler alert: it’s going to be a long list.)
1. Engineering & Automotive Background
If you write code for vehicles, it’s only logical that you should have at least a basic understanding of how they work on the hardware level. After all, software can’t exist in a vacuum: it leverages, controls, or affects the hardware.
This is why any developer in this field should understand how these four components work, for starters:
- Engine/powertrain control;
- Brake control;
- Steering control;
- Airbags and other safety features.
A degree in Electrical, Electronics, Computer or Automotive Engineering isn’t a must-have per se, but it’ll be a plus. Anyway, automotive software companies require their candidates to have some background in these engineering fields, with or without a degree.
2. Embedded Systems
Ask any experienced automotive developer for advice, and they’ll tell you that you should know your embedded systems. But what are those, exactly?
An embedded system is built into a piece of equipment. Its purpose is to allow controlling the said piece of equipment. A car’s engine has its own embedded system, and so do instrument panels, parking assistants, airbags – you name it.
Any car now has hundreds of separate systems, written in different languages and working under different operating systems. To know your way around them, you’ll need to wrap your head around:
- Multiple programming/scripting languages: C, C++, Java, Python;
- Operating systems: AUTOSAR, Windows Embedded Automotive, Automotive Grade Linux;
- Sensors, microprocessors, and memory modules;
- Controller Area Network (CAN);
- Inter-Integrated Circuit (I2C);
3. Software Integration
According to McKinsey, between 30% and 50% of the development time is dedicated to integrating the application with other software. That’s because any modern car is filled with multiple pieces of software made by different companies using varying tech stacks.
That translates into the fact that a developer at any automotive software development company should know their way around:
- Original equipment manufacturer’s protocols (e.g., communication and diagnostics);
- Advanced driver-assistance systems (ADAS);
- Operating systems;
- Infotainment systems: human-machine interface, applications, and middleware;
- Telematics applications and middleware.
4. Proficiency in Multiple Programming & Scripting Languages
All of that complexity means one thing: mastering just one language isn’t enough to build well-integrated automotive software. In practice, the most in-demand languages in this industry are usually these six:
This requirement – having mastered multiple languages – is the reason why automotive software development isn’t suitable for beginners in the world of coding. Just getting started in this field is impossible without obtaining a substantial set of skills first.
5. Risk Analysis & Mitigation
Zuckerberg’s way of building software – often phrased as “move fast and break things” – doesn’t work in this industry. Instead, every aspect of any given application installed in a vehicle has to be assessed on every level.
Why? To make sure that any situation or event that might happen is accounted for, of course.
Take self-driving capabilities as a hypothetical example. What if a Chihuahua jumps right in front of a self-driving car going 40 miles an hour, but the developer hasn’t accounted for detecting a movement so close to the ground? The car will go on, with no regard to the poor dog.
It’s a drastic example, but it’s great for illustrating the following: the team behind any automotive application needs to think through thousands of scenarios. That’s because software isn’t as great at improvising as humans are.
6. Testing & Debugging
Every line of code has to be rigorously tested and debugged when it comes to software development in the automotive industry. The cost of having a bug might be measured not just in millions of dollars, but in human lives, too.
When it comes to the particular testing skills, these seven are a must in the industry:
- Black box and white box testing;
- Unit testing;
- Back-to-back testing;
- Requirement-based testing;
- Fault injection testing;
- Condition testing;
- Closed-loop and open-loop system testing.
7. Industry Standards Application
Due to regulations, any code designed and written for a vehicle has to go through a rigorous vetting process to show it meets the industry’s standards.
In reality, it means that a developer has to keep the following requirements in mind while working:
- ISO 26262 (functional safety for road vehicles);
- ISO 21434 (cybersecurity engineering for road vehicles);
- ISO/IEC 33001:2015, also known as Software Process Improvement and Capability Determination (SPICE), and its industry-specific version, Automotive SPICE;
- MISRA (Motor Industry Software Reliability Association) coding security guidelines.
8. Artificial Intelligence & Machine Learning
These two technologies are integral not just for creating autonomous driving systems. Object recognition features, navigation apps, intelligent parking mode, and advanced analytics all rely on AI and ML.
So, it’s no mystery why more and more automotive expert software companies work with these two technologies, too. This means there are professionals on their teams who have mastered:
- Programming languages: Python is the most commonly used one for AI/ML; R, Java, and C++ can also come in handy;
- Data engineering;
- Exploratory data analysis;
- Statistical data analysis and modeling;
- Evaluating model performance.
9. Tools of the Trade
A developer is nothing without their tools. That’s why, no matter the industry, knowing how to use a long list of project management and development tools always finds its way onto the list of requirements.
But what should be in a toolbox of an automotive developer, in particular? Here are eight automotive software development tools that have become the de-facto standard for the industry:
- Tasking and Windriver compilers – for writing safety-critical applications;
- Rhapsody – for designing engineering systems;
- CodeBeamer – for application lifecycle management;
- GiT – for collaborating on writing code and making changes;
- JIRA – for project management;
- DaVinci Suite (Vector) – for working on AUTOSAR software components;
- IBM’s DOORS – for requirements management;
- CANAlyzer/CANape/CANoe – for working with bus systems and CAN-based protocols.
10. Development Methodologies
The chosen methodology defines how a developer does their job. That’s why knowing what these three methodologies mean in practice is a must:
- Agile. The team works in short iterations (sprints), at the end of which they have to deliver a working product.
- DevOps. It’s designed to shorten the communication loop between the client and the team. This allows pushing changes faster thanks to the client’s frequent feedback.
- Lean. This approach has one motto: eliminate all waste. In reality, it means removing every task or feature that doesn’t add any real value to the product.
In Conclusion: Hard Skills Aren’t Everything
The ten skills above fall under the “hard skills” category. And while they’re crucial, a developer’s soft skills are no less critical. That’s because things like miscommunication can lead to costly mistakes – even if the person in question is a senior developer with 10+ years of experience.
Here’s a short overview of the five soft skills that are irreplaceable for any developer:
- Interpersonal skills: communication, questioning, listening, collaboration;
- Responsibility and accountability;
- Attention to detail;
- Analytical thinking.
Plus, any developer who’s not a native English speaker should be able to comprehend and communicate in it freely. Otherwise, they’re bound to run into misunderstandings both during meetings and while doing their research.