What even is this?
It's a project management / task scheduling program that knows that everyone sucks at estimating and still gives reliable predictions for when projects are going to be done. It is an implementation of the "Evidence-Based Scheduling" idea, which is proposed in this blog post by Joel Spoolsky.
It is free & open source
It lets you
- see your task dependencies clearly
- manage resources
- record project progress
- come up with reliable predictions of when you'll be done
Core Ideas
Evidence-Based
here's a quick summary:
Break down tasks
You're sooo bad at estimating anything that is too big. But you can more or less reliably estimate things that are small enough to accomplish in a couple of hours. So you have to break tasks down to this, down to about a maximum of 16 hours.
Breaking things down forces you to design the features you want to build, which is what really adds the reliability to the schedule.
Keep the clock running
Ok, so we know you suck at estimating tasks, but the hope is that you're at least consistently bad. So, we record the estimate, then compare it with how long it actually took you to finish.
What about interruptions or scheduled irrelevancies? It's simple: Keep the clock running. You're measuring the time from start to finish for the task. Everything else will be accounted for in the average over time.
Simulate the future
Now that we have the tasks, their estimates, and your estimation accuracy, we can extrapolate that into the future and tell you when the project will be done. The Monte Carlo method works fine for this and gives you a probability that the project will be done on any given date.
If you take snapshots over time as the project goes on, you can even check how the project's predicted done date is changing. You want to see the done date prediction stay stable or even move backward in time, and you want the range of probable dates to converge on one date. With this you can know with confidence when your project will be done.
Note that you should still put buffer into your timelines, because there are always unforseen tasks that pop up, this method just gives reliability for the project scope as it stands today.
Fractal Projects
Projects are made up of multiple tasks. Likewise, tasks themselves when broken up are just mini-projects, and projects can operate as tasks of larger super-projects. This kind of similarity at different scales is called a fractal. This app allows you to model arbitrary-level projects.
Tasks may also often be a part of multiple projects. This app allows for that.
Version Control
Projects change often and usually by many people. A version control system is built for these kinds of changes. In particular, it provides a natural way to handle conflicts and syncing between many people managing their own stable copies. Distributed version control systems even allow this to happen without a centralized server.
This app uses json as a storage mechanism for the data, so it is ready to be used with any version control system.
A side-benefit of this is that you can also build your own tools to do whatever analysis and manipulation you like with the data.
Inspiration
- Evidence Based Scheduling, obviously
- the Agile Manifesto and it's 12 points
- Measure in Queues
- the Cult of Done
- "No one ever died on a deadline" - from Never Split the Difference by Chris Voss
Frequently Asked Questions
- Count it towards the original task, you're spending more time finishing that task to it's definition of done after all
- Put it in as if you need to do it. when you discover that you don't need to do it, mark it as abandoned and you'll be happy that your completion date moves up
- This is a clear sign you're not yet ready to plan your tasks yet. Whatever estimates this tool will give you will be wrong, so go out and test things until you have a concrete idea of a path to go down. Build a prototype, experiment, then finish your planning.
- This is why we use version control, you can just change it. Be sure to have the new doer estimate it for themselves.