The final stage in the product development process is actually building the software. A couple concepts you and your team should be familiar with include:
- Waterfall, Agile & Scrum
- Functional Specification
- Unit Testing
Software Development Methodologies
Waterfall Model was a traditional development methodology in which final products or systems were built in a linear process. Its origins lie in the manufacturing and construction industries and it was simply adapted for software development.
For more on the topic, check out Waterfall Software Development.
Agile is a software development methodology that builds products in an incremental, iterative manner with a heavy exposure to customer feedback. Agile was developed as an alternative to the traditional Waterfall Method, in order to avoid the setbacks of sequential software development.
The core ideas of Agile are included in its Agile Manifesto:
- Individuals and interactions over processes and tools
- Working software over comprehensive documentation
- Customer collaboration over contract negotiation
- Responding to change over following a plan
The image below gives an idea of an iterative agile development process:
For more on the topic, check out Agile Management.
Scrum is a management framework that empowers teams to build products in an agile way. Scrum breaks down the product development cycle into shorter periods of time called Sprints. Scrum also includes a well-defined set of artifacts, rituals, and roles to be carried out by the product team. Some of the most popular elements are:
- Product’s requirements are broken down into the smallest workable unit and added to a Product Backlog.
- Each sprint, the Product Owner prioritizes the items on the backlog and adds these to the Sprint Backlog.
- The Sprint Backlog is simply a list of the items to tackle during a given sprint.
- The product team; engineers and designers; self-organize and tackle the items on the Sprint Backlog.
The image below gives an overview of the many roles and steps in a Scrum approach.
For more on the topic, check out Scrum Methodology.
A great definition for the role of a functional spec is the following:
In simple terms, a functional spec is a description of what a product/feature should, how it should behave and what value it should provide for the user.
The driving concept of the functional spec is that the product team should inform the engineering team “What to Build” and not “How to build it?”. Implementation specifics should be left to the engineering team.
A couple tips when writing up functional specs:
- Focus on the behaviour of the system.
- Cover all the possible use cases and edge cases. Eliminate uncertainty.
- If possible, describe the workflow from the user or customer’s perspective.
- Support with visuals.
They usually come in the form of:
- The product should allow the user to __________
- When the user clicks on ____, the app should respond in the following way ____ .
For more on the topic of functional specifications, check out:
Testing is a fundamental process of software development because it allows you to ensure you that the product works as it is intended to.
According to Wikipedia, Unit Testng is a:
“software testing method by which individual units of source code… are tested to determine whether they are fit for use”.
Basically, you code the smallest working bit of a feature and then add the according tests to ensure that whatever you coded worked. Some of the benefits of unit testing include:
- Easy to spot problems early.
- Because you “test as you go”, it’s easier to identify if some bit of code is not working properly.
- Facilitates debugging.
- When something breaks, you can focus on review a specific module as opposed to debugging the entire system, because all previous components have already been tested.
- Better design.
- Writing a unit test for your code forces you to think through the functional design of the code you are writing. It challenges you to think through the alternative implementations and consider the limitations of each of them.
Putting it all together
Managed properly, your software development development can become effective at building meaningful products for your customers in an iterative, incremental way; maximizing the likelihood that whatever you build satisfies your customer’s needs and empowers them to achieve their desired outcome.
For more on the process of Agile & Scrum, check out:
In the previous stages of the Product Development process you had:
- Researched your customer and identified their desired outcomes.
- Created visual prototypes of your intended solution.
The goal of this post was to guide you from the process of breaking down the proposed solution into a series of smaller deliverables and putting those through an incremental software development process. In small increments, you define, develop, and test your working product to ensure it matches the initial desired functionality of the solution.