Feature Leads at vaamo
While sharing technical responsibility has worked well for us, over time we realized it only worked so well to share responsibility for shipping features. When we talked about it as a team, many said, they were missing someone who felt responsible for the development of features. Someone who takes ownership and lead the feature development until it is shipped.
So around one year ago we came up with a new role, that we call Feature Lead. There’s also a pretty good article from Thoughtworks describing how they see the Feature Lead role:
A Feature Lead is responsible for coordinating and driving the team towards the successful delivery of a particular feature of your service or product.
At vaamo everyone can take the Feature Lead role and in fact we often switch this role to someone else with each feature. There is a lot of experimentation involved regarding what works and what doesn’t and every feature helps us to improve and evolve the way we do it. This post gives you an overview of what worked best for us.
What’s a Feature Lead?
For us at vaamo the most important thing as a Feature Lead is to take ownership for the development and shipping of a feature. You are responsible for it. Ship it! 🚢
As a Feature Lead your job is to keep an overview of the development of your feature. This means, but is not restricted to, tracking the current status of a feature, help clarify questions and make sure decisions are made. Talk to involved stakeholders, communicate any issues early on and find ways with your team to get around of them.
Also, the responsibility does not end when you shipped the feature. If there occurs any problem in production or if there is any maintenance to do you are one of the first person to talk to.
So what did we learn from having Feature Leads.
First Things First
Get an overview of the feature as quickly as possible: (Hint: $your_favorite_agile_tool does not really help)
- Why are we developing this feature? Motivation?
- What needs to be done?
- Where it needs to be done (Backend / Frontend / Ops / Service XY)
- Who is involved and how are they committed (Full time, part time, only assistant)
- Try to find issues and open questions and address them as soon as possible
- Planned Target Dates
- Communicate this overview and make everyone in the team aware of it
Keep an Eye on It
The hardest part is to keep the overall overview. How is everyone in the team doing? Is anyone stuck and needs input? Is everyone still on track? What part of the feature is currently in development? What is next? Open questions?
The bigger the team is, the harder this part gets. Ask your team to proactively communicate their status often. If you are off track and won’t make the target date, communicate it! This helps other to do their job and manage this by changing the scope of a feature or inform stakeholders that development takes longer than expected early on for example.
Don’t Get Stuck on Uncertainty
Try to solve unclear topics and questions as soon as they arise or at least address them to someone that can solve them. Open issues and questions may quickly become blockers for shipping the feature. When you have to deal with an external partner, things usually need more time and are more likely to change. Adapt accordingly.
Having a Feature Lead is No Excuse
And even though it might seem, like we said something different: Everyone in the team is responsible for shipping the feature.
Only because there is a dedicated Feature Lead doesn’t mean the others in the team should stop caring for the feature and stop taking responsibility.
No two Feature Leads are alike
We tried Feature Leads on smaller and bigger features, with different number of people working together. And, surprise: The more people are involved in a feature the more time you need to invest as a Feature Lead to coordinate the work and to keep track of the current status. You need to learn that you cannot solve every problem. As a Feature Lead it might occur that you code less and talk more.
You’re not a Manager
Being a Feature Lead is not about you becoming some kind of project manager, although you might feel like one from time to time. It is all about taking ownership, the team and shipping that feature.
Communication is key!
You cannot over-communicate!
While the Feature Lead role also involves technical skills and sometimes you may need to be able to make technical decisions and set the overall technical direction of a feature, the most important thing is communication. Always stay in touch with your team.
The following are some tips on how to make communication a bit easier:
The most valuable information about their current status you might get by just talking to them. Even if you are not explicitly talking about their status. So, really, start just talking to others on your team, no matter about what.
Chatting in Channels
Create a dedicated channel in your chat tool for the current feature and invite everyone involved. This will reduce the noise when talking about the feature and also helps everyone to get an overview who is involved and provides a good communication starter.
We’re all Snowflakes
There are a lot of different ways to communicate with the people on your team and not all work for everyone. Some team members might need more guidance than others. Some prefer direct communication, while others like the indirectness and structure of updating issues in a tool. Try to find the best way to communicate with each team member and with the whole team. Try personal 1on1 chats via slack or in person. Try group chats. Try a whole team meeting from time to time. Try communication via your issue tracker. Share a post in a slack channel. Use the daily. Whatever works is fine.
Sharing is Caring
Try to share everything with the team, try to keep them up to date with the current (overall) status, issues and next steps:
- Always share your own status (as a Feature Lead) in a public channel. It’s likely that others will follow
- Let your team know about the overall status
- Communicate with your stakeholders
What Makes a Good Status?
When you communicate your current status, as Feature Lead or team member, it should be useful to others.
Here are some questions you should ask and answer yourself in order to provide a meaningful status:
- What have I done?
- What will I do next?
- Are there questions or issues that need to be addressed by myself?
- Are there questions or issues that need to be addressed by someone else?
- Are you waiting for external information?
- Am I still on track? Will I make the target date?
- If not: What may be changed in order to finish until the target date?
- Was there any decision (e.g. to do / not do do something?) that’s relevant and useful to others?
- Are there any other tasks that took my attention?
- Are there any other tasks that will hinder me from getting the current task done?
- Is there anything else I want to share with the team?
Another question that often occurs is, when to communicate your status? That’s an easy one: Whenever you have an update! But you should also try to give a short update each day.
What worked best for me was trying to get status updates from the team during the day and then write my own status and summary to my stakeholders (CTO and product management) while in the train on my way home. It doesn’t really matter when you communicate your status as long as you do so.
What Not To Do
Don’t assume that everything is ok and on track when you don’t get feedback from your team. It’s probably not. Go get a status update and ask for open issues.
Do not ignore issues/questions until when they are due, especially when dealing with external stakeholders. This will make you miss the target date.
Don’t be too pushy with your colleagues. Don’t play the boss. The people you are working with are doing their best to get the job done. Ask them to proactively report their status but don’t be upset if you get the status late or no status at all one day. Help them by clarifying open questions early and let them concentrate on getting their work done, try to get everything else out of their way.
How can you do it?
TL;DR: Take ownership, keep track of the current status, communicate with your peers, ship it.
Try it out when implementing your next feature. Whatever works for you is fine.