What is needed to produce a succesful software product?

History shows that we are still trying and failing when aiming to produce new software products, maintaining existing products or just running a project. In my articles, I am trying to share some of my experience (almost 3 decades) from the Software development industry. In this industry, I have and still play many different roles. Everything I refer to in my articles is based on my real world experience and lessons learnt from both achievements and failures.

To get us started, let us say: You have now decided to create a new product or maintain an existing one. Of course, you need somebody to bring your dreams into reality. In some cases management decide just to start a project utilizing existing resources no matter who these are as long as they are software developers. After some months, hopefully not years, management realizes that the project is failing because of scope creep, a lot of bugs and not at least a lot of unwanted functionality. Experiences from software development shows that there is a set of roles that have to be present to guarantee success. Somebody will say, let us do it the agile way, lean way or waterfall way. I say; please forget the methodologies for a short while and think about your basic instincts! To build a house you need people with different skills, not only construction workers. To make a cake you need also different ingredients/skills. There is no difference from that in Software development. To create a successful software product you need to have certain skills present and mixed up in right portions. Here is my description of the skills and roles needed:

We have different roles that cover all aspects necessary to develop successful products. The sections below I am describing areas of responsibilities and how they contribute in the creation of products.

Common for all projects and products is that they have a sponsor, an implementer and a user. How strongly each of these three key roles is represented depends on the nature of the project and organizational demands.

The Product owner, Project manager and development team members are committed to build the desired software product. Everyone else (stakeholders and users) are encouraged to take part in the process by testing product increments and attending regular reviews and give their feedback on the output created by the team. Not all roles are needed to be present in single persons. Some persons can combine different roles. If this is present in a team the person who holds more than one role should be very clear on what is she/he presenting when talking with other team members. My advice; avoid having more than one role in one person!

What is a product owner?

This the person responsible for the Return of Investment (ROI) of the product. The Product Owner is representing everyone’s interest in the product and is responsible for delivering a value higher than the cost of developing it.

The Product Owner owns the deliverable also after the delivery itself. In terms of project responsibilities, the Product Owner’s role is to gain a high-level understanding and prioritize the functional, non-functional and creative requirements for the project. The Product Owner is responsible for ensuring that the functionality that is prioritized, developed and implemented meets the needs of the business and derives business benefits particularly in terms of return on investment (ROI).

Steering group or advisory group

The main responsibility for such group is to provide advice and recommendations to the project so that it creates good business that is ethical, effective and strategically aligned. As in traditional software projects, main focus for this group should be on Value creation, Innovation and Flexibility while keeping in mind Cost, Time and Scope.

Members in this group should be selected based on their ability and authority to make strategic advises and recommendations. These should share a common purpose no matter if their opinions and agendas are not aligned.

Project Manager (Scrum master/ Team leader)

The Project Manager is responsible to lead the development team and lead the project on budget and time. The PM is also responsible for ensuring that the process used follows the company procedures and contributes to maximize value creation. She or he will facilitate for the team so team members learn to work together, self-manage, work cross-functionally and work closely with the Product Owner. The project manager is responsible for making sure the team is developing as a team to be self-functioning.

The project team

This is a cross-functional group of people with the different skills that are needed to turn requirements into something that is an increment of potentially shippable functionality. It typically consists of a Business analyst, a designer, a QA person (tester), a developer and occasionally people from IT, Architecture and Data management to create necessary infrastructure. All skills to turn the requirements into a usable product or functionality should be covered in the project team.

  • This team actually commits to the Product Owner what they will do every iteration and then does it. At the end of the iteration they show it to the Product Owner and then the Product Owner can decide what to do next.

User Interface & Usability designer

UI/UX designer have an important role in the product design process to make user-centered product and optimize user experience. This means involving designer from the early stage of product design. Being involved in research, user interviews, and requirements gathering is critical to ensure product success. Idea sketching and iterations with users and/or stakeholders is a very effective way of filtering out ideas and coming up with solutions.

Business analyst

The business analyst is the domain expert for the product and is very important to ensure success of a project. This is the Subject Matter Expert who plays a central role in converting specifications into functionality. She needs to understand the customers and the business requirements and have skills to communicate these to the development team.

The Product Backlog, the list of features to be implemented prioritized by the product owner can create a basis for the conversations in the team. Close to implementation, items from this list get more detailed. Big stories will be broken down into smaller ones, then stories will be enriched with acceptance criteria, implementation considerations, UI sketches, etc..

The Business analyst will be discussing with the development team details for implementing features and protocoling the decisions. This discussion takes place shortly before the feature is implemented, so the discussion is fresh in everyone’s mind when the feature is actually coded and implemented. This role can also be thought of as a proxy product owner.

Tester

The tester works with everyone in the team in order to improve product quality as early as possible. Skilled, thoughtful, and analytical testing is required to go far beyond finding bugs and reporting these into bug tracking system. Responsibilities for the role includes analysis, test-scripts design, and execution. The tester is involved right from the project initiation stage up to when it is closed. The tester ensures that quality integrated into a product by working closely with the product owner. This helps the tester get more details out of the story cards. It will be difficult for the development team to meet the acceptance criteria and consider a story “done” if the tester does not engage the product owner.

Architect

The architect is responsible for defining and maintaining the overall design, structure and architecture of the solution. This is to ensure that the provided solutions fulfill both functional and non-functional requirements in an easy to maintain coherent structure

The architect designs and formulates solution structures that implement high quality software and meet various functional and non-functional requirements. This includes the authority to decide on:

o  Design principles, and patterns to use

o  Technologies, tools and standards

o  Key solutions like layers, loggers etc.

Developer

The developer is responsible for turning specifications and requirements into a usable software code that is both correct, well documented and tested. This means a developer must also write unit tests ensuring that the code is stable and can tolerate changes made later without breaking down the system.

Introduction to the science of prioritization

What to do first; this is the question!

There are only 24 hours a day. Time is money and you can not value things equally. Something brings you more value, other things are urgent while something else should be done sooner or later. How to set priorities and know that these priorities are the right ones before you start executing on them? This is the question we will answer in this article.

Growing a business, doing a project or just living life, needs you to prioritize what to do and have faith that you are doing the right thing. Prioritization is sometimes dictated by the situation based on urgency and importance. If there is a fire, you need to fight that before you look for the root cause. Anyway, you must not forget about the root cause. You need to fix it. Not all fires need to be fought neither, right? From time to time it is also right to let the fire burn out and die while we are targeting our resources and time on other tasks. Experience makes you judge the situation correctly and decide on when to fix and when to let go.

Here is my overarching framework for making priorities:

1- Focus on the bigger picture (topics not tasks) while prioritizing and evaluating and on tasks while executing

The devil is always in the details. If we focus on details, we may get stuck and never move on. First step toward correct prioritization is to decide what Topics you want get implemented based on three factors:

  • Importance: Not everything we do have the same importance. We also need to do unimportant things from time to time. We have just to be aware of the importance of what we chose to do
  • Urgency: These are things that can harm us if we postpone or do not do at all
  • Growth potential: Things that can bring us one or more steps toward our goals should get more focus.

It is very natural that we give highest priority to a topic that contributes well to our growth, is an important matter to implement and needs to be done sooner than later.

2- Decide on a range of satisfaction for each topic, accept results within that range and move on to next topic.

Trying to do everything 100% perfect all the time is wasting resources and to be honest also impossible. Many professionals and companies cause a lot of harm to their business by trying to be perfect. Each result we are looking for should be defined as a range with lower, upper and acceptable limits. We should head toward the acceptable limits, but can sometimes be satisfied with the lower limits in case of time or resource limitations. This is not the same as producing mediocre results, but good enough without doing things that are not adding value, gold platting.

3- Give the harder things higher priorities than easier things. You reduce procrastination and increase the energy level in what you do

Mission critical things are usually hard. These must not be standing on your waiting list while you are only doing things you enjoy and are easy to achieve. Try to break down harder tasks into doables, make sure you are focused on them and make them happen before you go over to easier tasks.

4- Fix bugs, but admit also that you need to rethink the whole solution if number of bugs and issues is so huge(change the boat instead of plugging it)

Trying to fix a leaking boat may be wise, but may also be the wrong thing to focus on. Judge the Topic and its nature! If you do not believe it is possible to fix within acceptable cost, let it die and establish a replacement!

An example from the software industry may be trying to fix a buggy application. After some years of development by various software developers applications have tendency to contain a lot of bugs. You fix somewhere and discover new bugs somewhere else. Like boats that are leaking all the time. In such cases it is better to save your resources and focus on creating a replacement.

To summarize things, you need to collect a list of “to dos”, decide on their importance, urgency, efforts needed in sense of time and hardness, expected results and quality. If you manage to quantify these measures you can easily set your priorities. Of course the more you exercise with priorities the better goal achiever you become.