At some point in your career, you might find yourself leading a project. This can be stressful and hard regardless of the project’s scope, especially the first time you do it.
You might find it hard to be on top of everything all the time, and still, be a productive developer. Sometimes it feels like things are going nowhere, deadlines are just too soon and everything will crumble around you if you don’t do everything by yourself.
Here are three simple things that helped me stay sane, organized, and manage my daily activities. I hope they help you too.
Make sure everybody has the same idea of what will be the end product of the project
The most frustrating thing for me is having to plan something poorly specified or vaguely defined. The specification is your most prized possession while planning a project. Of course, there is no way to have everything set in stone. Requests change, things get complicated and a different approach has to be taken but, taking time to prepare and analyze everything that is requested in the specification gives you a different perspective and insight.
To avoid this mess, take time to prepare for the project.
- Take your time to go through the specification.
See what is required, what is not specified well enough, and what might bite you in the… behind.
Parts that are described well probably won’t cause problems, but things that are not, need to be clarified right away. Be annoying if you have to, but find out every single detail you can possibly get your hands on.
And for those things that… khm… might bite, create analysis tasks. Take some additional time to better estimate how much work they might require.
- Create tasks.
Doesn’t matter if you use Jira or post-it notes on the wall. Write down things from the specification that need to be done and describe them as well as you can. You will thank yourself later.
- Estimate tasks.
Take a day or two, sit down with all people involved in the development process, and estimate tasks — best case/worst case. Be careful with worst-case estimates. Those are not “mildly bad” cases, they are “dog ate my code and I have to start again“ cases.
Now when you know exactly what needs to be done and you have step-by-step tasks, divide those tasks into smaller groups. This way you get reachable goals that make it easier to follow the project timeline and keep your team motivated as there is no feeling that things are not progressing. Milestones are just small victories that eventually lead to the finished product.
- Set the deadlines.
Each milestone should have an unofficial deadline, more of a “goal date“. For calculating milestone deadlines, your gold number should be somewhere between the best and worst case estimate. Some tasks will be done sooner — some later, but in the end, you will be in the ballpark.
- Confirm with everybody involved that the project can start and that what they asked for is really what they want, what they really really want.
Make sure everybody is well informed about your project status
Other than poorly set goals, poor communication is another source of stress. Even though sometimes it may seem like you do not have time to finish anything on time, those 30 minutes you might spend on syncing with everybody involved will make a huge difference.
- Report to your team lead.
Do not go to your team lead only when s**t hits the fan. Make it a habit to report the project status regularly, regardless of whether things are going good or bad (or ugly). It is important he/she/others know how things are going in this mini-team of yours. Nobody is going to be happier if things are going great, and people are getting along and working together very well. But, if that is not the case, these reports will give your team lead a chance to make some changes and help you sort things out before things get out of hand.
- Keep all involved parties up to date.
If your project depends on other people or other teams, let them know how things are progressing. Sync once in a while with everyone, just to let them know how the project is going, if will there be some delays, will be done before the estimate (yeah, right…). But also, this way you will know what they did, what else they have to do, whether they have some problems…
- Update the project specification.
I can’t stress this enough. Yeah, it is tedious, and you “don’t have time“ and you “will remember all the details from that really important meeting after two weeks“ but I really urge you to make writing things down a habit.
Keep your project specification up to date. If some requirements change, make a note of it and notify involved people there have been some changes. This way, everyone involved can easily check what is happening with the project and it gives an ensuring feeling of you being on top of everything.
Make sure you know exactly what is going on and what still needs to be done
At any point in time, you need to know what is going on. Who is doing what, what is late, what is early, is someone stuck with something, and last but not least, is your team O.K. mentally?
- Be in sync with your development team.
It is O.K. to offload work and let your teammates worry about things you assigned them, but that does not mean you should just let things go. It is really important to know what everybody is doing every day, how far they got, how much is there left to do, and are they struggling with the given task.
Make time in your day just to hear what everybody is doing, answer any possible questions they might have, and debug and brainstorm ideas together.
It can get quite chaotic if everybody just does what they are assigned, without knowing what others are doing and how the whole project stands in general. There will always be pings and meetings that might interrupt you in your daily activity (programming, writing documentation, whatever else), but this way if you dedicate time in your day just for staying on top of things and helping everybody deal with their daily activities, you will be much more productive with way fewer interruptions.
- Trust your team.
Don’t try to do everything yourself. You should be able to rely on your development team and believe that they will do the things you assigned to them (and that those things will be done well). Not being able to trust your development team is worse than having to do all these things yourself, because of constant worrying things won’t be done on time or won’t be done well.
There is one more bonus thing that I decided not to include in the list but I use it a lot. Make to-do lists. I’m not talking about daily tasks here. Make a to-do list of things that have to be accomplished, and big meetings that have to happen (like a project kickoff meeting). For me, it was super satisfying to have less and less of those tasks to cross off, and it helped me organize and not forget something.
With this, I conclude this post, I hope you found it useful. I hope it will help you find your own unique way of managing stressful situations and organizing your projects.