I sort know how to code in PHP and make use of MySQL but where I really need to improve is on structuring my code, best practices etc so I thought I'd have a go a developing a relatively simple browser based application. So here is the idea from a user's point of view you have tree structure of subjects (so you can have for example Physics>Quantum physics>...) that a user can add to/modify over time as needed. And then the user can create questions and answers which can be placed at some point(s) in the subject tree. The idea being that the user can then do one or a combination of the following: choose what he wants to test his knowledge/understanding on (based on the subject tree) have the questions likely to be asked based on past performance (i.e. those you havn't got right a lot) have the questions likely to be asked based on how long ago they made their last attempt even if you've been getting them right (to make sure you havnt forgotten) have questions asked based on difficulty So for some general feedback What do you think of the idea? Feature wise could you suggest anything without getting too complicated? From a design standpoint Im thinking of just storing the questions in a db table consisting of questions and answers. Im going to leave it up to the user to actually say whether he got it right or wrong to allow for questions that aren't simply multiple choice or have an answer thats simply a number, a single word etc. However, looking at it though this seems the way to go to avoid getting really complicated I'm not sure how I could also allow for "dynamic questions". That is, for example, for arithmetic, have a question be x + y where x and y are randomly assigned values and then have the answer computed based on what values were produced. My only thought is to have another column in the db table where I can specify it as being "dynamic" (i.e using a bool) and then store the appropriate php code.