Optimizing software production requires data-driven end-to-end process analysis
The full paper introduces the concept of an optimal setup for a software development organization that produces software for embedded systems, i.e. the “Ideal Software Factory”. The paper furthermore describes an analytics method to quantify and precisely observe the software development process and helps to transform the organization into an ideal software factory. The performance of the Software Factory is thereby assessed by analytics-driven KPIs that capture various performance dimensions such as efficiency, quality, technical debt, time, and more. For the specific aspect of efficiency, a deep dive is given that demonstrates how analytics can be applied in practice.
Introduction: The Age of Software Factories
Software development, as a discipline, still lags years behind traditional engineering disciplines; particularly when it comes to software production involving large teams. Such “software factories” are found in every corporate across all industry domains including for example financial services, logistics, telecommunication, manufacturing, retail, or automotive. A software factory may be part of the IT department and produces tailor-made software systems to support the core business processes of the organization. Or the software production is the core business process of the organization itself. This is the case if the produced software is sold to customers as software products or as embedded systems. The concepts that we describe in this paper are applicable to all kinds of software factories, independently of the type of software produced, the technology stack behind the software, or the process methodology (waterfall, agile, V-model, ...). However, in terms of language and examples we will focus on the embedded systems domain. Companies in this sector originally come from producing hardware and are now more and more transforming into software companies. It is astonishingly obvious for them to see how well they run their “real”, hardware factories and how much they lack transparency with respect to their software factories. And with the missing transparency about the inner workings of the factory comes the inability to lead it to higher execution excellence and maturity. In this paper, we will elaborate on key ingredients to drastically increase the efficiency of a Software Factory as well as on analytics-based methods to continuously improve the factory towards highest excellence in software production.
In this paper, we discussed challenges for the ones being responsible for a Software Factory; particularly, the need to continuously balance and optimize the factory with respect to various dimensions. For the dimension “efficiency”, we made a deep dive and pinpointed various aspects that reduce productivity. We then had a dedicated look into software factories for embedded software and introduced the concept of the highly efficient “Ideal Software Factory” that distinguishes between investments into reusable code components (value creation) and effort-free money-making by assembling customer-specific software in projects (value capturing). Furthermore, we described the concept of analytics-driven software process mining that enables software factory “owners” to observe and measure the inner workings of their factory. And we showed how analytics can help to reach the ideal software factory setup. For reasons of brevity, we did not elaborate on the immense power of this analytics method for software engineering in general. As an outlook, it shall be mentioned that analytics-based traceability along the development process helps in a multitude of ways. Examples: It helps to improve quality by revealing defect-risks behind requirements and work items very early; it reveals disadvantageous team setups and knowledge distributions; it allows for comparison of performance KPIs across multiple Software Factories the hierarchy of departments, business units, and divisions within a corporate – regardless of the technology-, tool- or methodology-specifics used in software production.