Enterprise Software vs. Real-Time, Embedded Software
I work on a project that involves both real-time, embedded software development and enterprise software development and for some time I have been thinking about how to characterize the differences between the two disciplines. I have observed that in practice these disciplines usually attract engineers with different backgrounds and training and seem to require different management approaches.
Real-time, embedded software engineering has unique challenges related to guaranteed performance with precise timing requirements, diverse hardware interfaces and often must be concerned with quality assurance sufficient for safety critical systems. Conversely, enterprise software is typically a system of systems, meaning we create a set of end-to-end capabilities by integrating many heterogeneous software applications, operating systems and hardware technologies. Such systems usually span hardware boundaries and are sometimes geographically distributed. Enterprise systems are often large in scale, processing large volumes of data or serving large user communities, which brings with it another set of unique challenges.
Software Engineers are usually experts in either real-time, embedded development or enterprise development, but rarely both. Most universities emphasize one discipline or another in different degree programs. A curriculum oriented toward one discipline usually provides only limited exposure to the other. Many of the tools and processes for developing software are unique to one discipline or the other. For example, a real-time, embedded developer may make heavy use of tools like Matlab and abstraction libraries oriented toward common real-time problems, like device interfaces or implementation of a state machine, where enterprise developers will use 3rd party integration technologies like an Enterprise Service Bus and specialized development tools for orchestrating distributed components. Model Driven Design techniques also differ because of the unique aspects of each discipline.
I’m the first to admit that I’m an enterprise software person so it has been challenging for me to characterize the specific differences between the two disciplines, having experience in only one. I’d like to understand how others see the differences between these disciplines and I’d like to hear opinions as to which engineering processes and management practices are most suitable for each.

