Before starting work I never really understood the importance of project planning. I had worked in large groups before to create a program, modify an existing software, complete assignments. I also enrolled in two courses which dealt with project management – we had to create project plans, created burn down charts, estimated effort and time, analyzed different strategies for finishing a problem, and created COPIOUS amounts of UML diagrams (class, use case, sequence, activity, etc). In a classroom environment however, even though we worked on real life projects (open source and for the TDSB), I still never truly understood the importance.
However, after a short period of time at work, I saw the usefulness of planning immediately. It becomes very obvious when you have payments and expectations from a customer who knows pretty much nothing about programming and software development. In my case, a mobile application, can be split into many phases. We have a very large stack of things to do, and the customer only has one date: the release date. Everything else must be planned backwards. You can’t just take into time the development period for the programmer, but testing time, time to understand the many, many documents the customer will release outlining their expectations, and meetings. One thing that really stuck out for me is the huge number of documents you have to wade through to understand what the customer wants, their API, and so on. I really wish there was some standardized way of presenting this information on a wiki page or something, so you don’t have to go through six or seven different word documents trying to find the customers specifications or an API call.
I digress. Planning becomes extremely important when your deadlines are tied to payments. When you realize that yes, your employees can come in during the weekend to work, and they can stay late, but how often are you going to do this? Repeatedly doing this will make your employees unhappy, can potentially make them sick, and how will they produce good quality work if they are exhausted and unhappy? You need clearly defined deadlines, with clear expectations. In short, a plan will come in very handy.
I also saw evidence of this in my summer side project group. We were a group of friends who decided on a project we wanted to work on, and then split up the tasks among ourselves. It fell apart, very quickly. Some people’s tasks relied on someone else to complete their task first, so until the first person finished they were assigned “research”.
Strike 1 – No clearly defined goals or expectations. Just a general task for one person (e.g. sound), with no expectation.
We also decided that because we all had our own schedules (most of us are on a co-op work term, while the others take summer school / work part time), we wouldn’t set any deadlines or dates, just see how things went. We also didn’t want it to seem too much like school, because we were worried about it becoming too much like an assignment rather than something we were interested in.
Strike 2 – No clearly defined dates. What is there to work towards?
As well, because we split up the tasks, when one person finished their part and we had to integrate our work, it took time. We never created any sort of diagram or laid out too many specifications, and thus, time was spent on learning how code was structured so that we could integrate our own sections.
Strike 3 – No sort of software specifications.
The three major strikes above caused us to spend a lot of unnecessary and extra time, and hindered our progress greatly. I feel that due to the lack of structure and tasks, some people dropped out of the project (also because some people really did not have the time to devote to the project). We did not count the effort and time that would be required, at all.
The last thing that is essential for a project to go well is COMMUNICATION. Daily communication between developers at least, is very important in my opinion, and in person face-to-face communication is always better than email. Even skype communication (video chat) is better than email! It is very easy to misinterpret something, and if you have a different understanding of something, it is easy to explain and catch in person if you ask them to explain it to you. However, if it is through an email … and the person will read it in six hours and then work for 8 hours and then email you a status update which you will read after another six hours … if there is miscommunication or misunderstanding, then the mistake or misunderstanding has already been incorporated into the code. It’s too late.
In summary, there are, in my opinion, a few things that can make or break a project (with regards to project planning and communication):
- Clearly defined goals/expectations. What EXACTLY do you want to accomplish?
- Dates. Set dates for team project reviews, and then release dates for the customer.
- Software Specifications – related to #1, but more in detail. Outline what the customer wants, whereas #1 is more for what the developer needs to do.
- Communication. Good communication is crucial.
I hope that was helpful!