Break the entire project up into individual activities. The completion of each activity should be measurable. As far as possible, each activity should also be assignable as an independent entity to an implementor/developer. This way, delays in one activity will not hold up other independent activities.
Estimate how long it will take to complete each activity. This is partly an art. As I gained more experience and became more familiar with the working styles of my team members, I got better at estimating duration. A general rule of thumb is to calculate an optimistic duration (if everything goes exactly right), a pessimistic duration (team member falls sick, unexpected technical hurdle comes up) and a likely duration (most things go right, but may run into a few hitches). Then compute the estimated duration as (Optimistic + Pessimistic + 4*Likely)/6. That way, you’re giving more weight to the likely scenario, but keeping options open for a very good or a very bad scenario. If you underestimate the duration, you will not be able to deliver on time, which hurts the reputation of the company. If you overestimate the duration, you are basically cutting out additional features that could have been added to make the product more competitive in the market.
Assign resource types to each activity. Note that at this stage, you are not assigning specific people to the activities; you are assigning only a resource type, e.g. Senior Database Developer, Java Developer, Senior UI Developer. However, it helps to have specific people in mind. That way, you know what other projects they are working on, how much time they can devote to this activity, and when they will be on vacation or leave.
Keeping track of activities, their durations, dependencies and resource assignments can quickly become complicated. Use a tool like a Gantt chart to make sense of the complexity. A product like Microsoft Project allows you to create Gantt charts showing dependencies and durations of activities. You can also mark milestones. You can change starting dates or resources around and watch the effect on the milestone/deliverable dates.
Tip: Don’t break activities up into minute overly-detailed tasks at this time. Things are bound to change, and overly-detailed Gantt charts can be extremely hard to modify and keep up-to-date. Think in terms of big modules and keep activities few and simple.
Tip: Remember holidays (like Memorial Day, Thanksgiving) and vacation days of team members while making the Gantt chart. Also account for some slack in the work during the week around Christmas and New Year. Microsoft Project will let you set certain days as non-working days and will compute deliverable dates accordingly.
This is the time to write a project plan or a high-level architecture and design document. Be sure to provide sufficient background in this document so that the actual implementors (development team) have enough information to complete their respective tasks. You must research alternatives and document clearly what the alternatives were, and why a particular alternative was picked. Otherwise, much later, you will have to face long discussions where the same alternatives and decisions are discussed again.
Reminder: Keep the architecture and design document in a shared directory, make sure everyone relevant can access it with the appropriate privileges (read-write or read-only), keep the updated revision history in the document itself, and email back and forth only pointers to the document and not the document itself.
UML is useful for this kind of documentation. Draw use case diagrams and deployment diagrams at this stage, coupled with perhaps a few sequence diagrams to clarify complex control flow. Microsoft Visio is one of the tools that allows you to draw UML diagrams electronically, though they can also be hand-drawn.
Reminder: Electronic (as opposed to hand-drawn) documents are easier to modify, copy and keep track of.
Tip: Throughout the architecture and design process, keep in the back of your mind that your company will benefit if components of the product can be reused for other projects/clients. Keep copyright laws in mind, however.
Alright! It’s time to start executing all that well-planned material.