I had an experience recently where we got deep into the project and there was a fundamental difference between my understanding of what the client wanted and what he actually wanted.
Correcting the issue wasn't a major deal because the code was modularized and we needed the functionality anyway. Our communication issue was in the context of how the feature would be implemented.
I thought about it after the fact and realized it was my fault from the beginning. I didn't do enough in the planning stages to ensure something like this wouldn't happen.
Based on this experience, I'm refining my client onboarding process to look like this: Step 1 - Discussion
Always start with a discussion around three topics: Budget, Timeframe and Complexity. In that order, every time, without exception. The size of budget will determine the timeframe and the answer to Budget & Timeframe allow you to define how much Complexity (i.e. features) can be added to the app for the allotted budget.Step 2 - Wireframing:
I'm not a designer. I can design fairly well with an existing template or color scheme but ask me to initiate a mockup from scratch in Photoshop and you won't be happy with the results. It's the one professional skill that I know I'll never excel at and I accepted it a long time ago.
Consider this wireframing for a front-end developer who has NOT been given mockups from a UX Desginer...
I like to use Evernote to figure out what pages the client will need and then under each heading use a list to define what features, fields, etc.. should be on that page. Rinse and repeat.
After you've finished, you have an outline to work from. Send this outline to your client for any feedback but tell them not to focus on too many details yet. You have to reiterate that it's a basic outline of major components on each page.
Then, fire up Bootstrap (front-end framework)
and get to work prototyping the app. Once the basic HTML pages are completed, run it by the client. Make any changes to the UI at this point.
At this point, we're fairly deep into the project but the guts of the work hasn't started yet. Your client will have an idea of how fast you work, the quality you produce, your attention to detail, etc..
Any problems the client may have with you will probably surface at this point and can get ironed out before moving on to actual coding where the bulk of their cost will be applied.Step 3 - Unit Testing:
One thing I've learned is the power of descriptive Behavior Driven Development (BDD)
using Jasmine (framework)
I won't get into the guts of BDD or Jasmine here, but basically you write user stories that describe eventual functionality. The real kicker is that the user stories are easily readable by your client.
Remember all those pages you wire framed in Bootstrap earlier? You will need a user story for each one of those.
At this stage, you are getting deep into planning the app and the client can provide feedback on any parts of the process. How users interact with UI elements, Form field values, etc.. will all be answered at this phase so there is zero ambiguity.Step 4 - Build The App: