Close and Go BackBack to Viget

Prototyping with Production Purposes in Mind

Brian Talbot
May 05 2009
8 Comments
Brian Talbot - User Experience Designer :

(X)HTML Prototyping and Agile Development go hand-in-hand. When working in a faster, more iterative process, there are definite benefits to using (X)HTML to communicate an interface and the various flows users traverse through it. Along with those benefits come challenges that many UX professionals continue to wrestle with. Existing wrestling matches aside, another challenge presents itself once the prototyping phase has served its initial purpose. After that point, do you throw away that front-end development work or re-cycle it into the foundation of the project to be visually designed and technically developed?

The Scenario

On a recent project that involved developing an application on a very aggressive timeline, we came across that very question after jumping into agile project planning. During planning, Jackson and I were tasked with rapidly designing the application's interface. To save time, we agreed to divvy up the interface (based on common user flows) and sketch concepts as a first pass. Validating and solidifying these sketches by jumping into (X)HTML prototyping was our next step.

Following those process decisions, we tackled the question of whether to recycle or toss our work (once our goals were accomplished). For our team at-large, the decision to re-use the markup made a lot of sense given the limited schedule, small team involved, and collective experiences we UXers had in producing production-level markup. For the developers on the project, that meant using our prototypes to inform the application's modeling, structure, and eventual output. Recycling -- for the visual designer -- meant visually theming the interface we'd design, and then visually styling the markup we'd use for our prototypes.

With that plan in mind, we set out an iteration timeframe ahead of the designer and developers. A few busy weeks went by.  And while I am extremely proud of the work, collaboration, and final product that the team produced, the debate on whether or not to use prototype (X)HTML during production still wages on for me. Here's where my thinking on the topic:

The Benefits

  1. Efficiency — When prototyping in (X)HTML, there's the potential to save time and effort down the road by taking a first pass at items such as semantic markup, general interface layout, and content generation.
  2. Using a Universal Language — Producing a prototype in a format that not only your UX team knows (cough .graffle files cough), but your own cross-disciplinary project team has more experience with can have a huge impact on the team's understanding of the interface, and its scope and capabilities. (X)HTML is perfect for this, as often both developers and designers alike are more than familiar with it. The extra semantic weight, consistencies, and information (X)HTML gives the content within an interface can add to these groups' understanding of modularization, functionality, and even different states of the interface as it gracefully degrades.
  3. Eliminating Ambiguity — Recycling front-end development in future project phases means that elements such as status messages, in-page interactions, and various conditional states within an interface are at least noted, if not discussed and acted upon during the first UX pass. Often, when prototyping through paper and passing along, these are easier to overlook.

The Challenges

  1. Blurring Responsibility — Being the first individual to touch the markup means becoming the local authority on it, as well. This doesn't completely match up with the traditional list of responsibilities requiring the visual designer or front-end developer be the keepers of the (client side) code. It can mean extra efforts and time spent on maintaining and communicating practices around this code instead of on UX-related tasks.
  2. Conflicting Interests — A focus on using the medium of (X)HTML to review a more interactive form of an interface can be trumped by larger project and other long-term team concerns. While it is good enough for a proof-of-concept, is the markup generated production-ready? The markup may contain consistency and flexibility for prototyping purposes, but does it adhere to any internal or client-based standards? Repetitive items may be pulled into re-usable snippets to developers; however, is that code re-factored and abstracted appropriately?
  3. Pulling Multiple Shifts — In Agile iterations -- or, at the least, in accelerated waterfall process steps -- things move fast. As Richard Cecil notes, this can leave a UX designer with the simultaneous responsibilities of carrying forth research and making design decisions for an iteration two steps away; developing the prototypes for the next upcoming iteration; and supporting the validation and implementation of the markup from the prototype now being used for the current iteration developers and designers. While, with planning, this can be manageable, the extra focus involved with implementing markup from the prototype demands could dilute the amount of attention given to the quality of future iteration work.
  4. Trading “Popsicle Sticks and Paste” for “Brick and Mortar” — While the UX gains of prototyping in (X)HTML center on swift validation within an interactive medium, the tradeoff for those gains is, in many cases, stability in interface construction methods. Shortcuts are used to erect a scaffolding, styling used to show form for functionality's sake only, and states are described, but merely toggled without true logic. This philosophy certainly does not match up with the bulletproof-level quality of a completed application's logic and code. So, where does that transition happen from the former stateto the latter? It can be harder to cleanly move to the production-ready level when carrying over a foundation of assets created from the prototyping philosophy above. Artifacts of the scaffolding can easily be forgotten or misinterpreted and embedded within the production-ready work. Questions arise on if and how to logically segment the replacement of prototype-era with production-era work without disturbing other current prototyping or production work simultaneously happening.

For Future Consideration

Projects, especially in this economy, will continue to lean towards optimizing budgets and schedules. That means these scenarios of potential re-use aren't (nor are their benefits and challenges) going anywhere. So, how can we address the challenge of designing in the medium of (X)HTML, CSS, and JavaScript, and have our work used later in a project's life-cycle while still achieving the outcome we need from the exercise?

  • What Were We Here For? — Don't lose focus of the primary purpose of using HTML for prototyping. It is imperative that the goals of the UX phase (validating the effectiveness of the interface against user expectations and behaviors) are fulfilled through this exercise first. If that's not completed, you're running the risk of spending even more time revisiting this phase than if you had taken a more static and traditional approach to begin with.
  • Cut Your Work Out Ahead of TimePractice Parallel Track Development, which includes preparing the proper amount of research and design work in time to also participate in the support of the current iteration's implementation. Sketching, re-usable and lightweight (X)HTML and CSS Libraries, as well as JQuery trusted plugins and state handlers such as Polypage can help you avoid re-inventing the wheel and cut some heavy lifting time while still producing a representation of heavier functional designs all within single-iteration timeframes.
  • Play Well With Others — When working with designers and developers, communication is key. This means clearly communicating the state (e.g. in progress vs. complete vs. integrated by development) of prototypes to be handed off. We used a set of pre-defined classes on the <body> element of views to show their status of completion in attempt to avoid extra questions and confusion. Controlling the various revisions through version control of prototypes is a must as well with this. Virtual (through Campfire in our case) as well as in-person walkthroughs and Q&A sessions were a common occurrence during our collaboration to help with measuring scope, receiving team feedback, and prioritizing tasks.
  • Reach Out to the Experts — If you're rolling your interface design work into an application or CMS, chances are you'll be working with not only client-side languages, but server-side technologies wielded by developers as well. And that (X)HTML you've written? Down the road, it is going to have to accommodate the visual designer's creative vision and theme. With those things in mind, reach out to the developers for a basic list of server-side syntax (includes, partials, links to other views, etc.) that may be helpful to you in expediting your work and revising it in the future. Similarly, asking for and adhering to any web and front-end development standards or conventions your visual designer may have will go a long way in providing a solid foundation.

And Yourself?

How common is the re-use of UX (X)HTML Prototypes in production in your experience? Do you think its valid to re-use the front-end development work completed as part of the prototyping throughout the project? If so, do you have any thoughts or resources you use for support?

John Grimes said on 05/07 at 02:53 AM

Great article.

My view is that XHTML prototypes / wireframes should absolutely be reused into the production process. It is important to have a sense that, even from this early stage, you are building the foundations of the actual product. It is also important to accept the fact that pages and requirements will change throughout the process, and that is OK.

I am not big into creating a lot of peripheral documentation that mimics what the product is supposed to be. I think that all this creates is a maintenance nightmare and the potential to lose touch with how things will flow on screen early on.

The application IS the specification - a specification that gets more and more detailed as wireframes are converted into front-end coded designs, and as these are integrated with back-end code to create working pages.

Communication is obviously very important to a process like this working, and I think that everyone on the team really needs to be in agreement as to what best practice is in terms of wireframing and the process in which that is translated into front-end design and code.

At the agency I work for, we use tools such as the 960 grid system to minimise the amount of work that goes into producing interactive wireframes, and it works really well in freeing up that time to actually think about the site from a functional perspective.

Instead of inventing new and more rigorous forms of documentation to combat change in your project, why not funnel that effort into streamlining the design and development process, which will allow you to be that much more agile when requirements change (because they will).

Jackson Fox said on 05/07 at 12:13 PM

@John Out of curiosity, what’s the final deliverable for you? Front-end buildout? Working app? I’m really keen on making this process work for us, but one of the other issues we’ve encountered is how to prototype new features mid-stream.

The initial prototype has done it’s job, and the code has been re-purposed into the working app. But several weeks of development have led to the prototype code and the app code diverging. Now I need to add a new (large) feature, and I want to start by prototyping and testing it. It seems like I have to start all over, copying the code from the app to create my new prototype in order to make sure I’ve accounted for changes in the app since we did the initial prototyping.

The one nice thing about throwing away prototype code is not having to keep up with production.

John Grimes said on 05/07 at 12:45 PM

@Jackson, thanks for the reply.

My question is - why do we need to have this concept of separate prototype and product? I think it is more of an evolution from prototype to product, rather than a case of throw away the prototype, then start on the product.

My approach to the new feature would be to create XHTML wireframes within a test version of the site and link them into the appropriate existing areas of the site. Wireframe new parts of existing pages within the pages themselves.

If you haven’t already, give the client access to the test site, and let them get a feel for how the new functionality will fit into the existing site. All they will see in new areas at this stage will be grey boxes with accompanying explanations.

When they are happy with the wireframed new feature, apply design and styling to the wireframes to make the new feature visually complete for the client.

Finally, create the back-end functionality necessary to integrate the new features into the existing site.

Agencies that are worried about sign-off at different stages of the project should use a source-control system, and get clients used to the idea that they are signing off at the given level of detail (wireframe, design, functional site) based on a particular tagged revision in the repository.

I think that even though it is natural to not want to show the client your work when it is in an unfinished state, the benefits of bringing the client in on the development process are great.

Why not give them access to a version of the site which you release to every week? They will be that much more invested in the process if they can see the site grow from wireframes to a finished state, and they will better appreciate the work that goes into each request they make.

Jackson Fox said on 05/07 at 02:33 PM

@John We’ve been experimenting with a process that’s pretty similar to what you’ve described. Our development work is predominantly Rails-based, and we use a plugin that allows us to put our prototyped pages directly in the Rails app, and to link between the app and the prototype.

Thanks for your thoughts on the process. As I said, I’m really hopeful we can keep working out the kinks in our prototyping tools, and it helps to talk through them.

Brian Talbot said on 05/08 at 09:41 AM

@Jackson and @John, thanks for the thoughts. Its great to continue this discussion and find out how to make the process run smoothly in this context.

@John, I’m curious how you’ve managed the wireframe styling/presentation of new pages when working in a currently designed app/site. Do you have separate CSS files for wireframes and the final site design? Also, when working in these new pages, how do you find yourself describing interactions, states and functionality?

I like the idea of making this work more transparent to the client through your suggestion of weekly releases. It definitely fosters education on the design/UX process and why its there. I’d assume you’d need to set expectations with your client in a few ways with these releases, but aside from that, have you noticed any downsides to working this way?

John Grimes said on 05/09 at 03:29 AM

@Brian I have played around a bit with having a ‘wireframing stylesheet’ that I can include in and out when needed, but I think it is really only necessary when you want your interactive wireframes to look particularly impressive.

I find simpler and more efficient approach is to just create a bunch of grey boxes (using divs, 960.gs and some minimal CSS) to represent the layout of the new features, then fill those boxes with textual information about interactions, states and functionality. In the case of forms I just go ahead and markup the forms straight off. It is a very low-tech approach. :)

There is very little duplication of work doing it this way because you need that markup anyway, and the only CSS you need is to color the boxes different shades of grey to differentiate them from each other.

Incidentally I found a jQuery library the other day that you could use if you want to get a bit more sophisticated with representing different states in your wireframes: http://24ways.org/2008/easier-page-states-for-wireframes

Hector Hurtado said on 05/14 at 01:37 AM

I have nowhere near the experience of you guys when it comes to agile processes in teams: at my day job, I design and develop, which amounts to a one-man band (just like my evening free-lance activities), but here’s my 2c on the interesting subject.

I found that XHTML prototyping makes sense when I free-lance and have a close relationship with my client. With less parties involved, I can take the time to explain UX, aesthetic, and behavioral decisions step by step, and gain the trust of the client by involving him that much in the process.

On the corporate level, however, some rules are fixed through strict guidelines, others through experience, and yet others are my personal view on the question after testing what works and what doesn’t. Showing an XHTML prototype or even a wireframe to the hierarchy is risky at best, for the amount of questions regarding revisions is unlimited. This environment leads me to favor non-recyclable work that is really explicit of the expected production level: a photoshop comp, sometimes as stand-alone, sometimes as background of an XHTML-enhanced prototype.

I guess my goals are different depending on the environment… In the first, it is a real dialog. In the second, I need validation as quickly and painlessly as possible. The discussion has not mention the client’s experience.

Ashley said on 06/02 at 01:40 AM

I work on a good deal of sites going through the iterative design process. I agree that clickable prototypes are definitely the way to go, but I have also come across the same debate with whether or not the (X)HTML I or my team has created should be used in the production version of the application. We’ve done everything from using tools such as AxurePro to simply hand-coding HTML pages. One of the other hurdles we’ve encountered is producing prototypes for a client who is blind, so creating section 508-compliant wireframes is necessary for him to grasp the full extent of what we’re trying to achieve. In that specific case, HTML is really the easiest and most reliable option. A CSS for the wireframes was created to very sparingly match the visual look match the pre-existing design, solely so users could understand how it would fit with what has already been done.

On the 508-compliant project that went through ten iterations, I would copy the entire set of wireframes and add in the new functionality. The previous iteration’s signed and approved wireframes were saved for baseline purposes. Inevitably, post signoff, there are always additional changes, and when necessary, the wireframes would be updated. However, I still haven’t fully reconciled how to ensure the wireframes completely match all the functionality of the production version. For the most part, the last set of wireframes is a reasonably close match to production.

There has been some talk of creating our own custom UI control library with a corresponding list of visual icons. The IAs/UI designers could use the icons in the design and the development team would then know that those match up to a specific component in the UI control library. However, we haven’t fleshed this out yet. It seems like it would help by eliminating the IA/UI designer’s need to spend excessive time tweaking the HTML prototype, and the developers would already have a reusable component to start from and customize as necessary. It sounds efficient in theory, but I’d be curious to know if anyone else had implemented a solution of this sort.

Commenting is not available in this weblog entry.

Discuss Web Strategy With Viget Labs

Contact Us

Have any questions, comments, ideas, or secrets to share? Let us know.


How many days in a non-leap year?

Sorry, you need to have Javascript enabled to use this form. (Don't blame us, blame the spammers!) If you'd like to contact us, please visit our Contact page.