Organizational Bias in Software Architecture

Organizational structure can bias the software architecture and lead to sub-optimal solutions. Why not align the organization with the architecture?

The architecture of a system tends to mirror the structure of the organization that created it. This idea was introduced by Melvin Conway way back in 1967 and still holds true today. Organizational bias to the architecture can be mitigated through awareness and with flatter, more flexible organizational structures.

Conway cited an example where eight people were assigned to develop a COBOL and an ALGOL compiler. After some initial estimates of difficulty and time, five people were assigned to the COBOL job and three to the ALGOL job. The resulting COBOL compiler ran in five phases, the ALGOL compiler ran in three! That probably wasn’t an optimal design and was clearly aligned with the organizational structure.

I’ll discuss a few other scenarios where Conway’s Law has manifested: website design, API architecture, and microservices architecture.

Website Design

The most obvious modern-day manifestation of Conway’s Law is in website design. We’ve all seen corporate websites that mirror the organizational structure of the company rather than follow a user-optimized design. What typically happens is that each organization develops and contributes its own content to the website and these pieces are then assembled together.

Home page
    - Division A webpages
    - Division B webpages
    - Division C webpages
Boeing website organized by divisions

A website user may not care about how the company is organized. She just wants a great website user experience. Also, how easily is the website maintained when there is an organizational restructuring?

API Architecture

We also sometimes see organizational structure reflected in API design. Take this example presented by Matthew Reinbold. Suppose that Team A creates a Users API as follows.

/users/{userId}/preferences

"preferences" : {
    "language" : "EN-US",
    "avatar" : "my-avatar.gif",
    "default-page : "settings"
}

Clearly, the intention is to have all the user’s preferences accessible via the “preferences” resource. Now suppose that sometime later, Team B is given the responsibility to develop a new feature that allows users to customize the sort order for their search pages and they need a place to save the user’s sort preferences. Because no one on Team B knows anyone on Team A, they are separated by a few time zones, don’t have the ability to add a high priority item to Team A’s backlog, and are on a tight schedule, they decide to create a new API under “preferences” and call it “sort.” They don’t need to involve Team A and can get this done very quickly. So they come up with something like this.

/users/{userId}/preferences/sort

"sort" : {
    "order" : "ascending"
}

The problem here is that even though this single design transgression in of itself doesn’t seem a big deal, it can proliferate and you can end up with a very chatty API like this that is difficult for clients to consume.

/users/{userId}/preferences/ooo
/users/{userId}/preferences/manager
/users/{userId}/preferences/timezone
/users/{userId}/preferences/signature

Microservices Architecture

If software development is functionally organized as in UI (front end), Services (back end), and Database teams, there will be an architectural bias along these lines. This can lead to sub-optimal microservices architectures. Ideally, there would be cross-functional teams with each team responsible for one or more microservices. James Lewis and Martin Fowler published an article on this topic.

With a functional organization as described above, there will be a bias for each team to address features within their functional area rather than across functional areas. You may end up with business logic in each layer of the architecture. Your services may not be as encapsulated as you would like.

Decoupling Architecture from Organization

So what can we do to avoid the pitfalls of Conway’s Law? I think the first step is awareness. Just like we need to be aware of other biases like confirmation bias and survivorship bias, an awareness of organizational bias can help our teams to actively work against it. But the organizational structure itself is a large factor.

  1. The flatter the organizational structure, the less likely it will bias the architecture. The flatter organizational structure should provide more of a blank sheet of paper rather than a set of constraints.
  2. The more flexible the organizational structure, the less likely it will bias the architecture. My view is that the organizational structure should mirror the architecture and not vice versa. Do the architecture first, then organize around it.
  3. The more communication within the organization, the less likely it will bias the architecture. If everyone knows what architecture decisions are made, there is a better chance that someone will speak up when Conway’s Law rears its ugly head, especially if awareness is raised throughout the organization.

Conclusion

Although Conway’s Law has been widely known in the software development community for many years, we still continue to see sub-optimal architectures biased by organizational structure. Software architecture organizational bias has manifested itself in many different scenarios including website design, API architecture, microservices architecture.

Organizational awareness is the first step to mitigate this and simple anecdotes can be included in group meetings and training sessions. But even better is to have a relatively flat organization with the flexibility to organize around the architecture of the product that is being developed.

In closing, I recently re-read Conway’s original paper, and found another somewhat humorous aphorism buried within. I’ll leave it here without further comment.

“Probably the greatest single common factor behind many poorly designed systems now in existence has been the availability of a design organization in need of work.”

Melvin Conway, 1967

Image credit Manu Cornet

What Makes a Good Manager?

The success of a company is largely determined by the quality of its management team. Thousands of authors have written on this topic over many decades. In this post, I’ll discuss Google’s approach to management as presented in the 2015 book, Work Rules!, by Lazlo Bock. Mr. Bock was SVP of People Operations at Google.

Eight Key Attributes of Good Managers

After extensive surveying and analysis, Google’s Project Oxygen Group identified eight key attributes of good managers.

  1. Be a good coach.
  2. Empower the team and do not micromanage.
  3. Express interest/concern for team members’ success and personal well-being.
  4. Be very productive/results-oriented.
  5. Be a good communicator – listen and share information.
  6. Help the team with career development.
  7. Have a clear vision/strategy for the team.
  8. Have important technical skills that help advise the team.

Providing Managers With Upward Feedback

Google continuously improves the performance of its managers with respect to these attributes by providing them feedback from their employees through bi-annual upward feedback surveys that ask the following questions.

  1. I would recommend my manager to others.
  2. My manager assigns stretch opportunities to help me develop in my career.
  3. My manager communicates clear goals for our team.
  4. My manager gives me actionable feedback on a regular basis.
  5. My manager provides the autonomy I need to do my job (i.e., does not “micro-manage” by getting involved in details that should be handled at other levels).
  6. My manager consistently shows consideration for me as a person.
  7. My manager keeps the team focused on priorities, even when it’s difficult (e.g., declining or deprioritizing other projects).
  8. My manager regularly shares relevant information from their manager and senior leadership.
  9. My manager has had a meaningful discussion with me about my career development in the past six months.
  10. My manager has the technical expertise (e.g., technical judgment in Tech, selling in Sales, accounting in Finance) required to effectively manage me.
  11. The actions of my manager show they value the perspective I bring to the team, even if it is different from their own.
  12. My manager makes tough decisions effectively (e.g., decisions involving multiple teams, competing priorities).
  13. My manager effectively collaborates across boundaries (e.g., team, organizational).
  14. What would you recommend your manager keep doing?
  15. What would you have your manager change?

Manager Performance Results

In a two-year period at Google, overall scores went from 83% to 88% favorable and the worst managers went from 70% to 77% favorable. That’s an impressive result. Google put a lot of effort into discovering what makes a person a great manager and how to encourage their managers become better managers. While every company is different, why not start with this and then make any necessary adjustments for your specific culture/environment?

Coaching versus Micromanaging

Google’s second “Good Manager” attribute is to empower the team and not micromanage. Managers dread being labeled as micromanagers because of the negative connotations (i.e., “no one wants to work for a micromanager”). Micromanagers tend to exhibit the following behaviors.

  1. Tell employees how to do things rather than what to do.
  2. Perform tasks and make decisions themselves rather than delegating to their employees.

I think it is important to understand the relationship between coaching and micromanaging. Take for example the Apprenticeship Model (i.e., apprentice, journeyman, master) as it relates to a technology organization. If a manager has an employee who is operating at the apprentice level in a certain area, it is entirely appropriate to “micromanage” them as a coaching tactic until they gain experience and knowledge enough to perform certain tasks on their own.

Advising versus Micromanaging

Google’s eighth “Good Manager” attribute is to have important technical skills to help advise the team. Sometimes there is a fine line between advising and telling the team what to do. I’ve found that the best approach is to ask questions rather than telling people what to do. Asking the right questions can guide people’s thinking and help them arrive at the best solutions.

Conclusions

I think that Google’s upward feedback survey is a great way to evaluate managers and help them improve. But care must be taken when evaluating coaching and advising behaviors versus micromanaging.