How Important of Software?

Through an analysis of its unique characteristics, evolving business role, and historical precedents, I will argue that IT’s strategic importance is not growing, as many have claimed or assumed, but diminishing. As IT has become more powerful, more standardized, and more affordable, it has been transformed from a proprietary technology that companies can use to gain an edge over their rivals into an infrastructural technology that is shared by all competitors. Information technology has increasingly become, in other words, a simple factor of production – a commodity input that is necessary for competitiveness but insufficient for advantage.” – Nicholas Carr, Does IT Matter?

Regardless of what one thinks about the wider implications of Carr’s assertions concerning the importance of technology, it’s clear that attitudes about differentiation and competitive advantage via software are evolving.

By itself, this is not news. Accelerating commoditization, driven most recently by open source software, has had major impacts on market competition. Vendors, for their part, have periodically recognized opportunities to rethink traditional software valuation; IBM’s formation of the Eclipse project is but one example of this. Today’s competitive differentiation is tomorrow’s commodity.

What’s changed is the scope of this realization. Once content to standardize technology infrastructure on a tactical basis, increasingly entire infrastructure stacks are composed from standardized, non-differentiating technology.

To illustrate this, consider the cases of Microsoft, Google and Facebook. These three firms represent almost generationally different attitudes towards the importance of software as a means of achieving competitive advantage. These attitudes are heavily informed, of course, by their respective commercial contexts: Microsoft, in the business of selling software necessarily has different attitudes towards ownership than Facebook and Google, for whom software development is a means rather than an end. But this observation only confirms the assertion that there is a transition underway.

  • Microsoft (Founded 1975)
    For Microsoft, its competitive advantage centers around its intellectual property, which is to say its software. Microsoft felt compelled to compete with its own entrant in each of the following software categories: Browser, CRM, Database, Development Tools, Email Server, ERP, Game Consoles, Multimedia Runtime, Office Productivity, Operating System, Portal, Programming Language, Search, Webmail, Web/App Server. And the list could go on. Software markets were important enough to Microsoft either for the revenue they offered or their strategic significance that the firm pursued opportunities in each. While its recent focus on interoperability has led to relationships with competitive products (i.e. Apache, Eclipse, Mozilla), Microsoft unquestionably still views software (and the integration of that software) as its primary competitive advantage in the marketplace.
  • Google (Founded 1998)
    By the time Google arrived twenty plus years later, much of the available oxygen from a software sales standpoint had already been consumed by Microsoft and others. Search, however, offered more substantial projected revenues. With the benefit of hindsight, Google’s attitudes concerning the importance of software were distinct from Microsoft’s. Rather than construct its infrastructure from commercial software such as Windows, Google instead chose open source software – Linux, among others – as the foundation for its sprawling infrastructure. Decades of software industry history served as input to its thinking.And part of this evolution was contextual, of course. Unlike Microsoft, Google does not derive the majority of its revenue from the commercial sale of software, which afforded it the opportunity to reconsider the value of the software it consumed as well as the software it produced. Because the firm’s primary advantage over its early competitors (AltaVista et al) was technical – it could scale more cost efficiently – it has retained a culture which considers infrastructure a competitive advantage: the firm is famously secretive about its internal development. The result of which is the status quo: the majority of Google’s infrastructure is not public.While the software itself remains protected, however, Google does periodically share the details of its approach (e.g. GFS and MapReduce). The benefits to this practice for Google are multiple:

    1. Engineers may be trained in techniques such as MapReduce prior to joining Google
    2. Public availability may lead to open source implementations, which can act to inhibit commercial opportunities for competitors and may suggest areas of improvement for internal instantiations
    3. Publishing can improve employee morale by allowing them to experience external recognition for their accomplishments

    This is suboptimal from a public standpoint versus open sourcing the original assets, because the public implementations are reportedly not as performant; one reason Google is periodically criticized by open source advocates. But it represents an evolutionary improvement relative to entities that disclose little or nothing about their software products.

  • Facebook (Founded 2004)
    Founded just six years after Google, Facebook’s opinion of software is markedly different. The evidence suggests that Facebook believes infrastructure software to be non-differentiating.Apart from their decision to release key pieces of their existing infrastructure as open source projects – e.g. Cassandra [coverage], Hive, Hip-Hop [coverage] or Thrift – there is the fact that Facebook is built, effectively, on publicly available software. Its primary user interface is built using (compiled) PHP and publicly distributed JavaScript libraries. Its forthcoming messaging product will be built on top of Hbase. Reporting and analytics are via Hadoop. And so on: there are few Dremels or Pregels hiding inside the social networking giant.For Facebook, the value is not in the infrastructure – though Hip-Hop demonstrates the value of even marginal improvements in performance for high scale players – it is in the users and the data they generate. As Tim O’Reilly famously put it, “data is the Intel Inside.”

What Does it Mean?

If we accept that perceptions of the importance of software are in fact evolving towards a recognition that it is less of a means to differentiate, the obvious question is what this implies.

First, it may be worth a review if your primary differentiation lies in infrastructure efficiency. There may be cases where this is business justifiable, but the trendline clearly argues against it in an increasing number of cases.

Second, when you look to differentiate, you should focus on the personnel side over infrastructure technology. In analytics, for example, the competitive advantage may not be answering the question marginally faster than a competitor, but asking a better question [coverage].

Third, be clear on what precise advantage the software you build conveys. It is certainly possible that aspects of your infrastructure may be unique and differentiating, and therefore a competitive advantage. But be skeptical of this belief, and balance the costs of proprietary development against the benefits of running on standardized infrastructure carefully. Few businesses will be able to run on a stack that’s easily replicable by a competitor. But the ratio of what’s private versus public is beginning to shift in favor of the latter.

Last, software manufacturers should understand this context, and seek opportunities up the stack to differentiate or focus on delivering value through services, hosting, integration or maintenance. With rare exceptions, it will be increasingly difficult to justify high margin infrastructure software products as they will be providing less competitive advantage over time.

Is Software Important?

The answer to this question depends on how you define the term important. Few businesses today can exist without software, so superficially the answer to this question is self-evident. The more nuanced reply would consider infrastructure software’s strategic role, as Carr has.

It is true that there is a large and continually expanding body of open source software that is highly competitive with commercial alternatives. Most of the major infrastructure software categories – database, operating system, programming language/runtime, application/web server, etc – have multiple credible offerings. It is also true that in spite of the the fact that there are a variety of costs and benefits attached to usage of this software, it is increasingly difficult for businesses to achieve competitive advantage over one another via the selection of commercial alternatives. Instead, competitive advantage is derived in how that software is instantiated, maintained and employed by people.

But while this could be used to frame an argument that software is unimportant, it belies the reality that usage of commodity software can deliver results that are highly differentiating; the same cannot be honestly said of the eletrical infrastructure or plumbing. Infrastructure software may not be important enough to develop in proprietary fashion any longer – see OkCupid’s recommendations concerning building a proprietary web server – but this does not relegate it to role as a simple factor of production.

Technology is certainly necessary for competitiveness, but awareness of this importance varies. As long as this remains true, and leverage of infrastructure technologies remains uneven, there will remain opportunities to seek competitive advantage via your infrastructure. It just might not be with software you’ve built yourself or something proprietary bought from a vendor.

SOFTWARE

 

Computer software or simply software is any set of machine-readable instructions that directs a computer‘s processor to perform specific operations. Computer software is non-tangible, contrasted with computer hardware, which is the physical component of computers. Computer hardware and software require each other and neither can be realistically used without the other.

Computer software includes computer programs, libraries and their associated documentation. The word software is also sometimes used in a more narrow sense, meaning application software only.

At the lowest level, executable code consists of machine language instructions specific to an individual processor—typically a central processing unit (CPU). Amachine language consists of groups of binary values signifying processor instructions that change the state of the computer from its preceding state. For example, an instruction may change the value stored in a particular storage location inside the computer—an effect that is not directly observable to the user. An instruction may also (indirectly) cause something to appear on a display of the computer system—a state change which should be visible to the user. The processor carries out the instructions in the order they are provided, unless it is instructed to “jump” to a different instruction, or interrupted.

Software written in a machine language is known as “machine code”. However, in practice, software is usually written in high-level programming languages that are easier and more efficient for humans to use (closer to natural language) than machine language.[1] High-level languages are translated into machine language using a compiler or an interpreter or a combination of the two. Software may also be written in a low-level assembly language, essentially, a vaguely mnemonicrepresentation of a machine language using a natural language alphabet. Assembly language is translated into machine language using an assembler.

History

An outline (algorithm) for what would have been the first piece of software was written by Ada Lovelace in the 19th century, for the planned analytical engine. However, neither the analytical engine nor any software for it were ever created.

The first theory about software—prior to the creation of computers as we know them today—was proposed by Alan Turing in his 1935 essay Computable numbers with an application to the Entscheidungsproblem (decision problem).

This eventually led to the creation of the twin academic fields of computer science and software engineering, which both study software and its creation. Computer science is more theoretical (Turing’s essay is an example of computer science), whereas software engineering is focused on more practical concerns.

However, prior to 1946, software as we now understand it—programs stored in the memory of stored-program digital computers—did not yet exist. The very first electronic computing devices were instead rewired in order to “reprogram” them.

Design and implementation of software varies depending on the complexity of the software. For instance, the design and creation of Microsoft Word took much more time than designing and developing Microsoft Notepad because the latter has much more basic functionality.

Software is usually designed and created (a.k.a. coded/written/programmed) in integrated development environments (IDE) like Eclipse, IntelliJ and Microsoft Visual Studio that can simplify the process and compile the software (if applicable). As noted in a different section, software is usually created on top of existing software and the application programming interface (API) that the underlying software provides like GTK+, JavaBeans or Swing. Libraries (APIs) can be categorized by their purpose. For instance, the Spring Framework is used for implementing enterprise applications, the Windows Forms library is used for designing graphical user interface (GUI) applications like Microsoft Word, and Windows Communication Foundation is used for designing web services. When a program is designed, it relies upon the API. For instance, if a user is designing a Microsoft Windows desktop application, he or she might use the .NET Windows Forms library to design the desktop application and call its APIs like Form1.Close() and Form1.Show()[5] to close or open the application, and write the additional operations him/herself that it needs to have. Without these APIs, the programmer needs to write these APIs him/herself. Companies like Oracle and Microsoft provide their own APIs so that many applications are written using their software libraries that usually have numerous APIs in them.

Data structures such as hash tables, arrays, and binary trees, and algorithms such as quicksort, can be useful for creating software.

Computer software has special economic characteristics that make its design, creation, and distribution different from most other economic goods.[specify][6][7]

A person who creates software is called a programmer, software engineer or software developer, terms that all have a similar meaning. More informal terms for programmer also exist such as “coder” and “hacker” – although use of the latter word may cause confusion, because it is more often used to mean someone who illegally breaks into computer systems.