Advertisement
7_2009-2012 Coding Standards #235756

A road map - Planning your projects

A guideline to properly start, manage and finish your projects. A must read for any serious developers and developers looking to work on big projects. Btw: This is not c/c++ specific

AI

Resumo por IA: This codebase represents a historical implementation of the logic described in the metadata. Our preservation engine analyzes the structure to provide context for modern developers.

Código fonte
original-source
<table width="100%" border="0" cellspacing="0" cellpadding="0">
 <tr> 
  <td><b><font face="Arial, Helvetica, sans-serif" size="2">A road map - Planning 
   your projects<br>
   Dustin Davis<br>
   Programmers Unlimited<br>
   11/25/2003 </font></b></td>
 </tr>
 <tr> 
  <td> 
   <p><font face="Arial, Helvetica, sans-serif" size="2"><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A lot of people never finish most of the 
    projects they start. <i>&quot;Finishing a project is the hardest thing&quot; 
    -Secrets of the Sages</i>. The problem can occur at any point and for 
    any reason. For example, my biggest problem is learning something new 
    and jumping right into starting a project for an idea that popped in my 
    head. Well, let me tell you, serious psychological problems as well as 
    bad habits can occur. Not finishing a project is one of my worst bad habits 
    and in return, it has weighed heavy on my mind. Depending on the person, 
    depression can occur. You might take these statements lightly, but you 
    can ask any of my coworkers and my wife.</font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Most 
    projects are just something to entertain me at the time. If I had taken 
    the time to properly plan out my ideas into working projects before just 
    hacking code, I would have </font></p>
   <ol>
    <ol>
     <li><font face="Arial, Helvetica, sans-serif" size="2">Figured I'd be 
      wasting my time and would not even bother to start as I already knew 
      I would lose interest, or something else would keep me from finishing</font></li>
     <li><font face="Arial, Helvetica, sans-serif" size="2">I would finish 
      the plan and I would have a nice road map to complete the project. 
      </font></li>
    </ol>
   </ol>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This 
    is the point of this article right now. Learning to manage projects and 
    keep your peace of mind. Let's take a look at the overall process of planning 
    your ideas into projects</font></p>
   <ul>
    <ul>
     <li><font size="2" face="Arial, Helvetica, sans-serif"><i><b>Idea stage</b></i></font></li>
     <li><font size="2" face="Arial, Helvetica, sans-serif"><i><b>Thinking 
      stage</b></i></font></li>
     <li><font size="2" face="Arial, Helvetica, sans-serif"><i><b>Preplanning 
      stage</b></i></font></li>
     <li><font size="2" face="Arial, Helvetica, sans-serif"><i><b>Planning 
      stage </b></i></font></li>
    </ul>
   </ul>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Now 
    these stages are just a quick overview of the process. Let's get into 
    some details of each stage.</font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2"><b><font size="3"><i><font color="#FF0000"><u>Your 
    Idea</u></font></i></font></b><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK, so now you have an idea. Ideas are really 
    fun and great. They get you all excited because you have something new 
    to try out and learn from. Something to show your friends. I know this 
    feeling all to well. It's a rare day I don't read about a new language 
    or about how to do something new in a language I already know, or get 
    an idea for a new program that I could market, etc. Does this sound familiar? 
    Well, today, I started learning about the benefit's of XML. And since 
    I've been working with Perl the last few days, I had another idea pop 
    into my head. I want to build a piece of software that I can market using 
    Perl and XML. Now, as always, I have the idea and I say to myself, wow! 
    This will be so easy! So I just jump right into it. After a little while, 
    I see all these things that get in my way and it puts a stop on the project. 
    Had I taken the time to plan it out, I would have seen these things. Luckily, 
    this time I am taking it slow.</font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Getting 
    yourself organized is the first step. Another serious problem that plagues 
    me, is that I have ideas everyday and they all generate the same response. 
    Since not a good idea to work on 50 projects all at once, if you cant 
    even finish one, go buy yourself a journal, notebook, palm pilot, or if 
    your a poor starving coder, then use notepad! Anything that works for 
    you is fine. Make an idea chart. Each time you get an idea, write it down. 
    Not only will this allow you to focus on your current project, but it 
    will keep your from forgetting about them later, and most important, it 
    will help you weed out projects that you would normally not finish due 
    to it being one of those, &quot;Keep me entertained at the time&quot; 
    projects. Very important.</font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2"><b><font size="3" color="#FF0000"><i><u>Thinking 
    stage</u></i></font></b><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This stage is a must. The reason why is 
    because in this stage, you will be defining what your project is. You 
    must define a clear definition of your goal. What will your project be 
    at the finish line? What is the purpose of your project. Before brain 
    storming about all of the ideas you want in your project, you must clearly 
    define this information.</font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Once 
    you have a clear definition, you can start your brain storm session. Be 
    sure to use your notebook (or start a new text file) to write all of these 
    ideas down so you do not forget them when it comes time for planning. 
    When you are logging these &quot;bells and whistles&quot; that you want 
    to feature, include details and any specific information you have in your 
    mind. You might think, &quot;I will remember what I meant when I see what 
    I wrote down&quot;, but I cant count how many times I have said that to 
    myself only to come back anywhere from a week to 6 months later only to 
    find that I have scribbles that are very cryptic to me. Someone else may 
    as well have written them.</font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;During 
    this thinking stage, you will want to get opinions and comments from other 
    people and write them all down. Remember, this is just a thinking stage. 
    Getting a lot of information now can help more than not having enough 
    later on. </font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2"><b><u><i><font color="#FF0000" size="3">Preplanning</font></i></u></b><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If you are still interested in your project 
    at this point, then finishing this stage is our next goal. Preplanning 
    goes like this, you take all of the notes and scribbles and comments and 
    suggestions and you sort them out. This is where you make sense of all 
    the data you have acquired. You must weed out bad ideas and keep the good 
    ones. Use the suggestions and comments to build, modify and improve your 
    ideas and form them into solid, legitimate additions to your project. 
    A lot of people would include features that are useless in the end, but 
    look good now. Time wasters are what they really are. Now with the ideas 
    you have left from that mess, you must determine how each idea will fit 
    into your project. If it don't fit, put it a side. You can always add 
    it in the next version.</font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK, 
    now we are at a critical point in our process. Here, you need to decide 
    if you should repeat the &quot;Thinking stage&quot;, or if you should 
    continue on to planning. Now before we get into planning, you will need 
    to understand some guidelines. Any new ideas that arise will complicate 
    and potentially ruin your plan. So, if at any point from here on, you 
    get new ideas, write them down like you did before. But this time, you 
    will have a different agenda for them. These ideas will go into your next 
    version, or will be added only after you have finished your original plan. 
    If you think that they are too good to pass up, go back to the thinking 
    stage.</font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2"><b><font color="#FF0000" size="3"><u><i>Planning</i></u></font></b><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Our last stage is by far the most important. 
    During this time, we will design and layout our project road map. From 
    this map, we will start and finish our project. Now, this stage in it's 
    self has many sub stages that must be followed. </font></p>
   <ul>
    <ul>
     <li><font size="2" face="Arial, Helvetica, sans-serif"><i><b>Putting 
      the puzzle together with a design document<br>
      -Defining your resources</b><i><b><br>
      -Defining sections / goals</b></i><b><br>
      </b></i></font></li>
     <li><font size="2" face="Arial, Helvetica, sans-serif"><i><b>Starting 
      at the start</b></i></font></li>
    </ul>
   </ul>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Now 
    we have an overview of our planning stage. Let's get started!</font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2"><b>Putting the puzzle 
    together</b><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;After our preplanning stage, you should 
    have everything that will be in your project. You will need a new piece 
    of paper (of a new text file) because you are going to create a design 
    document. If you have ever been involved in a big project, or have read 
    about them, you will know that the design documents are the &quot;bible&quot; 
    and will be the highlighted path to your destination. </font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2"><b>Creating your design 
    document</b><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;A design document is the key to your project. 
    It holds the outlines of everything that goes into your project. From 
    the user interface to the push of the 'OK' button. Lets take a look at 
    what should be in your design document</font></p>
   <ul>
    <ul>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><i><b>The purpose 
      of your project</b></i></font></li>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><i><b>A clear 
      definition of what the end result will be</b></i></font></li>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><i><b>Defining 
      the 'tools' to be used</b></i></font></li>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><i><b>Drawings/Sketches/Renderings 
      (User interface, menu's, splash screen's, models, etc.) </b></i></font></li>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><i><b>Feature 
      placement and function</b></i></font></li>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><i><b>Defining 
      people who are involved and their duties/responsibilities</b></i></font></li>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><i><b>A breakdown 
      distributed resources</b></i></font></li>
    </ul>
   </ul>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;We 
    have defined the purpose and the end result in the preplanning stage and 
    should not be difficult to add to the design document. Defining the 'tools' 
    you are going to be using is another easy one. Let's take a game as an 
    example. If you were to be building a game, you would surely want to define 
    what API you were going to use (OpenGL, DirectX, Software blitting, etc.). 
    If using 3D models, you will need to define the file type and software 
    used to create these models, otherwise, define the sprite file type and 
    format's. Sound, input, distribution, and many other things will need 
    to be defined. Since it's a compiled game, you will want everyone working 
    with the same compiler. As we all know, Borland and MS don't mix very 
    well.</font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Drawing 
    and sketches (if applicable) will help to give a visual aid to you and 
    everyone in your project. Even if you have a clear vision in your head, 
    it will be distorted by the end and it can cause serious side effects. 
    Put it in ink and leave it alone. If you feel you have to tweak on it, 
    leave it be until you are done. I cant stress this enough, wait until 
    you finish until you make changes. If you feel that the changes are necessary 
    now and can not wait until after your project is finished, then you will 
    need to go back to the thinking stage. This is OK since you have not started 
    on any work at this point. You might lose a little time, but it will be 
    worth it in the end.</font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Feature 
    placement and function goes along with the drawings/sketches if applicable, 
    otherwise, describe how they will fit in to your project, what their purpose 
    is and how they will function.</font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;If 
    you have other people involved in your project, then you will surely want 
    to spend time on your resource section. It will be an outline for everyone 
    and what their jobs are. To maximize your time, you will want everyone 
    to have a job all of the time. To go even further, you will want to add 
    'odd jobs' that anyone can work on if they complete an objective and have 
    some free time, even if it's sweeping the floor (considering everyone 
    is all together and not spread out over the Internet). Define a project 
    leader. Who ever that individual is, should be responsible, since it will 
    be their failure should the project fail. If you are not willing to take 
    responsability for failure, dont be the leader!</font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Defining 
    your resources, if any at all, includes time, money, workers and materials 
    (depending on the job). Step back from your project and look over your 
    objectives and everything involved so far. If you are paying people to 
    work on the project, then you have to define a budget, and with a budget 
    comes a time frame. Let's define a scenario</font></p>
   <ul>
    <ul>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><b><i>5 workers 
      @ $10.00/hr each</i></b></font></li>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><b><i>$50,000</i></b></font></li>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><b><i>No time 
      frame</i></b></font></li>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><b><i>Software 
      application for database interaction</i></b></font></li>
    </ul>
   </ul>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;OK, 
    so this is our 'box' that we must work in. A good thing is that there 
    is no time frame, so you can mess around all you like. Your budget is 
    $50,000 and there is nothing to buy since everyone has their own workstation, 
    and all the tools they will need. But, you are employing people to code 
    software and they work 8 hours a day, 5 days a week. All 5 employee's 
    are being paid equally @ $10.00 /hr. This means that every month, $8000 
    comes out of the budget.</font></p>
   <blockquote> 
    <blockquote> 
     <p><font face="Arial, Helvetica, sans-serif" size="2"><i>((10*40)*4)*5 
      = $8000<br>
      ((Hourly rate * Hours per week) * weeks per month) * Number of workers 
      = Total monthly cost in worker pay only</i></font></p>
    </blockquote>
   </blockquote>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;All 
    of the sudden, there is a time limit on the project! Since the budget 
    is $50,000, the time limit is approximately 6 months. You better get started! 
    Define a time limit for each section of your project and stick to it. 
    If you have to work for free on the weekends, then you had better do it. 
    </font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;By 
    now, you should have a pretty good design document. I haven't covered 
    everything, but creating docs over and over again, you will learn more 
    and more what you must include for everything to run smoothly. We talked 
    about setting time limits for each section. Let's take a look at defining 
    sections and goals.</font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2"><b>Defining sections 
    and goals</b><br>
    Since you cant do everything at once, you must do small sections over 
    time. This is a tough job, but it is critical. You have to take your project 
    as a whole and break it into little, manageable pieces. Let's go back 
    to our software project we defined in the example above. If only one person 
    were to be working on this project, the sections might be broken down 
    as such</font></p>
   <ol>
    <ol>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><i><b>Create 
      user interface&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1/2 month<br>
      - Create graphics<br>
      - Create the menu's<br>
      - Layout objects (button's, etc.)</b></i></font></li>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><i><b>Code the 
      menu items&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1/2 month</b></i></font></li>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><i><b>Code objects 
      (button's, etc.)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 month</b></i></font></li>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><i><b>Code the 
      database wrapper DLL&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;2 months<br>
      - Connect, Close, Add, Search, Delete, Edit</b></i></font></li>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><i><b>Code the 
      features&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 month</b></i></font></li>
     <li><font face="Arial, Helvetica, sans-serif" size="2"><i><b>Test / 
      debug / fix&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;1 month</b></i></font></li>
    </ol>
   </ol>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;This 
    is a small simple break down but it should get the point across. By following 
    your break down, and finishing each piece individually, you will have 
    your project finished in no time. It will also help to keep your attitude 
    on the positive side because you can look back and see what progress you 
    have made. Attacking the project as a whole with no direction can hurt 
    the moral when you look back after 6 months of hard labor and you have 
    nothing finished to look at.</font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2"><b>Starting at the 
    start</b><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Isn't it so fun to get right in and start 
    hacking away at your project? Yes it is. I love just jumping in and start 
    writing code with no direction at all. But, after reading this article, 
    I'm sure you will want to start where you should, and that's at the beginning. 
    Planning is key to your success. Think about war. If you had an army, 
    would you have a better chance of taking over a country if you had a plan, 
    or if you just sent all of your troops in blazing at random? That's my 
    point. Designing the layout of your database isn't fun, it's boring and 
    mundane, but it must be done before you start writing code. </font></p>
   <p><font face="Arial, Helvetica, sans-serif" size="2">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;I 
    hope this article has helped at least one of you. It has helped me in 
    many ways. Look for more articles from me @ Programmers-Unlimited.com</font></p>
  </td>
 </tr>
 <tr> 
  <td>&nbsp;</td>
 </tr>
</table>
Comentários originais (3)
Recuperado do Wayback Machine