If you ever worked with a development team or a single developer, the chances are that you’ve probably noticed how hard it may be to get what you want. Something always seems to be misunderstood or missed — either it’s a deadline or a little detail that changes the end result dramatically. It leads to a lot of confusion both on the developer’s side and on your side, and everyone is unhappy. When more than one person (you) is involved in the process, you need to make sure that everyone is on the same page and have identical goals. Here are some tips to achieve that if you’re just starting out.
1. Provide documentation
Documentation is the key for communicating ideas and concepts among the team members. Of course, you don’t have to make it all about editing wikis and sending emails as they do in large companies, but writing down what you want to do and why you want to do this goes a long way. A lot of agile software projects don’t have documentation at all, and it does them a disservice every time a new team member is onboarded and every time someone forgets details of a given feature (which happens all the time).
2. Provide designs
Designs are also a form of documentation, visual one. If you can afford to hire a designer to join the team, even part-time, it will help a lot. Developers are terrible designers, and they have their own idea of how interfaces should look and work. Without pre-made designs, you can expect terrible UX and questionable layout choices that only vaguely resemble an application you were aiming to build.
Your designer should always be ahead of developers so plan your work accordingly. Experienced designer reuses UI elements on different screens so that developers only have to create them once and then arrange them properly for another screen if possible.
3. Set the process
You need to define the process and make everyone to stick to it. Choose a tool to help you with managing the project — Trello, Jira or anything else that suits you. Make sure that every task goes through the system and you know who’s working on it, when and how much time has been spent. Set up communication tools like Slack but don’t overuse them. Constantly distracting developers while they’re working will decrease their productivity. From time to time urgent questions pop up so it will speed up the process if everyone will be working at the same time and will be available if needed.
4. Stay involved
You have to stay in touch with the team to provide clarifications and make sure no one is blocked. It feels like a hand-holding, and it really is, without someone looking over developers they can start digging into something that’s not that important (that button wasn't working correctly, so I spent two days fixing it!) or they’ll be blocked because they’re waiting for an answer or decision from you.
Make sure to reach out to your developers often and ask if they need something or have questions. Getting in touch once a week would be not enough as you will get an update on the project status too late to be able to make the right decision.
5. Avoid feature creep
Avoid planning and implementing features that don’t bring enough value but take significant time to implement. Ask yourself why this specific feature matter and ask developers how much effort it will take to build it. Avoid the UI that is too complex, especially on early stages of your project. Implementing something that you don’t need that much will only slow your team down, and you will have just another feature to support. Developers will notice that they’re building something useless and this might also affect their morale.
6. Set realistic deadlines
If you were working with designers before you might be used to quick turnaround — just wait few days and the design is ready. Few iterations later you can see all your app screens, and it looks like you just need to get the code written. Unfortunately, it doesn’t work this way for development. To be realistic, expect that time to develop is somewhat unexpected and account for 2x or 3x time developers will estimate the effort.
Since you probably don’t have an unlimited budget (congratulations if you do!) and your resources (development team) are limited too the only thing you can change is the scope. Prioritize the features and user stories and define absolute minimum that has to be built within the deadline. Expect everything else to be done afterward or cut off. If you are lucky to implement something beyond the absolute minimum, don’t expect that to happen again.
7. Test everything yourself
Don’t expect your development team to write perfect code. Even if you hire the most senior developer who secretly wrote all Facebook code himself you will find bugs in the application right after he deploys next update. Make sure that you have a continuous delivery process set up and that new updates are deployed to a testing server every week. Test everything yourself, write down bug reports and send them to the developers. Bugs will take time to fix too, and they will be competing with new features for developer time. Make sure that you fix only critical bugs that have a serious impact of the functionality and UX. Most of the bugs are ok to live with until you have time to deal with them. Of course, that never happens most of the time.
Communicating with developers on a software project is not an easy task, especially if your team never worked together and you are somewhat new to the role of a project manager. Don’t expect everything to run smoothly from day one, but remember that it will get better over time. Also, note that the project manager works as a buffer between customers and stakeholders and the development team. You need to protect developers from the chaos and turbulence acting as a human shield. Same way, you need to protect the external world from uncertainty in a software project.