When a company opts for diversification, team organization tends to be simpler. For each product, there will be a single team of engineers (2-8 people, which can be back-end or front-end or full-stack, depending on your product needs), plus a SysAdmin (system administrator), or up to 9 people in engineering. In addition, it will have 1-2 UX people, one of whom will focus more on visual design, and ultimately a product manager. This is the core team of the product we commented in the article What is digital product management?.
It can often happen that some people on the team are shared with other products. Top candidates to share are the visual designer, product manager, SysAdmin, and front-end engineer. Back-end engineers should not be shared.
It is important to remember that by sharing a person between two products, her attention will be shared, which has both strengths and weaknesses. The obvious downside is that she will pay less attention to each of the products she cares for. On the other hand, the fact that she lives two realities, that is, taking care of two products, can make her bring good practices from one team to the other (and vice versa).
However, even if there is this positive point, there are other ways to exchange good practices without sacrificing a shared person’s time and attention. Therefore, the best thing to do is not to share people between two products. Of course, if you have financial constraints, this division between products is acceptable, but try to consider this a temporary situation.
Sharing people between more than two products is extremely inadvisable. The maximum acceptable share is two, and this will already have a considerable impact on attention, productivity, and quality.
Another important point of this type of structure is the importance of maintaining functional cohesion. This can be done through functional leadership, or functional self-organization.
Functional cohesion is important to ensure that there is consistency between team work, and that each one learns from the other’s good practices. Otherwise, each team will make a product that will look, not only from a different team, but from a different company!
At Locaweb, we choose to maintain cohesion through functional leadership. We have leaders in UX, product management and engineering. This guarantees us a good consistency between different products. For example, we created interaction patterns, Locaweb Style, so all Locaweb products have an equal interaction pattern. An Email Marketing product customer knows that when using the Backup product, he will not have to learn the interaction all over again. Locaweb Style is available as open source.
When your product grows – whether in a single-product company or one with a diverse portfolio – the questions begin about how to get organized. This usually takes longer in companies with a diversified product portfolio, because whenever a particular team grows a little, there is a desire to get some people from it to focus on a new product.
In a single product-focused company, the need to organize large teams happens very quickly. It is not difficult to imagine more than 8 engineers available to work on a product and, as we saw earlier, each product team must have a maximum of 6 to 8 engineers. How to organize with larger teams?
The product should be broken into subsystems. These will certainly have some kind of integration and interdependence, but their architectures should be such that interdependence is minimal to make the integration layer as simple as possible. Each of these teams will need back-end and front-end engineers, UX, SysAdmin, and product manager. Because they are subsystems of the same product, these teams may eventually share the same product manager, the same UX, and the same SysAdmin. Here, sharing is a bit more acceptable and sharing may exist in up to 2 subsystems.
However, you must be careful that these people shared between more than one subsystem do not see bottlenecks. The ideal is to have people 100% dedicated to each one. In this ideal scenario, where each member of the teams taking care of each subsystem is 100% dedicated, it is very important for someone to have an overview to help coordinate work between teams. As mentioned, it is important to minimize the interdependence of these subsystems, but some dependency will always exist, and this will need to be coordinated. Eventually, a product manager may be needed to help with this coordination. Ideally, we should have a product manager, an engineering manager who tracks the work of all engineering teams, and a UX manager to help coordinate the work of each subsystem’s UX designers.
For example, the Website Hosting product is divided into 7 developer teams that focus on different product subsystems. One team works on the development of the hosting control panel; and another works on the provisioning subsystem, which is responsible for installing, suspending, and uninstalling the components that make up Locaweb Website Hosting, that is, the hosting itself – which may be Linux or Windows, the database, and the email.
So, another team takes care of the e-mail control panel and webmail, and finally 4 more teams take care of the subsystems connected directly to the infrastructure, which are the Linux, Windows, database, email and database infrastructure teams. We have two product managers for all of these teams: one focused on website hosting subsystems, the other focused on email subsystems. We also have two UX designers, with the same focus separation, plus a product manager, one UX designer, and one engineering team.
Another good example on a considerably larger scale is Spotify, a music streaming application created in Sweden in 2008, which has over 75 million users according to June 2015 data. The company has over 1,500 employees, all dedicated to one product, and most of them are part of the product development team.
They posted two videos telling a little about their culture and how they organize themselves. It’s worth watching them! They can be found at https://vimeo.com/85490944 and https://vimeo.com/94950270.
Spotify Engineering Culture – part 1 from Spotify Training & Development on Vimeo.
Spotify Engineering Culture – part 2 from Spotify Training & Development on Vimeo.
When this chapter was published on my blog, I received some comments about the lack of QA (Quality Assurance) role in team organization. Therefore, I decided to include some considerations on the subject here.
However, before considering, I would like to quote a very nice phrase I once heard that should be remembered whenever conversations about different points of view take place: the fact that we disagree does not necessarily mean that one of the two is wrong.
What’s the point?
In my view, processes, methodologies and ways of organizing a team are not the goal itself, but the means, the tools to achieve a goal. In the case of software, the goal is usually to meet the strategic goals of the software owner while solving problems and needs of users of that software.
QA (and Front-End and BA) at Locaweb
Until the middle of the second half of 2015, we had product engineering teams at Locaweb, one team for each or two products. We also had two separate functional teams from these product engineering teams, the front-end and QA teams. At the end of 2015, we decided not to have a front-end team or QA anymore.
About the Front-End Team
About the QA Team
When I joined Conta Azul in August 2016, I learned that they had also extinguished their role as QA earlier that year. The motivation was a series of visits they made to Silicon Valley companies and realized that they did not use QAs and that everyone on the team was responsible for the quality of the software developed. At Conta Azul, QAs made the career change to BAs.
Another question I received when I published the text of the previous chapter was about the absence of BA (Business Analyst). I did not explicitly state BA, as BA and PO are similar roles in software development. The differences were explained in the BA, PO and PM article. However, both have the same goal: to help the team make software that meets the software owner’s goals while solving their users’ problems and needs.
In some organizations, it may happen that BA is focused exclusively on business, that is, understanding only what the business objectives are, leaving aside the problems and needs of users. In this case, it is important for BA to also take into account the problems and needs of software users, balancing them with business objectives.
In this article, I showed you how to organize your product development team depending on whether your strategy is to diversify your product portfolio or focus on a single product. I even explained the absence of QA and BA in my recommendations on organizing product and system development teams.
Remember that processes, methodologies, and ways of organizing a team are not the goal in itself, but the means, the tools to achieve a goal. In the case of software, the goal is usually to meet the strategic goals of the software owner while solving problems and needs of the users of that software.
Do you work with digital products? Do you want to know more about how to manage a digital product to increase its chances of success? Check out my new bundle Digital Product Management with my 2 books where I share what I learned during my almost 30 years of experience in creating and managing digital products.