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.
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.
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.
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.
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.