BIG project?

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!
Who is Participating?

Improve company productivity with a Business Account.Sign Up

TimYatesConnect With a Mentor Commented:
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

Unimatrix_001Author Commented:
What sort of detail do you go into?...for example clicking button A brings up this dialog and clicking button B closes it etc...
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 :-)
Get your problem seen by more experts

Be seen. Boost your question’s priority for more expert views and faster solutions

JohnnyAffaConnect With a Mentor Commented:
study software enigeering and its phases!

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

actual coding is one of the last things you do!

girionisConnect With a Mentor Commented:
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.
Unimatrix_001Author Commented:
Hmm...Mind if I leave it open to see what other people say?....
Not at all :)
In fact you should leave it open in order to get more ideas :)
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.
sudhakar_koundinyaConnect With a Mentor Commented:
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

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.

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.
mmmm....  that was helpful

Unimatrix_001Author Commented:
...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...
okie, I don't...much
wait a second...what do you mean my comment's not helpful
doronbConnect With a Mentor Commented:
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,
P.S. Cheer up, a Project without constant changes is either a Shelf Product, or simply a dead project ;)
billyeaConnect With a Mentor Commented:
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!
P.S. Igonore my first comment, it was too complicated. :)
Unimatrix_001Author Commented:
Ok thanks everybody...don't think I'll get any more comments here... Points split! :)
Unimatrix_001Author Commented:
Hehehe! Millions of smilies! :) :) :) Thanks again people! :)
Hope we helped :)
Unimatrix_001Author Commented:
Yes! :)
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.