Page 1 of 1

First Major Project

Posted: Tue Feb 06, 2007 9:35 am
by TheMoose
So I've got this genius (yes it's genius! :)) idea of a website that I want to build, and so far I haven't found anything similar already in existence, so it would be somewhat unique (there are 'small' versions, but are very targeted, and/or closed to the public). This is going to be my first real self-motivating project (non-work project) where I come up with all requirements, all design decisions, and all programming decisions.

I've done a lot of the basic precursor steps, such as come up with an idea, research to make sure that what I'm going to be investing time and money into is worth it (doesn't already exist in a major setting), decide who I want to be my target audience, and do a bit more research to make damn well sure that I won't be spending this much time on something that has little to no potential.

I won't give out all details of the site, because I like being secret, and because I'm paranoid about idea-theft, but the gist is that it's targeted to an education environment, both students and teachers, in all grades or levels of education. It's a "social networking" type site, but has a form of moderation/validation (at least initially) to the content.

I've actually drawn out basic concepts of the major pages that I need, and the overall look/feel that I'm going for, as well as some of the basic database schema that I know will be required.

There's no real definitive question to ask, other than just tips/advice on what sorts of things I should focus on, what should I look out for while designing, and "best choice" approaches I should try and abide by.

Any advice is appreciated, as I want this to be a learning experience as well as a challenge both conceptually, and programmatically.

Oh, and I apologize for the lack of descriptive title, I have no idea what to call it.

Posted: Tue Feb 06, 2007 11:46 am
by Maugrim_The_Reaper
Decision 1: To use a Framework or not - I'd go with yes if you want to get something workable off the ground quickly (as a bonus a well designed framework like the ZF can be replaced over time if you find a need to optimise later on.

Decision 2: Can you drill your requirement all the way from a high level overview (a Map of sorts) down into bite sized coding tasks (e.g. UML or Use Cases, followed by some unit tests (if following a TDD approach)). Or will you play it by ear (which can work if the amount of code is limited and you plan for unexpected delays in your schedule) and take an iterative approach. Not that the approach should be anything BUT iterative...

I find those tend to be my first two concerns once I have requirements... Sure others will inevitably differ. You'd need to be more specific to get anything beyond general advice (in terms of code, not your superduper kick-ass idea!).

Posted: Tue Feb 06, 2007 12:02 pm
by TheMoose
That's exactly the information I'm looking for though, is the general stuff that I normally would not think about. A lot of intricate coding questions are things I can ask later on once I've got a basic foundation to where I want to go, what I need to get there, and the time it will take me to reach that goal.

The framework issue was one of the first that came into my mind, as I was debating about designing my own (I have a decent one that I use/work on currently, it doesn't have all the features that ZF has, but so far it has suited my needs perfectly). I enjoy coding for fun, and I look at the long run of either having to say I used ZF, or that it was a completely custom framework, designed and coded by myself specifically for the site. It allows for a more directed/niche style, but it also doesn't lend well to reusability (which is what a framework is normally for). ZF, on the other hand, is a well-known, well documented, and well respected (from what I've seen so far) framework that is very powerful, but won't necessarily have all the features that I would possibly need (unforeseeable features that turn into things that are necessary). I wouldn't see that necessarily as a bad thing, but having a lightweight framework built specifically for the site or using an existing framework is a decision that I look heavily upon as it changes both timeline and potentially certain features of the site.

In terms of the second point, I plan on making this as modular as the project allows. I don't want to break it down into super tiny chunks of code "snippets", but I don't want it to be bloated with procedural nonsense that can be easily consolidated. Before releasing, I definitely plan on having complete unit tests to make sure every aspect of the site does not come back with unfriendly error codes and the like. I have never used UML, so I'm not exactly sure if I will model each aspect of it or not. I'll look into it for in-depth modeling, but so far I've got my basic hand-drawn concepts that will be used as a foundation until I can order some more concrete.

Posted: Tue Feb 06, 2007 2:07 pm
by Christopher
I think I would do two things:

1. Use an existing framework like ZF because it will allow you go add more stuff easily down the road (even if it may be slower for you initially). While your framework probably has similar core functionality, something like ZF has tons of add-ons that you would have to code from scratch.

2. Build only the "somewhat unique" part first because that's where you believe the value is -- then expand from that. You will probably throw out the first version or two so avoid building infrastructure (even though it is really fun to do ;)) because it's not worth it at this point.

Posted: Tue Feb 06, 2007 2:35 pm
by TheMoose
arborint wrote:I think I would do two things:

1. Use an existing framework like ZF because it will allow you go add more stuff easily down the road (even if it may be slower for you initially). While your framework probably has similar core functionality, something like ZF has tons of add-ons that you would have to code from scratch.

2. Build only the "somewhat unique" part first because that's where you believe the value is -- then expand from that. You will probably throw out the first version or two so avoid building infrastructure (even though it is really fun to do ;)) because it's not worth it at this point.
The second point is similar to what I think I might do, which is just creating a fully functioning prototype to see if I like the original functionality, and whether or not I need to add things, or take things away, as well as the overall feel I get while using it. Then once I get the feel of how I want it to work, then I add in the heavy underpinnings and make it work as flawlessly and seamlessly as possible.

Posted: Tue Feb 06, 2007 8:29 pm
by Ollie Saunders
Make sure the reason what you are going to build doesn't exist yet isn't because its really difficult to do. I fell into that trap and whooops 8 months of my life disappears :P

Use a framework. Unless you are some kind of programming god you won't be able to compete with the kind of value that something like ZF will add, not even me ME! could compete. I know its staggering because I'm amazing! I'm joking of course :P. Also ZF is modular you can use as much or as little as you like and knowing it will likely make you more employable.

Seriously, use unit testing. The most obvious benefit I found from TDD besides its bug detecting capablities is that is forced me to make my designs a lot better. It is really a great skill to develop.

Oh and good luck!

Posted: Wed Feb 07, 2007 3:14 am
by Maugrim_The_Reaper
The second point is similar to what I think I might do, which is just creating a fully functioning prototype to see if I like the original functionality, and whether or not I need to add things, or take things away, as well as the overall feel I get while using it. Then once I get the feel of how I want it to work, then I add in the heavy underpinnings and make it work as flawlessly and seamlessly as possible.
Just remember that a prototype can be "dirty", i.e. badly coded and full of issues. Once you have something you like, use the prototype as a reference but not as the basis for the real deal.

Another thing I find useful is if you find the ZF or other (hopefully modular) framework is being particularly slow, you can replace the slow component with something much faster and leaner so long as it follows the same API as the original. I have a few apps recently using classes in PHP4 which are a close match for the ZF interfaces - standardisation means anyone familiar with the ZF can use it in seconds without needing a manual.

So don't be afraid to use a framework based solely on optimisation concerns - you can switch out and replace pieces quite easily.
I have never used UML, so I'm not exactly sure if I will model each aspect of it or not. I'll look into it for in-depth modeling, but so far I've got my basic hand-drawn concepts that will be used as a foundation until I can order some more concrete.
Hand drawn models are a good start! I don't use UML all that much, esp. since I started practising TDD which sort of makes long distance planning either difficult or defunct depending on what I'm working on. I find use cases and unit tests which focus on what a particular component or set of classes must accomplish at a minimum to be the most useful. I'm not sure what your Unit Testing experience is like - in case it's at the beginner level I'd have to note it tends to be painful to get started in because it takes a bit of hard slogging before you begin to realise its benefits. If you ever reach the stage where you think they are wasting time drop by here again and we'll offer some tips.