The new year is a great time to reflect on past successes, failures, and how to do better in the future. I've been part of a few team projects over the years. As part of developing Kachi, I've been thinking a lot about what went well and what we could do better next time. After all, projects are how software gets made and improved. Here are some key factors that I came up with.
It looks sort of obvious, but having a clear idea of what you're trying to accomplish is the first step to a successful project. Whether it's a feature for a customer or a code base refactor, it is critical to make sure there are clear, measurable, written goals, even for smaller projects.
This will help:
Participating in a project is a big commitment. People have other ways they need to spend their time. Therefore it's important to get team members to feel like the project is important and worth the effort. No one wants to spend hours working on something they feel is a waste of time! Having a clear goal lets everyone see what the end benefits will be.
Once, I was trying to convince the VP of another department that we needed to change the way our software was configured. While he did agree to assign some engineers on his team, they ended up never having time to work on it. If I had more clearly communicated what the benefits would have been for his team, it would have been a lot easier to get true buy in!
When the goal is clear, it's a lot easier to make a choice between 2 different outcomes. For example, we were evaluating different logging service vendors. One was a newer player in the market that didn't have enough security controls in place. Since we needed to maintain our own security compliance, it made it much easier to decide which vendor to use.
It's a terrible feeling to get to the end of a long project, and telling your customer they'll finally be able to do X, only for them to get a puzzled look on their face and tell you that they really wanted Y. Having your goals clearly defined in writing and approved by your customers will keep everyone on the same page.
As an engineer, it can often feel easier to keep working on the code than talking to other people. And if you're not coding, the project will never get done, right? But there are times when it would save a lot of time and effort by communicating.
Here are some good times to reach out to other team members:
- Blocked. Maybe you don't have everything you need, or need help understanding something. In any case, letting the team know can help you find a solution.
- Work will be late. Sometimes it's hard to admit that you're behind. But if you don't tell anyone, not only will you be late, but other people won't be able to adapt, maybe causing even more problems. The best thing to do is be up front about the situation.
- Work is completed. It feels good to mark a ticket as closed. But depending on how your team works, that might not be enough. Work isn't truly complete unless the people that need it, know about it!
- Requirements change. Sometimes a feature that was important becomes unnecessary. Sometimes new APIs are needed. Whenever requirements change, it's vital everyone know about the new expectations.
If people were robots, respect wouldn't matter much. But the reality is that people don't perform well if they don't feel valued and respected. This isn't about bowing down to the smartest person in the room, but realizing that everyone is contributing their own time and expertise. Everyone should feel comfortable raising issues and adding ideas without fear. That is the only way to get the most out of everyone, and get the best result for the project.
I've been on teams with technical and non technical people, experienced veterans and new grads, people with and without formal training, people of different races, genders, and sexualities, and making everyone feel comfortable and safe participating always leads to the best outcome.
Those are my 3 keys to successful team projects. Professional software development happens through projects, so making them successful is key to building great software. What have you found to make your projects successful?
I'm working on a new product called Kachi, a project execution tool which actively helps manage projects to get better results. Kachi tracks requirements, automatically gets updates from team members, and values your time by telling you exactly what needs to be followed up on. If you're interested in hearing more or joining our closed beta, join our mailing list at our website!