Software Is Eating the World
It’s been over five years since Marc Andreessen famously quipped in The Wall Street Journal essay “Software Is Eating the World”. Today, the idea that practically all new products are software driven and “every company needs to become a software company” is almost a cliché.
From personal gadgets to home appliances, and from cars to the power generation and distribution industry, sophisticated software provides functionality and value for consumers, and ability to tailor products to a broad array of industry applications and individual tastes and needs.
The recent wave of rapid innovation and aggressive proliferation of enabling software technologies, ranging from blockchain and the Internet of Things to data analytics and artificial intelligence, is affording product company excellent opportunities to innovate rapidly and offer new and exciting products at lower cost and smaller physical footprint.
Software Development is Stressing IT
Some of these novel promising technologies are too new and stem from complex and somewhat esoteric mathematical and algorithmic fields, challenging even experienced software development teams. Consider, for example, blockchain and machine learning systems that promise to rejuvenate many enterprise software systems, are so foreign to most software engineers who are called upon to deliver increasingly complex software applications, with uncompromising security and reliability.
In fact, it’s not only cutting-edge technologies that challenge software developers. Software development has been a bottleneck for decades, resulting in project overruns and poor quality, and a major cause for product launch delays. For example, 32% of organizations surveyed in an industry study reported they release software with too many defects. In a different study, about one third of companies surveyed reported that only 22% or software application projects are completed on time and on budget. 34% reported that less than 75% of projects are on time and on budget.
This industry-wide situation is dire in industries that were unprepared for software to infiltrate so many facets of product design and take over complex, mission-critical functionality that for decades relied on electrical and mechanical subsystems, such as the automotive industry. Although automakers staring modest use of control software as early 1977, the density and complexity of automotive software over the past decade had increased manyfold.
From 2005 to 2012, there were 32 automotive recalls that included software fixes in 3.6 million vehicles. In the following 3.5 years there were 63 recalls associated with a software component, affecting 6.4 million cars. In half the time, the impact of software defects in the automotive industry nearly doubled.
And this trend, in all industries, will continue and, by all accounts, will accelerate. Software is assuming an increasingly greater role in realizing new products, and software development is threatening to become a major headache and will stress the product development capabilities in many industries that only a decade ago couldn’t hardly spell “software engineering.”
Focus on Core Competencies
Building skills and experience in developing modern software is obviously critical. But it also a good opportunity for product organizations to revisit the adage “focus on core competencies and outsource the rest.” This advice encourages companies to leverage workforce augmentation resources and low-cost offshore software development assets to help reduce costs, and focus internal investments on strategic competencies and intellectual property. But this advice equally highlights the benefits of architecting software in a way that enables outsourcing the building blocks of functionality that might otherwise be considered core.
Product organizations should consider component-based software engineering (CBSE) to further improve software development efficiency and reduce project cost and risk.
A software component is a prefabricated piece of code that encapsulates well-defined functionality, yet it is small enough to be developed and maintained as a standalone software unit. Components have a well-defined standard-based interface to facilitate easy integration and interoperability with other software components and external code.
The distinction between core and non-core has always been difficult. And when considering a component based strategy, the question is as relevant, especially when the functionality or technology being considered is one of those emerging technologies that promise major technological and functional advantages.
The first consideration for outsourcing should be the algorithmic complexity of developing and integrating advanced functionality, such as complex data visualization, 3D modeling kernels, and photorealistic rendering.
Another area to consider outsourcing is technologies that change continually because of expanding formats, standards and regulations, such as CAD translators. Similarly, promising technologies that continue to evolve and improve due to a large external ecosystem that drives rapid innovation, such as blockchain, artificial intelligence, and machine learning, are good candidates.
In a similar vein, applications that leverage emerging hardware architectures such as vision systems and artificial intelligence engines running on GPUs and purpose-built hardware, could be developed and maintained more cost-effectively by third-party developers that specialize in these domains.
A common thread across these examples and underscoring the strategic and technical benefit of using validated components and outsourcing certain aspects of software development, is the complexity of testing and validating applications based on advanced technologies. For examples, testing the accuracy of CAD translators is a mathematically complex task that also require deep domain knowledge. Validating the output of a nondeterministic artificial intelligence system is another daunting undertaking for inexperience mainstream application developers.
The Clear Benefits of Component-Based Software Development
CBSE and similar software engineering concepts that advocate a design approach based on reusable components offer multiple benefits that are quite self-evident:
- Portability reduces the effort to develop, test, maintain, and support software applications across heterogeneous platforms.
- Reliability reduces integration testing effort and ensures that applications are robust, secure, and are easier to maintain over their lifetime.
- Extensibility reduces the effort to implement changes in response to new requirements.
- Flexibility reduces the effort to support an always-growing array of datatypes, file formats, and protocols.
- Efficiency reduces latency in bandwidth-intensive software applications.
It’s critical to emphasize that reusing software components saves much more than expensive coding time. Software reuse reduces integration testing and system validation and verification efforts, and gives system architects and project managers higher confidence in the design and in project timeline, resulting in higher success rate of software projects.
For that very reason, product organizations should insist that external contractors and outsourcing companies use validated components as a way to improve software quality while improving development time and cost.
So, Why Are You Not Using Component-Based Software Development?
Underutilizing system-wide reuse as a principal software development strategy is a result of complex and sensitive confluence of technical and organizational factors:
- Organizational Obstacles. As the number of developers and projects increases, the effort to define, catalog, and retrieve reusable assets across multiple business units and project teams grows exponentially. Well-intentioned developers often find it hard to locate suitable reuse opportunity outside of their immediate project team.
- Technical Obstacles. Developers lack core competencies necessary to architect an effective reuse framework. Defining and implementing reusable software assets requires deep understanding of the technical domain and business process in order to define patterns and repeatable processes to be encapsulated into reusable components.
- Political Obstacles. Developers of middleware software and general behind-the-scene software functionality may feel left out of key architectural decisions and user-facing functionality. Perhaps more ubiquitous and as dangerous is the “not invented here” syndrome, that prevents an objective evaluation of the benefits of prefabricated software components.
Most IT organizations do recognize the value of code reuse and declare a war against reinventing the wheel at the beginning of every new project. But, too frequently, these best intentions are manifested by opportunistically copying code snippets from an existing system into new one, and continue to maintain the new code separately. This “clone and own” method has some benefits for individual programmers or small project teams, but, obviously, it doesn’t deliver the expansive benefits of systemic reuse.
New trends in software development heigthen the need for speed and efficiency, and call for renewed attention to the need for component reuse as an integral part of an organization’s software development processes so that project teams focus on leveraging core competencies and domain knowledge.
The breathless headlines about exciting new technologies such as in augmented reality, robotics lure product companies and their IT departments to attempt to exploit these technologies in future products.
We are conducting a short survey to understand how product organization use component-based software development strategy, and their motivation to use CBSE to accelerate the development and reduce the cost and risk involved in incorporating complex software technology in their products.
The survey should take less than 10 minutes to complete.
Participants will have an option to be entered into a drawing for one of twenty $25 Amazon gift cards. Every week, five respondents will receive one $25 Amazon gift card each.
Image: Kroa A (Victor Vasarely, 1970)
This article was sponsored by AMC Bridge