This web site covers topics related to industrialized software production. The goal is to provide a clear picture of what constitutes industrialized software production, and most importantly, to show in sufficient detail, how industrialization has the potential to change the rules of the game on a global scale, and how it impacts software intensive businesses in a fundamental way. The content is intended to evolve into a practical guide for organisations that would like to embark on the path towards industrialized software asset development.
The language used on this site avoids jargon as far as possible, and where technical terminology is unavoidable, concise definitions and appropriate references to technical literature are provided. This approach makes the content easily accessible without compromising technical rigor.
The audience consists of decision makers in software intensive businesses:
- Executives in the Software Industries
- Investors and Venture Capitalists
- Software Architects and Project Managers
In the 21st century software is pervasive, it is an essential part of mobile phones, automobiles, medical instruments, photo and video cameras, appliances from air conditioners to washing machines, and more. In the light of the various different kinds of software that are in use today, it is more accurate to talk about various software industries rather than simply the software industry. The importance of the characteristic elements that define specific kinds of software is a recurring theme in this wiki.
Especially embedded software is easily overlooked, because we interact with software indirectly, often via a time tested user interface style that predates the advent of software. The main controls of an automobile haven't changed much in the last 100 years, the basic typewriter keyboard layout has survived a similar period, and the concept of labeled buttons and dials is as old as the first electrical devices.
For a moment, just think about all the devices in your home that run on electricity - excluding light bulbs, and determine the percentage of devices that contain software. That percentage is likely to be between 50% and 90%. Increasingly, devices that contain software provide interfaces that allow them to communicate with other devices. For example a digital camera is completely useless without a software interface to export pictures. And because of the sheer number of devices, the trend is towards interfaces that make use of wireless technology, and towards communication protocols that are standardized across manufacturers and across various types of devices. Hence, more and more devices are part of a wider network, and more and more of these networks are plugged into the Web, opening up a vast array of potential usage scenarios and opportunities for further development and innovation.
Given today's technological capabilities, it is easy dream up a utopian picture of the near future in which software does most of the hard work and where people can concentrate exclusively on interesting creative work and their favorite hobbies. But this bubble bursts very quickly when one considers the following examples of major issues relating to "state of the art" software.
- How often typical desktop applications on a personal computer or Pocket PC freeze or crash.
- How many user names and passwords one has to remember on the Web in order to conduct "e-Business". Authentication is still a very tedious process that is riddled with security vulnerabilities.
- How many times one has to manually enter the same information - such as address details - into various web based systems. Even within a single large organization, implementing concepts such as "a single version of the truth" is typically a practical impossibility given the way most of today's operational software systems are architected.
- How often plug'n play between two devices does not work because of software version incompatibilities. Resolving the version incompatibilities usually involves manual effort, having access to a broadband internet connection, and the hassles of having to deal with infrastructure that should be working as-is. Not to mention that some vendors actively exploit and encourage technology [version] churn, because it is the vehicle that ensures a continuous revenue stream.
- How spam has rendered email into a less and less useful tool, and how software viruses and spyware and other malicious code have spawned an entire industry to combat "malware". The result is an ever continuing software arms race that costs billions of dollars each year on a global scale.
- How long it takes to get a new personal computer configured with all the software for a specific user. Yes, some organizations standardize their desktop environment, but this approach only really works for simple environments where all users follow exactly the same work patterns. To be efficient, executives and decision makers in a software intensive environment need to be able to tailor their desktop to the needs of their specific role. The cost of the time lost in such a configuration exercise exceeds the cost of the new personal computer.
The list could easily be continued with further examples. All the issues above are largely preventable in principle, if the design, production, and deployment of software would be sufficiently industrialized.
The software industries are amongst the largest industries on the planet, and many of today’s most successful companies are organizations built around the production of software and related services. Looking at the history of other industries, such as the automobile industry or the aviation industry, and their respective level of maturity half a century after their inception, one could assume that the production of software must surely be a highly standardized process. However this is not the case. Instead, most software that is developed today is produced with tools and processes that are not too different from what was used three decades ago. Of course, numerous technology waves have rolled over the software industries in the past 30 years, but the last major step forward was the event of general purpose programming languages and compiler technology.
Similarly the flavor of software development methodologies has changed about every five years or so, without having an impact on the foundations of software development. The primary work product of a programmer is still textual source code, and textual source code is still the ultimate specification that is translated into operations that a computer or a virtual machine can execute.
Is the production of software an art form or an engineering discipline? That there is no universally accepted answer to this question points to some of the deepest problems. Many individuals and whole companies have resigned to the facts of life: developing software is expensive, unpredictable, and stressful for those involved. On the one hand, if software development were an engineering discipline, there would be industry-wide accepted, thoroughly tested methodologies (and the metrics to prove it) and robust end-to-end development tools to support these methodologies. On the other hand, there are many examples of organizations that actually do produce software economically, to a high level of quality, and to predictable schedules, only these organisations currently still constitute a minority.
Greenfield opportunities to introduce new software are few and far between, virtually all organisations are using software to support and automate their business processes. Despite the trend towards the use of package software, the majority of software that is written today, in terms of lines of code, is custom software produced for specific organizations. For the most part, software development is software maintenance: keeping up with changing implementation technologies, keeping up with changes in business requirements, and compensating for the weaknesses of existing systems with semi-automated clean up tools. As the overall software code base that needs to be maintained grows, the economic pressure to produce more software, in shorter time frames, with less manual effort, continues to increase. Offshoring has emerged as an increasingly popular option to reduce cost, but the results are often unspectacular, and time to market easily suffers.
Active participation and forums on this site
All content is licensed under the Creative Commons Attribution-ShareAlike 3.0 License, such that it can easily be used for commercial and non-commercial purposes. The authors believe that this licensing model, combined with user driven innovation - via the discussion pages on this site, provides the best basis for incrementally establishing practically useful standards for industrialized software production.
Any sharing or remixing content from this site requires (a) a reference to www.industrialized-software.org and (b) explicit attribution of the content to the authors that are listed in the history of the pages from which content is being sourced.
In order to establish a high quality reference manual, and to keep pages well structured, pages are only editable by their creators and the moderators. Discussion is strongly encouraged, but is consciously limited to the forum area and the comment areas at the bottom of each page.
An overview of all forum discussions is available via the discussion drop-down menu at the top right corner of each page. Note that "per page discussions/comments" are only shown on the forum overview page if the show hidden option is selected. The latest forum posts are available at recent posts in the same drop-down menu.
Any member of this site can create new pages by using the Add a new page function at the bottom of the left hand navigation bar. As appropriate the moderators may choose to include new contributions in the main index and structure of the site.