June 19, 2018

Software at scale

Of building something big

Image by Leo Fosdal

Lately I have been working with a huge project that spans multiple continents, keeps over couple of hundred software professionals busy and is actually managed by agile practices. Keeping this kind of a project up and running and steering it to the right direction is not an easy feat so I thought that sharing some lessons learned could benefit other fellow practitioners.

I’ll write about three main points that are crucial for the success of a large scale software project:

  • organisation
  • leadership
  • people.

Oiling the machine

With growing number of people in a project organisation comes also a challenge. Organising work of a team can be easy but doing that for ten or more teams is not. There are some traditional approaches to solve this, but I personally have seen better results with empowering individual teams to make their own decisions.

A man with a tie

Yeah, let’s add more middle management! Image by Ben Rosett.

Traditional way of responding to the growth of an organisation is to add more middle management, layers to the organisation that ease the burden of top management. But is the “more of the same” approach with management really the best option to structure the organisation and culture around it?

Management layers tend to make decision making slower and add overhead to the processes. So instead of adding costs and slowness to the organisation, what about rethinking the way of working to make organisation scale smoother?

Fists together

Trust your team! Image by rawpixel.

With large projects uncertainty is the norm. There are so many moving parts that it is impossible to manage them all efficiently centrally. Agile practices approach this by empowering teams with fast feedback loop, short and incremental development iterations and freedom and responsibility to deliver value. With the help of cultural changes like DevOps, it is easier to build lightweight and self-driven teams that can respond to the diverse challenges of a complex system.

There are also some frameworks like Domain driven design that can help with defining building blocks of a system and responsibilities for individual teams.

Direction & steering

While structuring an organisation for optimal performance can provide fast time to market for new features/changes/fixes, there is also a different dimension to consider that can make or break a complex solution.

This way

This way. Image by Hello I’m Nik.

Leadership, be it technical or for people, is crucial for any bigger unit of work. There needs to be a clear direction and common goal that every team pursues. Without shared understanding and governance development efforts can side-track and derail the project.

Leadership is the tool for setting a vision and steering teams towards it. The essence of this is more about effective communication and collaboration than actual “management”.

Happy people

Lunch outside

Image by rawpixel.

Happy developers produce better code

Too often focus on project management is in technical aspect like schedules or sprint contents. It is important to understand that its the people that make a project. Understanding the motivations of others and enabling them to grow professionally and succeed is the way to also make a project successful.

People make things happen.