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.

Communication and goal setting

What does communication has to do with goal setting and achievement? Do you know the answer? Well, there are of course different points of view when we look at each of these three concepts.

On the first hand communication can be used as a mean to transfer information from A to B to be able to do something related to goal X. This means that communication is a tool you are using in the process of goal achievement.

In this context we have to have a very clear understanding of what is a goal. Goals are very often mixed with the means we use to achieve the real goals. In other words, there are End goals and Means goals. End goals are absolute goals that we are looking forward to achieve in a while. Means goals are the tools that are bringing us closer to End goals. That brings us to the fact that we can change the tools we are using on our way to reach the goal. Many human beings are usually ignoring this fact. Thus, it is causing huge discomfort in their lives.

If that is not clear yet, let us then look at the following example to distinguish a means goal from an End goal!

Let us say: I am setting up a goal of “running own business”. Thinking about this goal, we all agree that to be able to run own business one must have a given amount of knowledge. Now knowledge is not the goal and is a very abstract word. But at the same time it can be expressed as “number of books one reads in a month. This makes the abstract attribute quantifiable and lets us think in the following way:

To be able to build up knowledge that allows me to run my own business I have to borrow and read 2 books from the library.

Did you notice the logic? We have the end goal “run my own business”, one needed instrument to achieve this goal “knowledge” and the means “borrow and read 2 books”.

Now you know what is the End goal and what is the Means goal. Let us think again, is it possible to gain knowledge in a different way? The answer is: of course, it is possible. You see. Means goals can be changed without affecting the end goal. There might be many different ways of reaching the end goal. Therefore, we should focus our energy on the end goals and have a pragmatic relationship to the means we are using to reach the end goals. Easy? Nope, but possible.

What means should you use to achieve your goals depends on the impact each tool has on the goals you have. Maybe we can discuss that in a separate post.

Going back to the start of this post. The most important thing when it comes to achieving goals is that you communicate your end goals to yourself and to the others around you and be open minded when it comes to the means goals

5 steps to effective communication

As pomised in my last post, this post will discuss communication in more depth. If you look at the image attached to this post (I borrowed it from Tarun’s Blog) you will see the importance of effective communication.

To be able to communicate effectively, you have to:

  1. Be yourself
  2. Color your message with your mission and values
  3. Listen with your body
  4. Show your point of view
  5. Learn, rehearse and improve

Be yourself: This means that you must stand out, show who you are in terms of mission and values. With other words, you have to show your authentic self. Do not look like someone, but be the one you are! Be real!

Color your message with your mission and values: If you just discuss a case without really believing in it yourself, you will not get others to believe in it neither. You have therefore to use your values and merge these into the message. Base your examples in the discussion/communication on your values and beliefs. This will strengthen your message and make more authentic.

Listen with your eyes and body, not only with your ears: To communicate with other you have to be open and listen. Communication is a two ways transfer of information that happens in a special context. To call this action “Effective communication” we have to ensure that the parties participating in the action and transferring messages to each other understand the context.

To understand this context, you have to stop and listen. Listening is not done only by the ears. The ears hear only the words and translate the tones a communication part is producing. This is only a small part of the context of the total action of communication. When you, in addition to your ears, use your eyes and listen to the body language, you enrich the channels that are bringing the words into your brain. Many parts of the context get connected and the words get a better content.

Using this way of listening, you get not only the words that are said, but also you are able to read between the lines.

Show your point of view: Take a position! Nobody is able to persuade others of his thoughts if he does not have a clear and potent point of view. Your point of view brings together your mission and values. It highlights your attitude and shows why things should be done in the way you think is right.

Learn, rehearse and improve: Strive to become a better communicator. Communication is the tool that enables you to get your wishes fulfilled no matter what these are. Focus on continuous improvements in your communication. When you experience a successful or a failing communication. Inspect what happened, analyze the way the communication has happened and the context it happened in. rehearse and improve your way of telling your story the next time you need to bring a message to somebody!

When you master these five Principles, your become a master and can communicate with others with ease. I can guarantee you that life will become much easier and you will achieve more.

The art of Communication

Now the whole world had one language and a common speech. As people moved eastward, they found a plain in Shinar and settled there.

They said to each other, “Come, let’s make bricks and bake them thoroughly.” They used brick instead of stone, and tar for mortar. Then they said, “Come, let us build ourselves a city, with a tower that reaches to the heavens, so that we may make a name for ourselves; otherwise we will be scattered over the face of the whole earth.”

But the Lord came down to see the city and the tower the people were building. The Lord said, “If as one people speaking the same language they have begun to do this, then nothing they plan to do will be impossible for them. Come, let us go down and confuse their language so they will not understand each other.”

So the Lord scattered them from there over all the earth, and they stopped building the city.

Bible- Genesis 11:1-8

I love the book called The Mythyical Man-Month (by Fredrick P. Brooks) which has discussed this in pretty good details. The author of the book raised the following question: Why did the Tower of Babel failed?

Further he continued saying: How well was that project equipped with the prerequisites for success? Did they have:

  1. A clear mission? Yes
  2. Manpower? Plenty of it
  3. Materials? They had abundances of clay and asphalt
  4. Enough time? Yes, there were no constraints
  5. Technology? Yes, the Pyramidal structure is stable, well tested and fully understood

The author continues: If they had all of these things, why did the project fail then?

He concludes then: They lack communication since their languages became confused and they did not understand each other. They were unable to talk to each other, hence they could not coordinate, thus, work on ground halted.

Communication is not only talking the same language, but also ensuring that the one who listens to your words understands what you want her to understand. This means that words taken away from their context can mean very different things. Context is not only the case these words are related to, but also includes who has said these words, who is the recipient and what feelings are involved during the submission of the message.

A funny example of this is to think about how you would react if you are sitting in a room and one of your important business relations says: It is hot here could anyone open a window? Would you run to the window and open it?

Ok, then Visualize the same scenario, but this time replace your business relation with your mother in law. How would you react? What would you think?

Delivering messages within the right context can mean success or failure in most cases. Many times it is more important than the message itself.

I will not dive deeper in the topic this time, but promise to come back with a longer post on this subject.

Are you working in a team or in a group of people?

Often we see people working together. When we are introduced to them, they present themselves as a team. We think also that they are a team.

However, when looking closer at these people we see that they have different goals, operating on different agendas, level of responsibility among them is diverged. We see that there is one who is assigning work to everybody. This person has taken over the responsibility and is making sure the work gets done. Each individual has a different commitment to accomplishing the common goals. They form a group of people working together and not a team.

So what does it take to form a team?

We know that great teams comply to at least the following:

  • Team members are passionate
  • They trust each other and do not have to guard each word in their discussions
  • They are willing to sacrifice for the success of the team
  • They do whatever it takes to prevent letting their peers down
  • They do not seek credit for their own contributions

Some more points can lengthen the list above. I think these are some of the most essential points I look for in a team.

It is possible to transform a group of people working together into a team that create magic. To make this happen, we need to ensure that each individual gets the skills needed to work in a team and identify herself with the common goals and objectives. Easy? No, teamwork is an individual skill used with a collaborative mindset.

How to reduce waste by increasing your speed

When we estimate the time needed to get something done in a process we usually divide the number of things to do by the average rate of completion. We call the resulting number Cycle Time. With other words, Cycle Time is the average amount of time it takes to get a thing through a process. We call this equation Little’s law.

Little’s law apply for all stable systems. In real life, we know that things happen. When things happen systems get unstable and it becomes more and more difficult to predict Cycle Time. Many teams and projects suffer from this disease. Projects get their budget overrun. Teams are unable to answer when they can be done. In software development, people are also used to say; we are doing creative work and we cannot estimate.

In common sense thinking, read Lean and Agile, we seek to shorten the feedback flow so we are able to adjust the system. For example; when integrating two pieces of work done by two different teams or persons, we may need a week of work. The number of things that can go wrong is big and introduces much unpredictability to the system.

On the other hand, if we integrate the work more often, we deal with a shorter list of things that can go wrong. Hence, we can predict Cycle Time more accurately and manage to deliver both estimates and plans that can be met. Said in another way:

We reduce waste by increasing our speed and do small things in a great way!

Steps to follow to reduce waste by increasing speed:

  • Establish a filter for incoming work
  • Based on your capacity:
    • Minimize number of work items in progress
    • Minimize the size of each item
  • Iterate: Check your progress regularly and learn from your mistakes and successes

Our ultimate goal is to have a steady flow of features into the system. When this is achieved, your production is in good health.

If you are unsure of how to implement the steps mentioned earlier, please contact me and I will be glad to offer you some help.

How to build scalable teams

When observing IT development teams we still see that many companies are still using Component teams as the main way of doing Software development.

Component team is a team of people working with only one component of the whole system. They become experts of this component and can do quick development and fixes to this component. Many still think this is the most optimal way of developing software. Unfortunately, we see that making this kind of sub optimization does not result in an optimal system. Often the time saved by using components experts is multiplied by 2 or more and wasted getting different components to work together in an optimal way. This means sub optimization results in waste instead of saving(see Larman&Vodde). In addition, the overall architecture of the system is effected since those experts do not understand the rest of the system they are developing for.

Some other organizations are not building teams, but look at employees as a pool of resources that can be shuffled and compound differently based on this minutes necessities. This approach result in people specializing in a narrow technology since different persons will find their favorites among all development tasks and in a natural way grap the tasks they like work with mostly. The result will be lack of knowledge exchange that results in long term loss for the company and degradation of the skills gained by the employees.

Summarized these approaches result in:

  • Reduced communication cross all layers of the system
  • Ending development cycles takes very long time since much efforts must be applied to integrate components and functionality.

The answer to these challenges is organizing people in Feature teams that are multifunctional. The most important attributes for such teams are:

  • Different roles are included in the team, development, testing, business analysis etc.
  • Coordination of the whole requirement happens locally in the team
  • No handing off before a completed requirement is DONE
  • Broader skills and system knowledge

To be able to scale your development capacity, it is essential to build feature teams. You can achieve that by:

  • Reorganizing your existing component teams into cross components or requirement area-feature teams
  • Then gradually expand the team responsibilities

If you are not sure how to achieve this or need help in making it happen at your organization, please let me know and I will be glad to help you to the next level!

3 steps to succeed faster

Making wrong decisions or taking wrong steps late in a project or a business matter cost companies huge sums these days. The reason for such huge cost is that we put many hours of efforts and endless development time before we really try out the idea we have. In a way, we do not see and recognize our mistakes made early in the process before it is too late.

Fortunately, methodologies within business development and not at least software development called LEAN and Agile are trying to reduce this waste by asking us to “Fail fast”.

You wonder how can this help? The easy answer is to compare this with how babies learn to walk. Babies try to stand on their feet and walk. They fall down many times. They retry and learn from the earlier steps until they manage to take few steps. Sometimes they even use different kinds of support. Then they tune the knowledge they have gained so they can make the walking more elegant.

In the same way, you should seek to find weaknesses in your work very early in the process. Make the mistake and get the knowledge associated with it, adjust your course and move on. With other words, by failing fast you succeed faster.

The reason of failure is usually associated with people doing a job without knowing what the customer on the other end really wants or by making a guess that the customer or the market need my services. An easy, yet very little used way of getting rid of this issue is to use the law of GOYA, Get Off Your Ass. Get out and socialize with your target group. They will tell you what they need.

Of course, there are sometimes a need to guess what the market needs. In such cases, you should run a validation test as early as possible to validate your thoughts, get feedback so you can convert your ideas into profit.

In summary, to succeed you should try to iterate on your plan:

  1. Divide your large plan in smaller plans
  2. For each small plan
    1. Build
    2. Test what you have built
    3. Adjust
    4. Repeat steps
  3. Move to next

If you need assistance to succeed faster, please let me know and I will be grateful to see you succeed!