CS 530 - Advanced Software Engineering

Software Products

Reference: Sommerville, Engineering Software Products, Chapter 1

 

Software products

Software products are generic software systems that provide functionality that is useful to a range of customers. Many different types of products are available from large-scale business systems (e.g. MS Excel) through personal products (e.g. Evernote) to simple mobile phone apps and games (e.g. Sudoku). Software product engineering methods and techniques have evolved from software engineering techniques that support the development of one-off, custom software systems. Custom software systems are still important for large businesses, government and public bodies. They are developed in dedicated software projects.

Project-based vs product-based software engineering

Project-based software engineering

The starting point for the software development is a set of 'software requirements' that are owned by an external client and which set out what they want a software system to do to support their business processes. The software is developed by a software company (the contractor) who design and implement a system that delivers functionality to meet the requirements. The customer may change the requirements at any time in response to business changes (they usually do). The contractor must change the software to reflect these requirements changes. Custom software usually has a long-lifetime (10 years or more) and it must be supported over that lifetime.

Product software engineering

The starting point for product development is a business opportunity that is identified by individuals or a company. They develop a software product to take advantage of this opportunity and sell this to customers. The company who identified the opportunity design and implement a set of software features that realize the opportunity and that will be useful to customers. The software development company are responsible for deciding on the development timescale, what features to include and when the product should change. Rapid delivery of software products is essential to capture the market for that type of product.

Software product execution models:

The product vision

The starting point for software product development is a 'product vision'. Product visions are simple statements that define the essence of the product to be developed. The product vision should answer three fundamental questions: What is the product to be developed? Who are the target customers and users? Why should customers buy this product?

Moore's product vision template:
      FOR (target customer)
      WHO (statement of the need or opportunity)
      The (PRODUCT NAME) is a (product category)
      THAT (key benefit, compelling reason to buy)
      UNLIKE (primary competitive alternative)
      OUR PRODUCT (statement of primary differentiation)

Information sources for developing a product vision:

Software product management

Software product management is a business activity that focuses on the software products developed and sold by the business. Product managers (PMs) take overall responsibility for the product and are involved in planning, development and product marketing. Product managers are the interface between the organization, its customers and the software development team. They are involved at all stages of a product's lifetime from initial conception through to withdrawal of the product from the market. Product managers must look outward to customers and potential customers rather than focus on the software being developed.

Product management concerns:

Technical interactions of product managers:

Product prototyping

Product prototyping is the process of developing an early version of a product to test your ideas and to convince yourself and company funders that your product has real market potential. You may be able to write an inspiring product vision, but your potential users can only really relate to your product when they see a working version of your software. They can point out what they like and don't like about it and make suggestions for new features. A prototype may be also used to help identify fundamental software components or services and to test technology. Building a prototype should be the first thing that you do when developing a software product. Your aim should be to have a working version of your software that can be used to demonstrate its key features. You should always plan to throw-away the prototype after development and to re-implement the software, taking account of issues such as security and reliability.

Two-stage prototyping:

Useful links