One of the core elements I screen for when I choose my clients is the culture. Without the right culture I know we will not be a good fit. In fact, nothing will work as they simply are not compatible with the processes and technology improvements I will try to teach them. It will be like trying to install a Windows app on a Mac…
The first element that needs to be in place before a tech team can perform on an elite level is culture. What is a good culture? A good culture is a culture which:
- Makes the team members constantly improve
- Is flexible for changes
- Tries to understand each other before proposing their own opinion
- Behaves like it is their own money which is at stake
- Is taking full responsibility for everything instead of blaming others
- Deep passion/love for what they are doing
Now, these qualities are easy to say but the human brain is very forgettable; the team will drift away from the intended culture if it is not constantly reiterated in the office. The culture is made of the majority of the people on the team’s beliefs. Only once the majority of the team actually believe in these values and is acting accordingly will this be the culture. Examples of bad cultures are conservatism, being over cautious, not being flexible to new ideas, not investing in training and learning and treating what they are doing as just another job.
Next comes processes, since better culture allows for better processes, but only if the previously mentioned cultural qualities are in place. Better processes could include:
- More efficient release processes
- Minimizing handovers and promoting collaboration
- Efficient decision-making processes
- Eliminating bottlenecks in software development
All of these will give the biggest increase in development throughput when they are enabled. Also, good processes are not static quality. The best processes are the once that get constantly improved and innovated upon. Likewise, the right culture will make the team able to identify and get rid of legacy inefficient processes that add no value to software delivery.
Lastly, with the right culture and processes in place, it is time to play with the toys! The most important tooling I recommend to Angular teams regarding tools and technology is:
- A monorepo architecture to promote transparency and code sharing
- A DevOps pipeline that contains dynamic configuration, feature sites and is based around reusing a base build for all environments
- High unit test coverage
- Covered (minimum) the top 5 most important use cases of the system as end-to-end tests with Cypress
- A state management framework to handle complex state, but abstracted as a sandbox/facade inside its own data-access library to decouple UI and data-access technologies
- A UI library which contains all the UI building blocks that are needed in the system and makes the development of the UI as easy as playing with LEGO bricks
Again, without the right culture and processes, the tools will have minimal effect as the throughput is being throttled by the culture and processes.
This post explained how culture is the basis of all meaningful improvement in a team. With the right culture in place, it is possible to build efficient processes up around them and ensure continuous improvements of the team. Lastly, having both of these in place the tools and technologies will then have a bigger impact on the teams throughput.