In the simplest form, a project is the promise to deliver x at a time t.
success(project) = deliver(x) / time(t)
Most if not all problems around projects center around a misunderstanding of X or surprises around T. Therefore, effective project management would be to ensure a clear definition of X and good tracking for T. Your job, in managing a project, is to minimize surprises. X and T will likely change over the course of a project. Your goal is to minimize surprises to all stakeholders. A surprised colleague is an unhappy colleague!
If information needs to traverse the void between brains in an effort to lead or collaborate with others to achieve a common goal, then you need to wear the project manager hat. You need to actively manage the project or it will manage you! The bigger the scope or the larger the number of people involved, the more rigor is required.
Define X
In a for-profit company, the ultimate goal is to make money. By increasing the top line (revenue) and/or reducing the cost to increase the bottom line (earnings). So, unless the project is for a hobby or RDD (Resume-Driven Development), the project you are working on is part of a value chain. Have a clear understanding of the value chain you are part of and what metric/objective you are driving or helping with. Also, for any decent size project (spanning weeks/months) you need to deliver value incrementally to ensure progress and minimize big-bang surprises
1. Understand the Value Chain
We live inside the Matrix. Your project is someone else’s milestone. Your task is someone else’s project. If you’re working on a milestone, make sure you understand what project is this milestone part of and why is the milestone important to the success of the project. What program is the project part of? What business initiative(s) is that part of? What metric/objective is the initiative trying to achieve? You stop when you find where the $$$ is.
2. List Clear Deliverables
Define what specific tangible things you are delivering and group them into milestones to make it easy to gauge progress toward the final X. The litmus test of a clear deliverable is that if someone else reads your description, they will have the same expectations. Minimize surprises! What about something like “design”? Still, there is a tangible document that describes the design, and the definition of “completed” will be: the design is reviewed, feedback is incorporated, and we have a commitment to start the next phase. Think of a state machine. You are trying to define the transitions between states. Always optimize for the final outcome (metric/objective of the project/program/initiative), not the tasks list.
Define T
1. Identify Dependencies
What needs to be for what for you to carry on with your project? What deliverables depend on other deliverables? What is within your control and what is outside (other teams, other people, etc.)? Understand your chain of dependencies. What could happen in parallel vs what needs to happen in sequence? The longest chain is what decides your ultimate T.
2. Estimate Work
We suck at estimation. So why do we do it? Because of the great side effects. When we try to estimate work, we dig into the details. When two people have different estimates, we detect differences in understanding, and the process of reconciling that is insightful. Finally, we still live in a time-space continuum and need to coordinate across many people/teams/orgs, so we still need to provide our best effort to estimate a target date T.
Execute
The formula is simple
def execute(x, t) {
async do(next_task(x))
while(!done) {
manage(risks(x, t))
communicate(update(x, t))
followup(dependencies)
sleep(s, wake(change(x, t)))
}
return celebrate(impact(x))
1. Manage Risk
This is the time to get the pessimist part of you out. The glass is half empty, and the world is out to get you. Think of what could stop you from hitting T. Changes in X, misunderstanding of X, number of people allocated, skillset, technical complexity, legal reviews, etc. The list could be large, so use the Pareto Principle (80/20 rule). Focus on the top risks with the largest impact on your T. Review your longest dependency chain, that is where you will find those top risks likely. For any risk, think of its likelihood to occur, and the impact of it occurring. That is how you prioritize your top risks. Then think of possible mitigations, in case the risk materializes. Proactively seek to review and prevent risks from derailing the project.
2. Communicate, Communicate
If a project is executed in a desert, and no one was there to hear about it, did it really succeed? Establish a regular communication cadence to set expectations for others so you won’t get interrupted with repeated questions – while(true) { print(“are we there yet?”) }. Push information or you will find yourself pulled frequently. At the end of the day, everyone interested in the project wants to know if X will still be delivered at T. They want to see progress to believe that your estimates are still true. So on a regular basis communicate what has been completed and be consistent with your definition of completed.
3. Follow up
Manage your dependencies. If they are managing their risks and communicating with you, then you are in a good place. Often, you need to follow up in case they have not read this post yet :) Also, follow up with your teammates regularly to ensure everyone is on the same page and you are not surprised! A project does not succeed by closing all the tasks. It succeeded when we deliver X
Remember
Remember that different audiences care about different details. The higher you go in the organization chart, the higher the level of communication needs to be. If you did your homework on understanding the value chain, you should understand what to communicate to the audience. Remember that activity != progress. Communicate progress toward the final goal (X) or intermediate milestones (proxies to the final goal), not what activities you or the team are doing. Proactively manage up and down. You manage up by communicating, and you manage down by following up. Also, proactively communicate when there is a state change. If a change happened to variable X or T, you must communicate ASAP and do not wait till regular communication time.
Follow the principle of “least surprise” always. Nervana is reached when all are aligned. Entropy is where the universe wants to go, so do not be a passive observer. Lead forward.
Leave a comment