Software development refers to a set of computer science activities that are dedicated to the process of creating, designing, deploying, and supporting software.
Software itself is the set of instructions or programs that tell a computer what to do. It is independent of hardware and makes computers programmable. There are three basic types:
System software to provide core functions such as operating systems, disk management, utilities, hardware management and other operational necessities.
Programming software to give programmers tools such as text editors, compilers, linkers, debuggers, and other tools to create code.
Application software (applications or apps) to help users perform tasks. Office productivity suites, data management software, media players and security programs are examples. Applications also refer to web and mobile applications like those used to shop on Amazon.com, socialize with Facebook or post pictures to Instagram.1
A possible fourth type is embedded software. Embedded systems software is used to control machines and devices not typically considered computers — telecommunications networks, cars, industrial robots and more. These devices, and their software, can be connected as part of the Internet of Things (IoT).2
Software development is primarily conducted by programmers, software engineers and software developers. These roles interact and overlap, and the dynamics between them vary greatly across development departments and communities.
Programmers, or coders, write source code to program computers for specific tasks like merging databases, processing online orders, routing communications, conducting searches, or displaying text and graphics. Programmers typically interpret instructions from software developers and engineers and use programming languages like C++ or Java to carry them out.
Software engineers apply engineering principles to build software and systems to solve problems. They use modeling language and other tools to devise solutions that can often be applied to problems in a general way, as opposed to merely solving for a specific instance or client. Software engineering solutions adhere to the scientific method and must work in the real world, as with bridges or elevators. Their responsibility has grown as products have become increasingly intelligent with the addition of microprocessors, sensors, and software. Not only are more products relying on software for market differentiation, but their software development must be coordinated with the product’s mechanical and electrical development work.
Software developers have a less formal role than engineers and can be closely involved with specific project areas — including writing code. At the same time, they drive the overall software development lifecycle — including working across functional teams to transform requirements into features, manage development teams and processes, and conduct software testing and maintenance.3
The work of software development isn’t confined to coders or development teams. Professionals such as scientists, device fabricators and hardware makers also create software code even though they are not primarily software developers. Nor is it confined to traditional information technology industries such as software or semiconductor businesses. In fact, according to the Brookings Institute (link resides outside ibm.com), those businesses “account for less than half of the companies performing software development.”
An important distinction is custom software development as opposed to commercial software development. Custom software development is the process of designing, creating, deploying, and maintaining software for a specific set of users, functions, or organizations. In contrast, commercial off-the-shelf software (COTS) is designed for a broad set of requirements, allowing it to be packaged and commercially marketed and distributed.
Read how desktop as a service (DaaS) enables enterprises to achieve the same level of performance and security as deploying the applications on premises.
Register for the guide on hybrid cloud
Streamline the AI application development process with IBM watson.ai
Developing software typically involves the following steps:
The steps of the software development process fit into application lifecycle management (ALM). The IBM® Engineering Management solution is a superset of ALM that enables the management of parallel mechanical, electrical, and software development.
Software development process steps can be grouped into the phases of the lifecycle, but the importance of the lifecycle is that it recycles to enable continuous improvement. For example, user issues that surface in the maintenance and support phase can become requirements at the beginning of the next cycle.
Software development is also important because it is pervasive. As IBM vice president and blogger Dibbe Edwards points out: “Software has emerged as a key differentiator in many products — from cars to washing machines to thermostats — with a growing Internet of Things connecting them.”
A few examples:
Using software development to differentiate brands and gain competitive advantage requires proficiency with the techniques and technologies that can accelerate software deployment, quality and efficacy.
Whether it's deployment, building new cloud-native applications, refactoring or replatforming existing applications, Cloud Pak for Applications (CP4Apps) has it covered.
Automate your software delivery process for increased productivity and operational efficiency.
Seamlessly move from requirements to systems design, workflow, and test management, with extensions to the functionality of lifecycle management tools for enhanced complex-systems development.
Code, content, community and more.
Sign up for the topics that matter most.
Meet complex business needs with speed and agility by connecting you software development tools.
Our computer science research today focuses on discovering breakthroughs in automation, information processing, and computation.
1 Software, Techopedia (link resides outside ibm.com)
2 Embedded software, Wikipedia (link resides outside ibm.com)
3 Software Engineer vs. Software Developer – What’s the Difference? Fullstack Academy (link resides outside ibm.com)
4 The Forrester Wave™: Low-Code development Platforms for AD&D Pros, Q4 201 John R. Rymer, Forrester Research, Inc. 23 October, 2017 (link resides outside ibm.com)