What is Software Development?

People both inside and outside IT often ask what is software development. It is a process to create computer software using one or more specific programming languages that provides functionality to address particular business or personal objectives. The development of software is usually a planned initiative with a number of steps and stages that result in the creation of operational software. Hence a good definition is: “a process with a set of activities that create computer software products, including their design, development, testing, and deployment.” Software itself is a set of instructions or programs that tell a computer what to do. It is independent of hardware and makes computers programmable.

DevelopmentSince the advent of software product development in the 1960s, many different approaches have been used for developing the software; the most common today uses an agile approach to development. An agile software development definition includes an approach where development requirements and solutions are delivered through the collaborative effort of self-organizing and cross-functional teams and their customers.  Unlike the more traditional and often inflexible development software examples, agile encourages and promotes flexible responses to change, by advocating adaptive planning, evolutionary development, early delivery, and continual improvement.

Software is developed using computer programming, carried out by a software developer. A software developer definition is “a person that creates software, either by themselves or in conjunction with others.” What do software developers do day-to-day? They use processes and techniques to create working software, including requirements definition, data flow design, code design, process flow design, flowcharting, code creation, software development testing, and debugging. The end-to-end process is sometimes referred to as the software development life cycle (SDLC). The term ‘full stack software developer’ is someone that develops both user-facing software and server software, including database development and the development of application interfaces.

What are the Different Types of Software Development?

There are several different types. They can be grouped into four basic categories:

  • Application development that provides functionality for users to perform tasks. Examples include office productivity suites, media players, social media tools, and booking systems. Applications can run on the user’s own personal computing equipment or on servers hosted in the cloud or by an internal IT department. Media streaming development is one example of application development for the cloud.
  • System software development to provide the core functions such as operating systems, storage systems, databases, networks, and hardware management.
  • Development tools that provide software developers with the tools to do their job, including code editors, compilers, linkers, debuggers, and test harnesses.
  • Embedded software development that creates the software used to control machines and devices, including automobiles, phones, and robots.

There are a number of different approaches that can be taken to develop any of these categories. These include:

  • Scrum development where multiskilled teams use timeboxed development stages.
  • Kanban development, using a visual work pipeline without any timeboxing.
  • Sandbox development where untested code is isolated from production systems.

Each of the categories of the different types of development typically attracts different types of software developers, with different personalities, characteristics, and specialisms. For example, medical device software development requires software developers that are fully conversant with developing safety-critical systems. This is a specialism that a typical application software developer is unlikely to possess, but which is critical for all aspects of healthcare software development. A music software developer will need to have musical ability, as well as a grounding in formal music theory, to be successful in developing software for the notation and performance of music. A security software developer needs to have more than just development skills, they must also be experienced in all aspects of IT security. Mobile development specializes in developing application software for mobile devices such as phones and PDAs. Enterprise software development is used to develop a suite of applications that are used across an organization.

The software that is developed can remain proprietary within the organization, or be sold to others. It can also be made freely and widely available to anybody that wants to use it; this is called open source  development.

The History and Future 

The history of software development and the history of software developers is an interesting one and is intertwined with the history of computers. Early computers were mechanical machines, known as analog computers. Some consider that the first example in history of developing software was in 1810 when Joseph Marie Jacquard devised a system of holes punched in cards to guide the patterns used in his looms to make cloth. The technique of using holes punched into cards or paper tapes was later adopted to program early computers, including those made by IBM, Elliott, and GEC.

Ada Byron daguerreotype by Antoine Claudet 1843 or 1850 - croppedOthers say that Ada Lovelace is often credited as the first software developer when in 1843, she created a rudimentary program for Charles Babbage’s ‘Difference Engine.’ This allowed sequences to be designed so that instructions could be given to select particular gears and shafts.

The big breakthrough was made by George Boole, who, in 1947, proved the link between logic and mathematics. Without this, we would not have the computers that we all use every day, including our smartphones and digital watches, but it wasn’t until 1948 that Claude Shannon wrote a thesis on how binary logic could be used in computing.

This paved the way so that when digital computers were first developed, they could be instructed on what to do using binary logic as the method. In 1949 John Mauchly developed ShortCode. This was the first programming language for electronic computing devices, but it required the software developer to change the statements from 0’s to 1’s by hand. In 1951 Grace Hopper wrote the first compiler that turned programming language statements into the required 0’s and 1’s. This lead to faster development, as the software developer no longer had to do it by hand.

In 1957 the first major programming language, FORTRAN, was developed. FORTRAN was excellent at handling numbers but was not so good at handling the inputs and outputs required for business computing. To address this, COBOL was developed in 1959, specifically for business computing. COBOL is still at the heart of many major systems used in the banking industry today.

Over time, more and more programming languages were developed, all aimed at speeding up the development process and improving the quality of the software for specific tasks. For example, in 1958, the LISP programming language was developed specifically to aid research into artificial intelligence. LISP looked nothing like the other programming languages of the time, but it is still in use today because of its highly specialized and abstract nature.

The popular languages Algol (1958) and BASIC (1964) led to a rapid growth in computer programming and the development of software, as they were cheap to deploy, easy to learn, and very flexible in what they could do. Many of today’s programming languages, including C, C+, C++, VB, and Java, have their roots in ALGOL and BASIC.

The history of lean development, which is the approach most used today, started in 2003. Mary and Tom Poppendieck were actively involved in the agile software development community. They authored a book called ‘Lean software development’ that restated lean principles as applied to developing software, and a set of 22 tools. The future of agile development was assured as more and more organizations realized the value that it could bring.

As the demand for more and more applications continues to accelerate across the globe, the future of software development and the future of  development jobs is in no doubt. Even the best artificial intelligence is unlikely to replace the need for skilled, innovative, and motivated software developers.

Tools

In any organization that develops software, it is important to research what tools do software developers use. In recent years there has been a great expansion in the number and adoption of development tools. For example, Jira is now a very popular tool used in agile development by many organizations. These tools have improved the velocity of software developments, and in general, have made the working lives of software developers less stressful. Unless you are aware of the popular tools used in agile development, you risk being less attractive for new software developers to come and work for you.

Developer toolsThere are many different types of tools, focussed on different development methodologies and programming languages. One example is an agile  tool. The tools come in all shapes, sizes, and costs. Some are free open source tools, some are specific software engineering development tools, and some come as part of a wide suite of integrated tools as a software development kit. The kit is a collection of software development tools in one installable package, all from the same supplier. They simplify the creation of applications by including and integrating code editors, compilers, debuggers, and frameworks for code management, testing, and deployment.

Many development toolkits are specific to a particular hardware platform and operating system combination. One example is the Android software development kit, which is designed for developing software that runs on the Android operating system for mobile devices. If you want to know more about the Windows software development kit, the owner Microsoft has a wealth of information on their website. This popular software development kit contains header files, libraries, samples, documentation, and tools required to develop applications for Microsoft Windows and .NET Frameworks.

A commonly asked question is what laptop is the best for software development. Any high spec laptop is suitable, provided that it is portable, with high-speed processors that have multiple cores and threadcount, at least 16Gb of RAM, and solid-state disks. This should give you the speed necessary to avoid frustrations.

Software development testing

Let’s look at why testing is important in software development life cycle. Software testing aims to evaluate the quality of the software product and improve it by identifying defects. It does this by running a series of tests against the new product code. Good software testing strategies for software development should include a range of different types of testing:

Functional testing: does the software provide the expected functionality? This is the most common form of testing, sometimes referred to as ‘Utility’ testing.

Software development testing

Non-functional testing: This tests all aspects that aren’t related to the expected functionality; it is often a neglected but very important part of the development lifecycle. Good software testing strategies for software development will include:

  • Security testing: Is the application secure against external or internal attack?
  • Performance testing: will the application run as fast as expected/required?
  • Load testing: How does the application perform under continuous load?
  • Scalability testing: How does it perform under increasing load?
  • Disaster recovery testing: How will the application recover after a disaster?
  • ‘Break’ testing: This can be a fun part of software development testing, where you see if you can make the application fail by doing things you wouldn’t expect users to do, e.g., Typing non-alphabetic characters into a ‘Name’ field.

Testing is often sacrificed when there are time or resource pressures, but this adds major risks of disruption to your business. Testing new software should always be a fundamental part of your software development lifecycle.

Software Development Team

Software development team

Historically development function had several separate teams organized in a hierarchical  team structure. The requirements management team gathered user requirements and passed the to analysts. The analysts in the team converted these into program requirements, which were then passed to programmers to develop the code. Database administrators would be part of the development team, making any necessary changes to the databases. Software development testers would test everything before handing over to a separate team responsible for code deployment. In larger IT functions, each team would report to a team leader, who in turn reported to a development manager.

All that changed, for the better, with the advent of the agile development team. This team structure uses people with multiple skills, working in multi-functional collaborative teams, with a flat organizational structure.  Each development team focuses on one or more specific software products. The teams might include people with specific roles, such as a scrum master, but these are not ‘the boss,’ they are there to help and support the self-determining development team.

Security in software developmentSecure software development

Secure software development is a relatively new practice aimed at reducing the security risks to the developed software and the organization as a whole.

Secure development is a practice and approach that ensures the code and processes that go into developing applications are as secure as possible. Secure development uses several specific processes, including the implementation of a Security Development Lifecycle (SDL) and secure coding itself, to ensure that adequate security is designed into the application from the outset, and testing is carried out to validate the success of the secure development.

SAFe software development sounds like it is the same thing, but it is completely different. SAFe is, in fact, an acronym for Scaled Agile Framework. It is an adaptation of agile software development, fusing Lean, Agile and DevOps principles and practices into a single cohesive, scalable, and configurable framework.

Software development process

A common question is, “what are the steps in software development?” The precise steps will vary according to which of the development models have been adopted by the organization, but the outcome from any generic development plan will be the same for every software development process – working software.  Every model and approach will include the same high-level activities in their development process model:

  • Specification
  • Design & Implementation
  • Validation
  • Evolution

Every organization that develops software should have a development roadmap or plan that sets out all of the development steps that need to be carried out. That’s true whether you are using a traditional ‘waterfall’ software development workflow, or an agile software development process.

Most, if not all, organizations will continually develop software using iterative development, adding more and more functionality over time. An agile software development plan will deliver this in frequent small increments, repeating the steps involved in development life cycle in 1 or 2 weeks. More traditional approaches will take longer to execute the steps involved in the software development lifecycle, delivering the new functionality at much longer intervals, sometimes as long as a year.

Today, the most widely adopted software development process is based on the Manifesto for Agile Software Development.  This sets out the agile software development principles patterns and practices that give frequent delivery of working software that customers want. Many ask what is Scrum in agile software development; it is just one approach to this that uses a team approach.

Software development methodologies  

There are many different software development methodologies, with many forms of both traditional waterfall development and agile development.

The waterfall model of development, sometimes known as V model development, was formerly the most common development strategy. In this software development framework, seven stages are followed in order:

  • Capture requirements
  • Perform analysis
  • Design the solution
  • Code the software
  • Test for bugs
  • Put into operation

Today, the top development methodologies are all based on agile principles and methods. Any agile software development methodology follows lean development principles that are designed to maximize efficiency and throughput and eliminate waste. Agile development with Scrum used to be the most popular agile model, but today it is being overtaken by agile software development models that provide more flexibility where code can be deployed at any time, not just in regular increments.

A less common model is the spiral model of development, using a risk-based approach to guide the team to select the most appropriate software development models for a particular project.

Costs

Software development costs can greatly vary. Upfront investments may be required in licenses for the selected programming language and tools, and training costs for software developers can be high. However, there are plenty of low costs or free tools and programming languages available, and if you pick a widely used development model and pay competitive salaries, you should be able to attract good software developers who can produce great products at an economical cost.

People also ask

Here are three commonly asked questions:

Which type of software is considered the most difficult to learn?

The most difficult type of software and programming languages to learn are those that are very specialist and esoteric, designed for specific types of hardware such as device controllers. This includes machine code and assembly language, which are the lowest form of programming language. For example, an early programing language for GEC computers required the software developer to be able to code Hexadecimal strings, where the first five characters provided the instruction and the remainder provided the accompanying data.

Is software development a good career?

If you have the aptitude and intelligence, then this can be a good career for you. Pay is generally good, with good prospects and a very large number of potential employers and opportunities worldwide.

What are the 5 types of software?

These are:

  • Operating system
  • Device drivers
  • Firmware
  • Programming language translators
  • Utilities / Applications
Summary:

Software Development

People both inside and outside IT often ask what is software development. It is a process to create computer software using one or more specific programming languages that provides functionality to address particular business or personal objectives. The development of software is usually a planned initiative with a number of steps and stages that result in the creation of operational software. Hence a good definition is: “a process with a set of activities that create computer software products, including their design, development, testing, and deployment.” Software itself is a set of instructions or programs that tell a computer what to do. It is independent of hardware and makes computers programmable.

Stay Up to Date

Join the 12,713 others that get technology news, reports, insights and research delivered right to their inbox.