Component teams are a reality and they do exist for specific purposes. In the programs I worked, there were some component teams that worked on specific layers of architecture such as mid-tier validations and generating the PDFs with a click to mirror the screens.
They were formed because the intended solutions at these layers required enormous explorations of different tools, open sources, design approaches, etc before these layers could cater to vertical slicing of the application to produce an increment. So essentially these teams had SME’s, Architects, or senior engineers’ part of it for a focused effort on a layered solution which otherwise was not possible to achieve as part of the feature team who primarily focus on the functional increment.
Component teams can be short-lived. As soon as they deliver the solutions for the component which feature teams can consume confidently, the team can be dispersed and the members move to the different core teams to support from there.
The dependencies of the feature teams on component teams add the elements of uncertainty and risks to the delivery therefore the success of the component teams is of paramount importance to the program. More than their ability to deliver solution on time, the overall impact they make does matter i.e., fit for purpose solution, quality of code, timely support to dependent teams, alignment with larger roadmaps, changing the course of actions as the need emerge, and staying innovative at the core.
While the technical skills are never an issue for these teams as the SMEs are always part of it, the very mindset to create the aforesaid impact on the overall delivery holds the key.
Here are key attributes of the mindset of an impactful component team from the trenches.
1. It Will happen, Keep Going
Developing a solution that doesn't exist or which needs to be modified to fit into the layers of architecture is a huge responsibility. In the beginning, the right solution might look like a far-away dream for a number of reasons such as time taken in selection and availability of tools, initial prototype failures, lack of ideas, solution stuck on a unique point which requires significant exploration or help from open sources adding to the delay, infrastructure issues, etc.
Successful component teams I have seen, don’t get carried away from the situational setbacks; they understand the inherent challenges in the technology they work with and remain determined to get the job done. They take the challenges on daily basis, exhibit perseverance, possess a never say die attitude, are open for discussions, and reach out to people they need help from.
Leadership support, sessions by agile coaches, and grooming by experienced SMEs play a good role in helping the teams develop this mindset which assures desired outcome in the long run.
2. Teamwork Wins the Battle
At times team members make new discoveries that they apply locally to get the code working efficiently but don’t necessarily bring up to others' notice. This way team members end up developing their unique solutions for the same problems or at times they develop expertise to unique problems creating a number of SMEs within one team who have to reach out to each other to get the code working. Time lost in interactions and communication results in waste here.
Impactful component teams do understand that it is a good idea to explore ideas separately but before that, they should divide the work among themselves where it is required, identify the work that they jointly need to explore, share the learnings with others in a timely manner and agree to regularly brainstorm these ideas for alignment with the larger solution. Since the solution is belonging to an architectural layer, every change is dependent on each other hence it requires all the team to stay on the same page of learnings and expertise ongoing basis.
I noticed these issues in the teams and for me, the team coaching did the wonders wherein teams were able to collectively identify the flaws in their ways of working in the coaching sessions and agreed on a strategy to deal with these going forward. Moreover, coaching developed the right mindset in the team to address these types of problems on their own.
3. Communication Is a Responsibility
Active communication with dependent teams regarding the status of a layered solution, deployments in test regions, and answering the queries, is key to the smooth incremental delivery iteration over iteration.
By aligning to release or PI plan, component teams know what is to deliver every iteration and with whom are the dependencies, and which feature teams depend on them. But the plan is always subject to change when reality kicks in so these teams must rely on their ability to communicate and collaborate actively & effectively. Another aspect of communication is inter-team communication and communication with various stakeholders including clients which fosters the elements of transparency and trust.
Impactful component teams I have seen, do develop their communication models over the period of time, do improve upon these regularly, and practice these religiously as they understand that communication is not a choice but a serious responsibility.
Retrospective sessions provide essential space for these teams to look back at their communication styles and gaps, to identify the corrective actions. Feedback from dependent teams and stakeholders further fuels the need for improvement on-going basis.
4. Rework Is Just Fine
Integrating components with other architectural layers demands continuous rework and refactoring of the code which at times is very tiring and might end up being demotivating for normal teams. But component teams know this well that unless the component is fully tuned into the architecture the job is not done and till then there is no resting period either.
A serving mindset is desired by these teams to pitch in for help and quickly get back as many times as required as no one else could do their job.
5. Being Innovative Keeps the Race On
Successful integration with other architectural layers doesn’t mean that the code would work well in production or the end-user would be happy with the performance or user experience.
Impactful component teams keep the options ready by delivering the best solution but still working on other options to address the possibility of ‘what if’. I have seen that customers would change the requirements in the iteration reviews or code will break due to performance issues with live data or end-user will complain about certain issues. The onus comes back to teams to fix that component in a given time period therefore having had explored the possible areas of improvements in advance or identified the other possible solution options side by side, would keep them ahead in the game and enable the dependent architecture for the best time to market.
Right culture inculcated by SMEs with support from leadership does help the team tune to the mindset of thinking ahead in the game and stay ready with options.
6. Steer With Engineering Practices
Impactful teams embrace the engineering practices that help them leverage the collective intelligence of the teams, provide an edge on quality and speed, and make them stay abreast with the latest happening in the technological world. Mob programming, pair programming, TDD, and Continuous Integration, are some of the practices commonly adhered to by component teams. They do continuously explore better ways of working at open-source platforms and liaise with the world community for proven practices to try on.
Component teams could be formed as the need emerge and anyone could get the opportunity to be part of it. Having understood and imbibed the right mindset reflects in the behaviors and working style of the teams which ensure the right impact is made on the solution and therefore on the overall business value.