Newby: General Application Design Question

Greetings,
I have a fairly simple [I hope] high level question:

What is the best approach for developing a rails application?

For example:
1. Requirement analysis with client
2. Design of web site [layout, css-slicing]
3. Coding
4. Testing

I know this sounds very simple, but I have really come to enjoy
scripting RoR applications for my work and office, but I cannot figure
out how professional application designers approach this very basic
need. Do you professional guys usually have a design and layout that
the customer likes before you code, or do you code an barebones
prototype first and make sure the customer is happy with functionality
before you do any design?

When you do decide to focus on design, do you do it yourself
[e.g.Photoshop images sent off for CSS slicing] or do you farm that
out to a professional web designer?

Thanks in advance.
Bruno

Hi Bruno,

It depends on budget, priorities and the type of application you're trying to build. I often work with ad agencies on reasonably simple cms and e-commerce sites. For those, we just agree high level features, they work with the client on an approved look and feel and then we turn the provided psd files into HTML/CSS and drop them into the system.

For the 20% of the projects we do that are more functionally interesting, we'll often do a short fixed-effort discovery phase to clarify business intent, audiences and the key tasks each role needs to be able to perform (user stories). We'll also do spikes around any large areas of tech risk like new third party API integrations and will then provide an estimate and a suggested dev plan (usually scrum with 2 week iteration for greenfields, sometimes kanban). We don't schedule all the sprints - just the first sprint or enough stories to fill our kanban WIP limits.

In parallel with the dev, the designers will work with the client on look and feel, but I often like to get most of the way there functionally before getting locked into designs that may not be consistent with the UI requirements from a usability perspective. I also try for much more simple and flexible markup on such projects so if we have to iterate over the designs, we can do so fairly inexpensively.

In terms of testing, we discuss business objectives and how they could be tracked before we start the project so the client can measure some kind of ROI. We use cucumber for acceptance testing (as part of agreeing story specs so usually as part of sprint planning) and either rspec (for ruby) or a similar BDD influenced framework (e.g. spock for Groovy) for unit tests.

Most coding is 1 up, although we pair on anything interesting and I pair whenever I meet someone at a conference I'd like to learn from. We use git for source control and projects with more than 2 devs we always use Hudson for Continuous integration.

Best Wishes,
Peter

on sure thing you have wrong is this

  1. Coding

  2. Testing

it should be

  1. write test
  2. fails test
  3. write code
  4. pass test

repeat as necessary.

Also try to convert what the costumer tells you into stories, and let that guide your test and consequently your code. Functionality should be almost the same( or require minor changes) no matter the appearance of the site, like peter said try to “get most of the way there functionally before getting locked into designs”.

+100 on test first.

Good reading on software development in general includes “The Pragmatic Programmer”, “Extreme Programming Explained: 2nd Edition” and Mike Cohn’s “Agile Estimating and Planning”. There are a million good books, but those three wouldn’t be a bad start to any programmers bookshelf.

There’s also a great rspec book out there for the details of implementing testing in Ruby using rspec and cucumber. http://www.pragprog.com/titles/achbd/the-rspec-book

Best Wishes,

Peter