Solved

BIG project?

Posted on 2004-08-03
26
252 Views
Last Modified: 2010-03-31
Hi everybody,

I'm going to be starting a very large project soon, and I'm pretty positive I'm going to run into problems 1/2 way down the line. I cannot realistically plan out the entire project on paper since it would take far too long. So my question is, how do you start such a large project and what preperations do you make? I.e. any special programs you use to help the design phase? etc...

Thank you!
0
Comment
Question by:Unimatrix_001
  • 6
  • 5
  • 4
  • +5
26 Comments
 
LVL 35

Accepted Solution

by:
TimYates earned 75 total points
Comment Utility
Whiteboard, 3 people, markers and circle/line diagrams

Also, a clear definition of what the system should do, what resources it will need, and mockups of any dialogs/webpages

That's what I use anyway...  Even if the 3 people aren't going to be programming the project, you need them there as 3 pairs of eyes spot bugs/pitfalls/optimisations much better than one

Tim
0
 
LVL 3

Author Comment

by:Unimatrix_001
Comment Utility
What sort of detail do you go into?...for example clicking button A brings up this dialog and clicking button B closes it etc...
0
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
Nah, just quick layout of the main dialogs... that way you can see if there is too much info on one screen which usually means your data structure could do with normalising ;-)

Basically, I try and get all major classes of object into circles on the board, then we can start linking them up and working out which ones need to be stored, which need to be encrypted, which can be derived from others, etc...

Then it's easier to see how much coding you need to do, and break it into managable units that can be tested in isolation :-)

It's so much easier writing code for a week or two, then testing it, then writing the next block that plugs in and uses the first block, etc...

-------

Other people probably have MUCH better ways of working than this ;-)  It's just the way I find easiest :-)
0
 
LVL 3

Assisted Solution

by:JohnnyAffa
JohnnyAffa earned 25 total points
Comment Utility
study software enigeering and its phases!

- inputs/outputs
- data structures
- processing
- coding
- testing

actual coding is one of the last things you do!

0
 
LVL 35

Assisted Solution

by:girionis
girionis earned 40 total points
Comment Utility
The best way is to talk about the project with all the people who will participate and identify the key components. Then try to break them down and write a few UML diagrams that describe the most basic parts.

But even by doing this you will probably run into problems half way down if you do not design it *all* on paper first. Unfortunatelly the bigger the project the more imperative the need to design it on paper first. Better to spend more time now rather than spending it on modifying it later.
0
 
LVL 3

Author Comment

by:Unimatrix_001
Comment Utility
Hmm...Mind if I leave it open to see what other people say?....
0
 
LVL 35

Expert Comment

by:girionis
Comment Utility
Not at all :)
0
 
LVL 35

Expert Comment

by:girionis
Comment Utility
In fact you should leave it open in order to get more ideas :)
0
 
LVL 5

Expert Comment

by:jpolin1
Comment Utility
Big projects require more people, analysts to define requirments, and programmers to make it happen. If you have to design the system from end to end you are doomed.  U need to insulate yourself from the people that want the system created, or you will have revolving door development.
Thats where the bus. analysts come in.
0
 
LVL 14

Assisted Solution

by:sudhakar_koundinya
sudhakar_koundinya earned 30 total points
Comment Utility
1. Prepare Functional Specifications Document. In which you need to identify initial functional flow of the project
2. Prepare Software Requirements Specification In which you need to identify the utilities/tools/softwares for your Software based on the Functional Specifications Document
3. Preapre Software Design Document, you need to identify the detailed functional flow of your software.
             1. Prepare Use Cases
             2. Prepare Sequential Flow Diagrams
             3. Prepare Collabration Diagrams
             4. Prepare Class Diagrams
                   1. Database Level - Also known as Physical Design Document
                   2. Code Level -> Based on the use cases and sequential diagrams Identify the classes and objects you require
4. Test Plan - Prepare the Test plans based on your use cases
5. Coding
6. Testing
7. Documentation - High Level and Code Level


     
             
   
0
 
LVL 2

Expert Comment

by:billyea
Comment Utility
Okie, I bet your subscription to Programmers Weekly was written in Aghagaslavian so I'm here to clear it all up.
Lets get down to the dot on Project Lifespan.

public void Step1
{
Let's see...large project...lots of money. BIG DEAL! Same thing applies to small projects.
First you need an idea of what your program's gonna do (if it actually does anything...useful).
If you don't, you might as well hit your keyboard and call it 'coding'.
}

public class Step2
{
Okay, you got your function of the program.
If your function is too wide then narrow it down or you'll get a program that is a travel agent AND a nuclear reactor AND etc.
If it is too thin, well, you have a program that sells GREEN colored MINTS to SASQUATCHES in BC FARMS.
Next you must list all the stuff required by your program to do it's function.
For example:
Java Runtime, Collision Class, MyLIfe.txt, Arrow.jpg, CopyrightJunk.png.
This should be done after making a map of the interface. All those cute buttons. This will be explained in step 3.
}

import java.util.Step3.*;
The point of Windows is that it's colorish and picturish.
DOS stinks, so you need an interface unless you want to get a slap-in-face.
Especially with commercial apps, you navigate from each 'screen' to screen to operate the program. Make a map of how each screen should be necessary.
Then plot buttons on the map. This is all best done on Paint. As you add a new image, bring out a notebook and list it along with the screen it is placed on, same with a new textbox or object.
Eventually you should have a list of all the components and their locations. You're done the mapping. Good job. :D<[Blegh!]

Step = 4;
Woot, you got your blueprints!!!
Next you have a map saved in Paint, you have a list of components. Now for consultation.
I'm assuming you work in a bigger company and that this is not a one-man show. If it is, skip this step.
Gather all those programmers and show them your map. Do a Shockwave presentation or Powerpoint or get a Live Band. Your point is to make everyone beleieve you're the king.
Tell them your idea, I bet it will look alot better since you planned it.
Also be sure to look at other people's ideas. If they're better than yours, buy a dunce cap and sit in the corner.

String = "Step 5: (are you still there)"
You have a list of components, now you have to make practical of those.
Make your list of components into solid objects. Create a function for a text box, an image for the arrow, and a blank in the Copyright notice. Thank goodness you had that list, so one by one convert the text on your list to real time components.

Step 6 = new Step("WHOA");
Add the components to your program using your map. Then connect them with a list of buttons, checks, and hyperlinks.
This is sort of like making a webpage.

Step 7:
Debug the program. You'll get a mountain of errors :). If this was someone elses' idea, tell him it doesn't work. And use that as an excuse to recall a meeting. (TIME WASTERS!)
If it was yours, slowly debug each, don't worry, its okay to start at step one...100 years isn't that long.

System.exit(8);
Here is the point where you can add extras. For example, docs, a REAL copyright, logo, add ons, etc.
But if your team would not like to do that (lazy asses) then you're done. YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAY!

You're done! Your program is ready to be sold to the world! See if it SUCKS!!!!! LOL :)
And that is the end of Programmers Weekly Project Edition.
Hope it helped.
0
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
mmmm....  that was helpful

:-(
0
 
LVL 3

Author Comment

by:Unimatrix_001
Comment Utility
...billyea, I hope you won't mind me waiting until some more helpful comments like the previous ones come along before I jump in to accept yours...
0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 2

Expert Comment

by:billyea
Comment Utility
okie, I don't...much
0
 
LVL 2

Expert Comment

by:billyea
Comment Utility
wait a second...what do you mean my comment's not helpful
0
 
LVL 9

Assisted Solution

by:doronb
doronb earned 50 total points
Comment Utility
Only adding my two cents here:

1) Break a large project into smaller projects (always helped me in the past)

2) Try to identify the whole cycle of interest in the project (i.e. If you're working on a Client/Server project, like a Newspaper Online Server for instance, remember that the newspaper material has to flow from the individual correspondant through a check-in process, to the Editor's virtual desk, together with page-design-layouts... so you have (Correspondant->Checkin) + (DesignArtist->Checkin) + (Editor->PageComposition->Checkin) + (EndUser->ViewPaper), 4 separate cycles to take care of)

3) Try to keep your client's involvement to a minimum of well defined and isolated points (i.e. don't let your client drive your programmer's nuts with GUI requests like make this label blue and bigger, when the project is still missing major functionallity)

4) There will always be something you've forgotten, it just happens like that, we're all humans and there's no possible way to think about EVERYTHING in a project beforehand, moral is, ALWAYS be ready for changes (i.e. today your clients view your NewspaperSite through an ActiveX, tomorrow, you may be required to re-write the WHOLE rendering engine as a Java Applet!)

5) Try to cement as many API's as possible (i.e. think about componentializing your software project with the help of USE CASE's and other methods, and once you have identified enough components to START declaring API's DO SO!)

6) Having said what I have about API's (Item #5), remember Item #4, be ready for your API's to change! (i.e. imagine how you can prepare for your R&D Manager telling you that your whole communication's layer is to be changed from RMI to simple TCP/IP using Sockets!)

7) Don't get carried away with layers of abstraction, use them when the need is there and valid (i.e. see Item #6, a layer of abstraction keeping the communication layer seprarate would later on help you easily replace the communication layer with another).

8) Make sure all API calls, data structures, component messages and constants are WELL DOCUMENTED and everyone on every team can access the documents!!

9) Use some CVS and regular backups for project documents as well as project code and templates.

10) Tackle harder issues first. (a personal thing with me, I always want to know the project IS doable, so I will first try to identify the points I don't know how to accomplish and research those first, once I know I can do everything, its easier sleeping at nights ;)

I hope this helps,
Doron
0
 
LVL 9

Expert Comment

by:doronb
Comment Utility
P.S. Cheer up, a Project without constant changes is either a Shelf Product, or simply a dead project ;)
0
 
LVL 2

Assisted Solution

by:billyea
billyea earned 30 total points
Comment Utility
I'm using the technique used by many of the major software companies out there. (Like Norton and Lavasoft).
I have summarized my steps here. Steps: 8

Step 1: What is the program's function? (I will be using 'function' in the non-programming term)
Step 2: Make your function not too broad, not too specific.
Step 3: Split the functions into separate screens, each with a specific purpose that fuffils your function.
(Norton Anti-Virus has one 'Status' screen, a 'Scanning', and 'Reports' screen all for the function: virus removal)
Step 4: Design the interface for each screen in Paint. For each component you add to the picture, write it down in a notebook along with it's location. Eventually you should have a list of all components and their locations.
Step 5: Convert the components you listed into code,images,and sounds (objects).
Step 6: Add the code to your program. Integrate your objects together. They should plug in nicely.
Step 7: Link the screens together like linking a webpage. (with buttons and stuff).
Step 8: Debug the program.
Step 8: Add External Extras (docs, copyright, JRE, etc)
You're ready!
0
 
LVL 2

Expert Comment

by:billyea
Comment Utility
P.S. Igonore my first comment, it was too complicated. :)
0
 
LVL 3

Author Comment

by:Unimatrix_001
Comment Utility
Ok thanks everybody...don't think I'll get any more comments here... Points split! :)
0
 
LVL 35

Expert Comment

by:girionis
Comment Utility
:)
0
 
LVL 14

Expert Comment

by:sudhakar_koundinya
Comment Utility
:-)
0
 
LVL 35

Expert Comment

by:TimYates
Comment Utility
:-)
0
 
LVL 3

Author Comment

by:Unimatrix_001
Comment Utility
Hehehe! Millions of smilies! :) :) :) Thanks again people! :)
0
 
LVL 9

Expert Comment

by:doronb
Comment Utility
Hope we helped :)
0
 
LVL 3

Author Comment

by:Unimatrix_001
Comment Utility
Yes! :)
0

Featured Post

6 Surprising Benefits of Threat Intelligence

All sorts of threat intelligence is available on the web. Intelligence you can learn from, and use to anticipate and prepare for future attacks.

Join & Write a Comment

For customizing the look of your lightweight component and making it look opaque like it was made of plastic.  This tip assumes your component to be of rectangular shape and completely opaque.   (CODE)
Basic understanding on "OO- Object Orientation" is needed for designing a logical solution to solve a problem. Basic OOAD is a prerequisite for a coder to ensure that they follow the basic design of OO. This would help developers to understand the b…
This tutorial covers a step-by-step guide to install VisualVM launcher in eclipse.
This tutorial explains how to use the VisualVM tool for the Java platform application. This video goes into detail on the Threads, Sampler, and Profiler tabs.

728 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

11 Experts available now in Live!

Get 1:1 Help Now