views:

384

answers:

11

What is your method of "mapping out" an idea before creating it?

Say I wanted to take on a big project, for example at the scale of a site like Facebook or MySpace. What planning/design steps should I take before I start the actual work?

For example, should I map everything out page by page (their functionalities, data, etc.)?

A: 

My first step would be to sneak away as fast as I can from a person as ambitious, uncreative and stupid enough to request that...


NOTE: For the record this answer was in response to the question as originally stated (and this answer was upvoted many times, while the question was downvoted):

lets say someone asks you to clone myspace or facebook (just an example) how would you procede in the creation. do you site down and map page by page (its functionalities, data etc) before beginning in its creation. what are your procedures?

thanks in advance.

Since then, the question was edited into a reasonable question, so I gave a new reasonable answer (currently the top answer). But I'm leaving this old answer in response to the old question. either way its wiki, so I don't care about the down votes, but I think its a pity this answer got down voted this much, since I think its a good answer to the original question.

Robert Gould
the reason i am asking this question is because i want to know how to map out an idea before creating it. i dont necessarily mean to clone something.
@Robert: While I may agree with you, you should have make yours as a comment and not an answer. At least make it wiki
OscarRyz
@Oscar I didn't expect to get upvoted this much.... Anyways bikeshed or what not. Wiki now.
Robert Gould
@Sarmenhb I'm giving you advice from experience. I've been in similar positions, but you MUST realize it's true, and that any large site like MySpace was made by serious teams with vision, not a group of copy-cats. Anyone delusional enough to help you doesn't have what it takes to succeed in this
Robert Gould
by the way, im not from a company. by purpose in this is to teach myself how a person would develop such a vast application. the only knowledge i have is being able to write an application that can read and write from the database. basic apps. but i have no clue how a team would develope a huge ap.
@Robert Gould: C'mon, cut some slack. Asking how to approach a big application is a good idea. I think it's perfectly realistic to just plan something large as a single person (in fact, I did just that), if you avoid too much detail and get enough people at implementation time.
Hanno Fietz
@Hanno Fietz: In Robert's defense, the original question the OP asked deserved this sort of response; He's since provided a good answer to the rephrased question: http://stackoverflow.com/questions/621140/how-do-you-map-out-an-idea-before-implementing-it/621224#621224
Daniel LeCheminant
@Daniel, @Robert: I see. It's really not easy to figure that out once the question has changed. You'd have to look at the revisions and the age of the posts, right? I agree about the original question.
Hanno Fietz
A: 

If you work for the same company as this person, start by getting everything in writing so you aren't the one to take the fall when the inevitable happens...

Ant P.
whats the inevitable? You don't think its possible to successfully build a SNS? he did NOT say he wanted to compete with FB or MS -
Scott Evernden
My post makes more sense when read as a response to the question originally asked.
Ant P.
@Scott: What the OP _originally_ said (http://stackoverflow.com/revisions/621140/list/ about cloning other sites) was pretty silly, and Ant P's response was appropriate at the time.
Daniel LeCheminant
+2  A: 
  • Make a list of all the features that site have.

  • Make a list of nice to have features.

  • Make a list of the weakness of the site.

  • Order that list and prioritize the items that will be built first.

  • Identify what will be possible to do and what is not.

  • Meet with your customer and present these results.

OscarRyz
+6  A: 

For a large project first think of a one-liner to description of your site (try to not use any buzzwords here). Next think of three design maxims (rules your design Should never conflict with). Then draw a few views and think up a few user cases (1 day) then work in code for 2 weeks (this will be a throw away prototype so just work as fast as you can forget about bugs and details, don't worry about code smells or design patterns, just make as much as you can), then revaluate all the steps above and throw away your two week prototype, and begin your project in a serious manner applying solid engineering and design. After a month has gone by evaluate your(team) moral and get feedback. If it all seems to be going ok, continue, you got a long ride ahead, otherwise just give up, do a postmortem, and start over with new goals.

Robert Gould
INteresting and helpful +1 :)
OscarRyz
+2  A: 

I always start with the user interface design. I figure out what the user should be able to do and what controls I will give them to do it. Once I get that laid out in a way I like it, then I start with the code "wiring".

gnovice
+1  A: 

Usually I do a mindmap of

  1. problem I am trying to solve,
  2. translated into exact requirements,
  3. then mapping that to user workflows.

The cross linking features of mindmapping softwares make it lot easy. Since mindmapping is 'kind of freeform', I end up concentrating on the 'task' rather than 'representation' (e.g which type of UML diagram should I use to represent this) ?

Once initial ideas are clear then I can work on project plan, spec/design documents using UML for more low level details. This approach usually works well for me.

To see if it works for you or not, you can use FreeMind (opensource mindmaping software, good but currently limited functionality). Then You can try Mindmanager or iMindmap for mindmaping. Both integrate well with other Office products.

Nitin Bhide
+1  A: 

Usually I start out by grabbing my scratchbook and just start writing down what I want as in terms of features, this should be quite detailed. And can be quite messy with every thing scrambled together, if so, when you're done make an 'official version' of you're ideas on paper (REAL pen and paper works best for this in my opinion).

Then I start making some scetches of how the pages would look like, what information it must contain and translate that to a global database design. Then work that global design to a more advanced level where all pages come together, with relations between tables and stuff.

After that I build up the most important pages on a code framework (I always make use of a framework, if you don't then forget the framework part), and by 'most important pages' I mean in for example a blog that would be the posts. After that build the not-so-important pages, in case of a blog that could be an archive of posts.

If you have that done, put the code together with a design, or do that while coding if you do not seperate code from HTML/CSS/JS.

Oh and yes, do NOT expand your first idea along the way. Just write that down and implement that afterwards. So if, in case of the blog again, you think half way you want Youtube tags in you're BB-code, write it down. Add that later, offcourse before you're initial site releases.

That's my workflow, at least a basic basic, basic description of it.

akisthetool
+1  A: 

Start with "paper prototypes", i. e. take a pencil and sketch each page very roughly. This lets you start from the user perspective, which I think is a good idea.

You can then use the sketches for a first hallway usability test and later as the basis for "wireframes" you would give a web designer to work from.

If you've gone through the complete site once, you probably have a good idea of what the backend should be able to do. You can now use your page sketches and compile a list of the actions a user can trigger by clicking on things. This is the raw material for designing the server-side API that the frontend can call.

Using the calls that need to be served, you can design the backend: What functionalities group nicely, what data needs to be fetched, what do you need to store between page calls (== Session variables) etc.

In this process, I have fared quite well by postponing technology decisions (frameworks, protocols etc.) and even class structure etc., until I've gone through the whole thing once in terms of "what things should do what to what other things" (I guess there's a better term).

Hanno Fietz
+1  A: 

I think I would start with an open-source SNS solution that comes close to what you need and then figure out how to add use-specific plug-ins, modules, and themes that achieve your purposes. There are a lot of em out there. Building from scratch is going to take a lot more effort and planning. Most SNS functionality is not worth re-inventing. Focus on what will make your site unique and build upward toward that.

Scott Evernden
+1  A: 

I'm a fairly visual person when it comes to designing software so I sketch out dataflows, class hierarchies, UI and flow charts on whiteboards and paper first.

Butcher paper and colored pens can be particularly fun to use as it's 3 feet wide and comes in 100 foot rolls. When you've got a design that's satisfying or sufficiently complete, tear it off the roll and pin to the wall. Update as necessary.

That technique has worked for some large refactors as well as new projects.

John Fricker
+1  A: 

You could start with something very simple and then add features a little at a time. You may reach a point where you want to start over, but the groundwork you did will be beneficial. Or you can try to do the whole thing at once, in which case you'll need the advice already given in the other replies.

One more idea: Specify those features you are not going to include, and other restrictions. These are called constraints, and are as important as the rest of the plan, as it gives you boundaries so you know when you're done planning!

gbarry

related questions