It’s been over 3 weeks since I graduated from Enspiral Dev Academy (EDA) and more like 3 and a half since I last coded. That is scary! I learned it all so quickly, could I lose it just as quickly from lack of use? It’s not like I felt super confident about my skills in the first place – I was proud of myself for learning it and fairly confident in my basic skills, but not super confident – so now I’m really worried.
But I’ve made a plan – when in doubt, schedule your life! Nothing gives you a feeling of control in this crazy world like a colour coded calendar and a plan of attack. I have an idea for a website I want to build and an idea of how I will approach it. Hopefully, I’ll be able to get back into it without too much trouble or the need to take the course all over!
Today’s task was to write out some notes for the new website, planning out the user stories, the flow and the database associations. The user stories went pretty well, I know what I want this site for and what it should do, so there were no problems there. I made a messy attempt at wire framing and have a good idea of how it will look. All good so far.
But trying to figure out the associations has left me stumped – I can’t remember if the products belong to the customer and to the order or just to the order and then the order belongs to the customer. Are the orders a join table or polymorphic or has many and belongs to many? Uh oh. The RailsGuides aren’t much help, or else I just can’t make sense of ActiveRecord Associations through the dawning realisation that yes, I have forgotten everything. Crap.
I’m going to go and stare at some code and hope it all comes flooding back like magic.
Tips for Planning a New Project
One thing I have learned in the short time I’ve been doing this coding stuff is that it is important to sit down and plan out your projects before starting to code. Get a clear idea of the overall nature of the site before you start to build it. Some people might be able to dive right in without taking this initial step and have it all work out as it should, but I definitely cannot work that way. So here’s what I do:
1. User stories – think of all of the things that a user can/should do on your site, and write them down. Don’t worry about ordering them to start with, just brain storm everything you want your site to do. As per my EDA instruction, I structure them as so:
As a user, I want to:
- sign up/log in to the site
- access my account
- change my info/password
- see my past orders
- see a selection of products on the home page
- click on a product to find out more about it
- add the product to the shopping cart
- remove items from the shopping cart
- buy the items in the shopping cart
And so on, and so forth. Spend some time thinking about every single thing a user should be able to do or see on your site. When you have them all – or all you can think of at this point, as you can always add more later/as you think of them – pull out the absolute necessities (as opposed to the nice-to-have, fancy as features), the things that will create the most basic, functioning version of your website. This will be your Minimum Viable Product (MVP) and will be what you aim for first – it’s always good to aim for the basic working app to start with – adding all of the other mind-bogglingly awesome stuff after that.
2. Wire framing – According to Wikipedia: ‘A website wireframe, also known as a page schematic or screen blueprint, is a visual guide that represents the skeletal framework of a website.’ While that sounds quite official and intimidating, all it really needs to be is a sketch of the flow of your site. What your home page will look like, what buttons it will have and where they will lead. I am terrible at drawing, so as I mentioned above my wire frames are always really messy, but as long as I can make sense of the chaos, that’s all that really matters. Here is a photo of the one I did for my current personal project:
I also jot down the languages/libraries/gems/apis I plan to use for the project as well, just for reference.
I’m still a bit of a luddite I suppose, so I do all of my planning the old fashioned way, on paper – gasp, shock, horror! But there are programs that allow you to do wire framing electronically – during our final project at EDA, one of my team members used Balsamiq to do a wire frame of our mobile app, and it was a great tool. But I am still attached to the pen and notebook, you will have to pry them out of my cold dead hands, I’m afraid.
3. Database Tables and Associations – Some people might not find this as necessary in the initial planning session for a project, but I personally like to figure it out along with everything else. I jot down all of the tables the database will need, the columns for each and the associations between them. I find it helpful to have this stuff in my head when thinking about the overall app, as it just helps to put it all together for me.
(Note: In case you were wondering, I later figured out the associations for my orders table – it belongs to both customers and products, each of which have many orders as well as have many of the other through orders. Huzzah!)
Anyway, that’s my process, such as it is. I understand that this is a simplified version of a project plan – if working for a client, it might be necessary to be a lot more structured and detailed in your plan. But for a personal project, this should do the trick – it doesn’t have to be too formal!
I hope you find this helpful. If you have any other tips for project planning that you find work well, please do share them in the comments below. Thanks!