At the Crossroads: Mechanical, Software Engineering
Do mechanical engineers know enough about software to meet the demands of increasingly connected and 'smart' product design?
November 1, 2018
The role of the mechanical engineering in software design and testing is changing—especially in product segments where internal software now plays a larger part in how products perform, controlling the activity of sensors and actuators. The internet of things (IoT) is increasingly showing how software will influence the physical world. The software and mechanical engineering phases can’t be completed in a vacuum.
But do mechanical engineers know enough about software design and development? Software has become an important part of products and machines in nearly every market—not just electronics and high-tech sectors, but also in manufacturing, heavy equipment, agriculture, appliances and automobiles. Engineers have to be able to design, model and simulate products, knowing that their physical performance will be impacted by software as much as they are by the laws of physics.
“In robotics or manufacturing items like phones or IoT devices, you increasingly need to know a little bit of both mechanical and software engineering just to talk to your colleagues,” says Karen Wickert, a software test engineer at Sonos, which makes wireless speakers and home sound systems.
“If you are a design engineer developing a water pump, for example, that water pump is driven by an electric motor and has software to control the motor, and it has to interface with a master ECU [electronic control unit] at the vehicle level, and it has diagnostics and all sorts of requirements around it,” says Jason McConnell, business unit director at IAV Automotive Engineering. “A mechanical engineer has to know a bit about how this system will work electrically and mechanically, the impact of a printed circuit board on the design and how software will affect its performance.”
Moving forward, mechanical engineers will need more basic education in programming, coding and IoT principles, and many engineering schools are beginning to adjust their curriculums to reflect that. Carnegie Mellon University’s mechanical engineering department has added IoT courses, for example, and Ohio State University offers smart product design coursework that combines programming, physical engineering and IoT principles. Individual companies are also trying to fill the skills gap with entry-level mechanical engineers with their own education and training programs.
Engineers may also need a better working knowledge of software testing approaches to ensure the quality of their designs.
“People care for quality. It is not just a desirable thing that complements functionality. The importance of software is growing,” says Rahul Verma, founder of Test Mile Software in India. “With machine learning and AI focus in almost every field, one can expect that the interfaces for software integration are going to [be] introduced in many areas, which don’t exist today. In general, mechanical engineers can explore at least the fundamentals of software engineering and testing. Those who would be closely involved would need to dive much deeper, and if I may say so, deeper than most software testers, as the places where such integrations exist need much more comprehensive knowledge of engineering and testing than, for example, testing a web application.”
Verma trained as a mechanical engineer, but was almost forced into software engineering because he couldn’t find another job. “I tried anything and everything,” he says. “One of these attempts was at an IT company. After I cleared the internal training, I was put into software testing because I was a mechanical engineer. So, it wasn’t a choice and I hated this at the time. I thought my career was doomed. It was only one or two years later that I found meaning in my profession, and that continues today.”
Like Verma, Wickert made the shift from the mechanical side to software testing. She graduated with a degree in mechanical engineering from Tufts University, but transitioned into software engineering in 2013.
Although she took a few courses focused on software during her undergraduate work, she says that “People were exposed to some courses, but there wasn’t a lot of discussion about how this might be important for mechanical engineers. It was something I was already interested in.”
She transitioned to software engineering in part because of the particular demands of the job she had then. She says many of the basic skills are transferrable.
“If you graduate with a mechanical engineering degree, you still have to learn a lot on the job anyway,” she says. “You have to have problem-solving skills, make assumptions, make statements, abstract concepts out, test things out. All of that is pretty transferrable to most science engineering jobs.”
She says the biggest learning curve for her entailed understanding the software development process. “How does somebody go from ground zero to building code?” she says. “From there, it was learning how to debug difficult problems on a bigger system, because it was just such a larger coding base that people are contributing to. I also had to learn how to do test automation, because that wasn’t something that I had focused on before.”
She says having helpful colleagues who could answer her questions on coding and testing helped ease the transition, and notes her mechanical engineering background has helped in her current role—particularly when debugging a product.
Software Skills Become Critical
Mechanical engineers play an important role in the development and testing of software systems, in that they are responsible for defining how the system is supposed to behave. “If you have requirements, they have to be testable and you have to determine what test cases are used to validate at the system level or component level,” McConnell says. “Software engineers may not have the complete understanding of the physics or of the electromechanical systems, and that is where the strength of mechanical engineers really lies, and that’s the value they can bring to the system-level evaluation.”
Being well versed in mechanical and software engineering concepts will be a critical job skill to have in most markets, depending on what type of software is being developed. “Software is all around us,” Verma says. “The engineers who work in an area where these overlaps are deep will need to have fair knowledge of software engineering as well as testing. For example, such a person could be consulting for a software development company that deals with developing software for designing mechanical components. Similar overlaps exist for those who would be associated in development of IoT devices, robotic process automation and so on. There would also be specialists who have experience in the space of mechanical engineering and can test software, which is to design or model or simulate mechanical components.”
Knowing basic engineering terms for both disciplines is helpful, and having some understanding of the limitations of what can be accomplished can help engineers in both disciplines avoid a lot of blind alleys during the design process.
Wickert says that a lot of software testing still relies on test frameworks and tools that engineers have to build themselves. “There are some tools emerging in Python and Java, and there will be more resources online over time, but I don’t know of many companies that are offering really helpful ways to setup tests in the cloud, for example, other than purely testing APIs [application programming interfaces],” she says.
McConnell adds that mechanical engineers should understand that software isn’t free. “Software is often viewed as something that can be changed quickly and easily, but making production software takes a considerable amount of time and effort. It follows the same development cycle and process as a physical part, but you don’t see it. It’s hard to get a really strong understanding of the depth of the complexity and cost, even for very simple systems.”
Regarding potential curriculum changes in engineering schools, Wickert says that mechanical engineers would benefit from basic software courses and coding courses. “In mechanical engineering it can even help with doing some simulations,” Wickert says. “Especially as we get more and more compute power, it would be helpful to focus on a few software packages that you can learn how to simulate things, do modeling and test basic assumptions quickly.”
McConnell adds that engineers should have a better grasp of calibration, as well as more exposure to programming. “It would be valuable to have the opportunity to experience trying to implement something in a logical format or any kind of programming language, and understand what kind of information is required to do that implementation,” McConnell says. “Being able to communicate requirements to a software communicate so that you are getting the desired behavior or features out of the system [is useful].”
Conversely, he adds that software engineers would also benefit from more exposure to how the physics of these systems operate. “I think software engineers need more practice in that,” he says, “even the hands-on aspect of being in a laboratory and connecting electrical systems up to mechanical systems. They also could use exposure to thermal considerations and structural considerations. A lot of times thermal and vibration are viewed almost as a black art to those not intimately involved in them.”
By understanding the basic requirements of both specialties, engineers can work together more effectively on these increasingly interconnected design projects.
“You really have to know how to talk to your colleagues,” Wickert says. “Know how to communicate with each other, and sit down and figure out how to detail the exact specifications of what you need on the mechanical side, and how that interrelates to the software. It works both ways. It’s good to understand the limitations on both sides. Mechanical engineers like to say, ‘They can do that on the software side,’ but it’s not always the case. Likewise, the laws of physics aren’t going to bend just because the software engineer wants them to.”