How I Planned / Estimated My Ruby on Rails Project

How big is this thing and how long is it going to take me to build? This is a question I am continually asking myself…for the first month or two of working on I did not have an answer to these questions. I had to make myself stop for a second take a deep breath to do some planning and estimating.

Project Process

Project Process

1. Build a site map / flow
This is important for me because it allowed me to quantify the number of pages that will need to be built. I ended up at ~25 pages.

2. Estimate Page Complexity
Once I had my 25 pages I applied a complexity to each page. (e.g. My landing page has very little logic on it so it is a low complexity page. The stats page is going to have a lot of controls and will require some complex SQL so I marked that page as high complexity.) Once I knew what pages I was building and the complexity of each page I looked at the remaining tasks (Wireframes, Scaffolding, Fleshing Out, Designing/Applying Design) and estimated the amount of effort for each task for a low, medium and high complexity page.

I ended up with the following table:

Project Estimates

Project Estimates

As I am completing tasks I am going back to my estimation sheet and adjusting the estimates based on the actual time so as the project progresses my estimates also get more accurate and hopefully future project estimates will be more accurate as I can lift my original estimates right from the estimates from this project.

For my 25 page project I ended up estimating it at ~65 days of work. Since I am not working on this full-time and really only have a few hours a day (or even less some days) it will take me significantly longer than 65 days to finish this. I am hoping to have a minimal viable product release that I can get friends to start testing in like 2 months (just in time for golf season) and have a polished public release by June or July.

3. Complete Wireframes
For the wireframes I am just doing pencil sketches of how I want to lay things out. This is important because it helps me identify the necessary components for the next step (scaffolding). The focus here is identifying components not making it look pretty.

4. Complete Light / Scaffolding Pages
What I am doing on this step is getting a really minimal page that has the components from my wireframes built. I am not worried about validation or making sure that my queries are super efficient or the look of the page. I am just trying to get a working page that has the functionality from my wireframes. I am not sure if this is a typical approach for rails developers but for me I just really need to see progress and given that I am only working a few hours a day here and there on the project I can’t realistically knock out a full fleshed out page in a single sitting so completing a light page in one sitting then fleshing it out in another setting seems to be more workable for me. During this step I am also creating basic tests (i.e. does the page load successfully, does a record get created during create, deleted during destroy, etc).

5. Flesh Out Scaffolding Pages
During this step I am making sure I have full test coverage for the controllers and models and that my code is good. Since I would have done the scaffolding for all my pages before jumping into the fleshing out stage I will have lessons learned that I can apply to my original scaffolding pages. I am also filling in any features which I didn’t apply in the scaffolding stage and am tightening up the attr_accessible, attr_accessor in the models and validations on the model layer and presentation layer (e.g. javascript in the views).

6a. Design Site
The site looks like shit at this point but it works perfectly! So I am going to spend some time in illustrator, photoshop and cranking out html/css to come up with a design that I can apply across the site.

6b. Apply Design to Fleshed Out Pages
Once I have the psd’s, html and css it should be pretty quick to go through the site and change all my views to use the design.

So that is it…my plan/approach for

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">