I have been lucky to build software products for a few different companies, each with a distinct culture. It’s help me form opinions about people, tools and processes that make teams effective at shipping software products.
Who makes up a software product team? Mileage may vary, but I like to include:
- Developers
- Testers
- UX Designers
- Project Managers
- Product Managers
- Support
Lots of companies organize people into functional groups: All the developers in a group, all the testers in a group, all the designers in a group… and so on. This doesn’t make it easy to ship software. It can create walls and make it harder to communicate. You also lose the “team” feeling, as well as the focus and drive that comes from that.
Product-centric teams seem to be more effective at shipping. These multidisciplinary teams embed members from the various groups on the team, all working together to create and ship a software product.
Over the years, I’ve seen productive teams using a few basic concepts. Some are process related, some can be aided by tools, but most deal with relationships between people:
- Trust each other: Each member has a role, and members need to trust in each other’s ability to perform.
- Talk to each other: Lots of open communication is important. The team is a safe place, so there are no stupid questions. Meet as a group often to discuss progress.
- Support each other: You win and lose together. Help others, even if not asked directly.
- Be passionate: The team needs to be passionate about succeeding and hungry to ship a great product. There will be rough spots on the way. There always are, but the team needs that passion to be able to power through.
- Move as a single, focused group: Speed is important. Decisions, implementation, feedback – all need to happen ASAP. Distractions kill speed.
- Plan work as a group and document the plan: If everyone is part of the planning, everyone is committed to the plan. Keeps the team focused.
- Create a roadmap: You need a Big Picture too. What’s the vision and strategy? It helps set the tone for everything else.
- Break work into small tasks and track the tasks: Small tasks are manageable and trackable. Small tasks are easy to scope and keeps the team focused. Watch out for scope creep.
- Create milestones and track progress: Deadlines are a good thing, even if just internal. Forward progress is essential for shipping and milestones are great for tracking progress.
- Adjust as needed: Don’t be afraid to adjust anything: schedule, milestones, tasks. You are collecting data every day. Use it to make informed decisions ASAP. Triage your work often.
I like to keep things lightweight. This includes tools and processes. Focus more on your product and the work at hand. Processes and tools can be distractions. The best ones are those that stay out of your way.
Update: Taras reminded me indirectly about the importance of passion, so I added it to the list.
I find it interesting that you added passion as an afterthought.
Passion can be called many things, such as will, interest, inspiration, morale, motivation, etc.
Technically, everything is correct without it -and that’s why it’s interesting.
However.. passion is the drive. With it, all the other items eventually fall into place. Without it, while everybody knows that working as a team requires some organization, trust and friendship (to rephrase your list more succinctly), this does not happen.
I therefore believe that passion should be number one on the list. This is the single most important item – the drive.
@muf – You’re so right about the importance of ‘Passion’. I think I overlooked it to begin with because it’s always been present on the great teams I’ve worked with. I took it for granted and I needed to be reminded that not all teams have it.
I didn’t make a numbered list because I couldn’t create a ranked order I was happy with. I do think ‘Trust’ is super important, but I agree that ‘Passion’ is certainly not the least important. I’ll bump it up into the ‘people skills’ part of the list.