Agile software development is a thoughtful arrangement of many good project management practices, including the scrum framework. Using a common process like scrum supports group tasking and communication, sets expectations for how things will work, and helps track progress. It also establishes clear objectives for scrum masters.
But, earning a scrum master certification doesn't automatically make you the most effective project facilitator any more than getting your driver's license will make you a professional race car driver. Effective project management requires so much more than adhering to a set of rules.
While we embrace agile methodologies and our project managers are experienced in them, we've found some additional skills that are just as important, if not more so, for successful project management.
Plan a Project Roadmap
The minimum amount of time it should take to finish a project.
How to roll out the major tasks.
Urgency around what needs to be done to ensure that there's time available for all the other work further down the road.
How we're tracking to our schedule, based on what we know about the project and our backlog.
We try to minimize identified risks by scheduling those elements as early as possible. We also include time at the end of the project, ideally a couple of weeks, for polishing, fixing bugs, and optimizing performance.
Auto-leveling adjusts milestones in the Gantt chart as major tasks are completed. Once the project is underway, we move on to using conventional issue trackers, including JIRA and FogBugz. An up-to-date Gantt chart combined with an issue tracker is invaluable for following progress and detecting churn.
We lay out the app's navigation hierarchy with placeholder views and view controllers using static images from the design comps for each screen that hasn't been worked on yet.
Doing this from the start means that no one will be blocked when they're ready to begin working on one of the views. They can replace the image with actual content and start building out the view right away.
Additionally, the product owner can get a feel for the app sizing and navigation immediately, which can be a big help.
Practice Good Ticket Habits
All of us can probably recall a time when we've spotted an area of a project that needs more attention only to get distracted with something else and forget all about it.
In our projects, if there isn't a ticket for something, the issue doesn't exist. Opening a ticket for the issue, no matter how brief, makes everyone aware of it, gives anyone the opportunity to address it, and leaves nothing undone.
If we're in a hurry and don't have time to fill in all the details, we include just enough information to capture the issue and add the other details later. Ticket details must include time estimates and actual duration to be most helpful to the team.
Gain Hands-On Experience
Several times a week, our project managers build and run the app from source, not the latest build. Through basic usage and direct experience, they can learn what is and isn't working. This is hugely empowering and probably one of the most valuable things a project manager can do for the team.
When the ticket load seems to be well-managed, they run through the app in its current state and keep an eye out for regressions. They write down any issues they find and make sure there are tickets for them. Common issues that we look for include slow loading, loading every time something is viewed instead of caching, abrupt transitions, and slow scrolling.
To be consistent, efficient, and effective, draft your own basic test plan and share it with your team. If you run indiscriminate tests every time, you may spot a problem without understanding what the steps were to reproduce it, or you may forget an important step and have to start over.
This part of the project management process is so essential, we perform "principal reviews" for all of the apps we work on. Once a week, a subset of our company's leadership meets with the project manager, the lead developer, and a member of the test team, to see if we can find any issues that may have been overlooked.
Refresh issues can crop up when views were laid out with mock, static data and never transitioned to live data. By integrating live, changing data as soon as possible, ideally before someone begins working on a particular view, we avoid problems brought on by stale data and cell reuse.
Redirect People as Needed
Even the best team members can become hyper-focused on a piece of a project and spend too much time perfecting that part. This gobbles up a large chunk of the schedule.
With a well-planned project, you should be able to tell if someone is cutting into time allocated for another part of the app. We have team members get to a good stopping place as soon as they can and switch to working on the next feature or view.
Because our schedule allows for polish, performance optimization, and bug fixes at the end of the project, we revisit those original issues at that time to see how high of a priority they are and if they still warrant additional attention.
Coach Your Team
From directing team members to make certain plays to switching out one player for another, a great coach can have an incredible impact on the team's success. The same is true for project managers.
Provided the project's priorities and backlog are under control, your team members can choose which tickets to work on during a sprint. But there will be times when project managers have to provide more direction. Informing your team about who's responsible for what and when it's due is not micromanaging; it's running interference. It's setting the team up for success.
People Before Process
We have a reputation for great engineering, and we've shipped some amazing apps on very tight timelines while still maintaining a healthy work/life balance. We owe this in large part to our excellent project managers. Having people on our team who uphold the aforementioned skills is the key to not only surviving, but thriving.