Software Development: Definition, Types, Methodologies, and More
When it comes to software development, the image of an engineer writing code comes easily to mind. But software development is much broader than that. It involves numerous roles—not limited to programming alone. And depending on your goals, budget, and team, there are numerous ways to make an abstract idea become real-life software.
In this article, we explore some of the most basic aspects of software development: its definition, types, key roles to expect in a software project, and more.
Table of Contents
What is Software Development?
Software development involves all the processes that together result in software: from conception, designing, creating, testing, all the way to implementing, and maintaining software. That’s not even all. More broadly, it also includes endless research, prototyping, modification, and reuse.
In other words, software development is a series of any possible activities that make a software product work as it should.
People develop software for many reasons.
- To meet a specific need of a client or an organization - for example: a customer management system
- To meet a presumed need of a potential market or a group of customers - for example: a commercial trading application
- To control a hardware it is embedded into - for example: a software integrated into an IoT (Internet of Things) to control it
- To meet a personal need - for example: a simple self-build software to automate simple task
Types of Software
Depending on its purpose, a piece of software can fit into one of these categories
- Application software. This is the most popular type of software. Application software performs a specific function or serves a specific need for users. Examples of applications are ERP systems, office suites, communication platforms, distribution systems. The browser you are using to read this article is also a type of application.
- System software. This provides the environment/platform where other software works. A system software’s key function is to coordinate the functions of other software. It also controls the operations of hardware. Operation Systems, such as Windows, Linux, or iOS, is the best example of system software. Firmware and system utilities are also system software
- Driver software. This controls the device and the peripherals of the computer. To function, every device needs one such driver software. This is why sometimes people use the term device driver for driver software. It also is considered a type of system software. Software that comes with nonstandard devices such as game controllers, USB storage devices, keyboards, mice, … are all driver software.
- Middleware. This type of software enables different application and system software or different kinds of application software to talk to each other. For example, a middleware mediates Microsoft Windows and accounting software, making it possible for the software to work on the OS.
- Programming software. This is where programmers write, test, and debug code to develop other software. Assemblers, debuggers, intepreters,... are all programming software.
Roles in software development
Software developers alone cannot build software. Software that meets commercial or organizational goals requires a team of diverse roles. There are those who plan things out. Others manage the process. And after developers have written the necessary codes, we need someone to test if those codes work as they should.
Below are some of the most critical roles in a software development project. Note that, depending on the types of software being built and the method you use, some roles must be added, and some are removed. For example, Scrum methodology requires a scrum master to facilitate the process.
A Business Analyst is a bridge between product owners and developers. Her responsibility is to analyze business needs, translate those needs into requirements, and then communicate those requirements to the rest of the team.
As the name suggests, a product owner is held accountable for the product's outcome. He is the one who has the clearest vision of how the end product should look. Some of a product owner's responsibilities include defining the product's features, creating & ordering backlog items, and liaising between stakeholders and team members.
The Project Manager (PM) is the one who controls the software development project and ensures its success. More than anyone, they know the "who, what, where, when, and why" of the plan. Similar to a product owner, a project manager also join in managing the software development team.
Team lead is filled by a seasoned developer, architect, or tester who has the management skills to coordinate the technical aspect of the project. It's a part of a team lead's job to mentor and supervise other technical roles in the team. A team lead is responsible for making sure that developers and testers deliver the work on time and meet the project's goal. When issues arise, a team lead would be the first one to address and define resolutions.
A software architect designs the technical architecture of the software. He is the most knowledgeable in terms of the project's technical aspects. This makes software architects the go-to guy for developers and testers. A software architect decides which tools, coding standards, and platforms are best suited for the project at hand.
Developers write quality codes to develop the software products. In addition, they are responsible for updating the products to the Project Manager. There are typically 3 types of developers: full-stack developers, front-end developers, and back-end developers.
Testers make sure the software complies with requirements, and identify bugs, defects, or issues by using their own knowledge and/or the help of specialized tools.
Software Development Lifecycle
Software Development Lifecycle (SDLC) is a series of phases that helps teams make a software idea into life. While there are no single agreed-upon SDLC, software teams around the world mostly follow this sequence: (1) Planning and Requirement Analysis, (2) Defining Requirements, (3) Designing the Product Architecture, (4) Building or Developing the Product, (5) Testing the Product, (6) Deployment and Maintenance.
Stage 1: Planning and Requirement Analysis
Requirement analysis is the preliminary stage in SDLC. This planning is done by seniors, such as project managers and product owners. Inputs from customers and domain experts are also important to requirement analysis.
The information in this stage is used to define the project's approach and to analyze its feasibility so that the project can be implemented with minimum risks..
Stage 2: Defining Requirements
Next is to define and document the software's requirements. The business analyst and the product owner are the ones who handle this step. After requirements have been defined, they would be reviewed and approved by the project manager.
Defining requirements usually involves using SRS (Software Requirement Specification), a document that details requirements to be developed during the project's life cycle.
Stage 3: Designing the Product Architecture
Based on the SRS, the software architect would design the best architecture for the software. Usually, the architect would propose and document more than one architecture in DDS (Design Document Specification). Key stakeholders will review the DDS and choose the most viable design approach, which includes all modules of the software.
Stage 4: Building or Developing the Product
This is where the team gets down to developing the actual software. Developers will write code based on the DDS. If they can design code well, not many issues will arise.
During the development phase, developers are required to stick to coding guidelines and tools such as compilers, interpreters, debuggers. The programming language is selected by seniors to fit the type of software developed.
Stage 5: Testing the Product
While in traditional model testing is a separate phase, in modern SDLC testing is performed constantly as the subset of each stage.
Testing is where bugs are identified, reported, fixed, and retested until the software meets the SRS’ standard for quality.
Stage 6: Deployment and Maintenance
Once the software's quality has been tested, it will be released officially to the target users or market. It's a common practice to release the software's first version to a limited group of users and test it in the real world (also known as UAT, or User Acceptance Testing).
Based on the feedback, the software can be kept as it is or updated with appropriate enhancements.
After the product's release, the team keeps maintaining it on a regular basis.
Software development methodologies
Software development methodologies, on the other hand, are a blend of methods, processes, and mindsets for software development. Each software development methodology usually has its own software development lifecycle - mostly the variations of the one we have discussed.
Despite being first introduced in 1970, the Waterfall model is still used in today’s software projects. It’s a simple method where stages are linearly ordered into a sequential process that flows downward - hence its name Waterfall.
Waterfall requires a lot of careful planning and documentation. All the stages rigidly follow a sequence, often like this: defining requirements, analyzing requirements, designing, implementing, testing, deploying, and finally maintaining.
Waterfall obviously lacks flexibility. Every task is decided at the beginning, after which people must rigidly follow. If any change were to be made, there would be a lot of workarounds, even a full restart.
But there is a reason why Waterfall is still relevant today. The fact that one stage must be finished before the next can start makes Waterfall predictable, thus easier to plan and budget for. Since the project’s scope is clearly defined and understood, stakeholders can better measure the progress.
Thus, the Waterfall is better suited for a large team with meticulous planning, who have crystal clear understanding of the software being built.
Agile is perhaps the most popular buzzword when it comes to software development methodologies. It is a non-linear, iterative approach that is very different from Waterfall. Agile centers on users (a mindset known as user-centric) instead of documentation and procedures.
Agile is for flexibility. It breaks tasks into short prints, each taking about 1 to 4 weeks. Changes can be flexibly input and addressed without impacting too much the timeline.
Based on iterations, the model also involves multiple tests as the life cycle progresses. Thanks to more fine-tuning efforts, the team can expect fewer defects. This is contrary to just one testing step as in the traditional Waterfall. Agile prioritizes communications, where developers seek feedback from testers and users to improve the software
However, an Agile team can sometimes be burnt out if change requests are overwhelming. Endless discussions and feedback can sometimes take too long, which makes the lifecycle hard to predict.
Agile suits software projects that involve a lot of changes. For example, a new niche software that the team doesn't have a full vision of its final form. This needs Agile so that more ideas can be addressed as the project progresses.
Lean development is adapted from Toyota’s lean manufacturing principles, where wastage are minimized and productivity is enhanced. Likewise in Lean software development, teams try to get rid of non-productive activities and prioritize ones that generate values.
Lean requires practitioners to find wastages in the project, be it the redundant codes or repetitive activities. The end goal of Lean is to build a system that works with as few flaws as possible. All of this helps to reduce cost and the time-to-market of the software product. Lean also encourages decision-making authority, which gives motivation to team members to work independently.
However, Lean is not easy to apply. It would require experienced developers, which also is not easy to bring together. Lean needs meticulous documentation. This can be a burden, especially to business analysts.
Lean is recommended for small projects with a small team and small budget. Lean’s principles of reducing waste and improving efficiency mean teams can leverage tight resources to achieve larger results.
Scrum offers the flexibility that today’s dynamic market requires. Based on Agile, Scrum is an iterative and incremental software development approach.
The group of practitioners of Scrum is called Scrum Team. And it involves the Scrum Master, who acts as a facilitator and makes sure that the Scrum Team complies with Scrum principles.
Similar to Agile, tasks in Scrum are divided into sprints of up to 4 weeks. These short iterations make it easier to raise and solve problems. Scrum also welcomes regular feedback to improve the software so it’s very responsive to changes.
But on the flip side, Scrum is not without its drawbacks. The methodology requires its practitioners to be highly committed to its principles. Too many daily meetings can also drain energy and take time.
Scrum doesn’t suit large projects. Instead, it’s more ideal for software with vague requirements and frequent changes.
In this article, we have explored some of the fundamentals of software development. Are you trying to build new software, but get stuck? During software development, assembling the right team and choosing the right methodology can be the hardest.
Most companies lack critical IT expertise. They also don't have the time and money to hire new full-time software professionals. This is where software outsourcing comes in. By providing temporary staff and skills on-demand, outsourcing helps companies build software faster with high quality but at a lower cost.
Learn more about IT outsourcing and how it can help your software development endeavors in this article