Read my latest article: 8 things I look for in a Ruby on Rails app (posted Thu, 06 Jul 2017 17:59:00 GMT)

Keeping Prototypes is a Bad Idea

Posted by Sat, 11 Mar 2006 14:30:00 GMT

11 comments Latest by Perry Tue, 21 Mar 2006 01:30:46 GMT

In a recent article titled, Just Build It: HTML Prototyping and Agile Development on Digital Magazine, Garrett Dimon writes,

“You need to temporarily suspend any notions that prototyping is always throwaway work. If you approach it as throwaway work, it will be. However, if you approach it with the intention of keeping it, you can create modular code that can be reused.”

I disagree. :-)

I’m not a HTML web designer, but when building applications, a prototype should be looked at as a process in which you agree that what is built will and should be thrown away.

Why?

When you are in prototyping mode… you should be very aware of the fact that it is a prototype. This is your chance to take shortcuts, break the rules, get creative, and express your ideas on a piece of paper, in plain HTML, or perhaps you may even run ./script/generate scaffold to spit out some code that you know will not be used in a production application later on. The goal here is to figure out what direction you want to take the project and get the client to sign off on these ideas… not to build reusable and modular code. If you’re building a prototype with the goal of reusing it than it’s likely that you’re spending too much time doing it.

Just Toss It

While you might not physically toss your application into a nearby trash can, you should aknowledge and remove any attachments that you may have that suggest that the prototype was a waste of time because no reusable artifacts came out of it. It’s the ideas that are expressed here that make this time valuable. Perhaps you don’t need a prototype phase… this would mean that you know exactly what you are about to develop. If you go the route of prototyping and find it to return nothing useful… than imagine how you’d feel if you just started developing and determined that you really missed an important requirement a few weeks later.

“The physicist’s greatest tool is his wastebasket.”

- Albert Einstein

The shortcuts that you should have taken earlier have likely created too much technical debt in your code. A fresh start should be the next step. Prototyping is part of the development process but the moment you allow yourself to think that you should reuse some of the prototype in your application is when you begin to become too attached to the notion that your prototyping phase was a waste of time end energy. Go into the prototype phase knowing that reusable artifacts are not the goal of this phase. Throw it away. ;-)

“Every act of creation is first of all an act of destruction”

- Pablo Picasso

Keep The Lessons and Ideas

You don’t need to rm -rf the_prototype but you should be very honest with both yourself and your client that the prototype phase is a way to quickly express an idea or process in a both a technical (and often) visual manner.

Prototyping Generates Confidence

Clients have (many) ideas. I hate to be the one to break it to you, but it’s almost certain that they are not as confident in you as you would like to believe. Confidence evolves over time and should be nourished on a regular basis. Their ideas are important to them and they are paying you to be part of the execution of those ideas. If you even remotely sense that you are not confident in their ideas… tell them this. Prototype their ideas. It could save both you and your client a lot of time, money, and resources in the long run… especially if an idea proves to be too complicated to execute.

Ideally, this is when you both agree that this idea is a good idea and that you both understand how it will be executed. This is both a good and healthy process. :-)

Document your learnings, the changes presented by both your client and yourself, and then revisit your Use Cases.

What you are about to build is that much clearer now. This feeling of clarity is exactly why you created a prototype. Remind yourself of this.

Always Start Fresh

Now that the client and you have come to an agreement about what is to be developed… the next phase should begin.

rails the_real_app

...and remember… don’t be afraid to revisit prototyping again. If an idea is not clearly defined yet, whip up a new prototype and see what comes of it. Just keep it out of your code base…. and if it’s already happened… please Refactor. ;-)

Like I said… I am not a HTML person… reusing the colors, graphics, and html artificats that you worked on might be useful… but modular code shouldn’t fall out of a prototype.

However, prototyping is a good idea and I highly encourage it.

Prototyping can also be extremely fun!

Similar Post(s): Keeping the Code Organic, The bitter-sweet taste of agnostic database schemas

Get help with your Rails project

comments powered by Disqus
Comments

Leave a response

  1. Avatar
    Alex Sat, 11 Mar 2006 18:43:02 GMT

    How do you sell a client who has a small budget on a prototype phase? Many of the clients that I have appear as though they have very little money to even develop the code, let alone pay for a prototype. This seems like a hard sale. I wonder what types of clients you have when you can even discuss having them pay for such a thing.

  2. Avatar
    Justin Sat, 11 Mar 2006 18:50:53 GMT

    Alex, perhaps you are attracting the wrong type of clientele. I have an appreciation for the prototype phase as it has saved myself and my clients a lot of time. About three months ago, I began selling clients on this process and it’s been great. However, I will be honest and say that I haven’t made enough of a clear distinction that a prototype should be thrown away. When I build something it is really hard for me to not try and reuse some of it. However, I often find that a lot of time goes into building a prototype. Perhaps I will make an attempt on my next project to be more deligent about rapid prototyping over reusability. A clear distinction in my approach to prototyping may help reduce the time it takes and this will make it an even easier sale to the client. Robby is right. They need to be confident in our understanding of their idea and the quicker we can show them this understanding—the better.

  3. Avatar
    Alex Sat, 11 Mar 2006 19:38:42 GMT

    What defines the right type of client?

    I am going to be working on an application for personal use and it might be a good idea to try and go the prototype method and see what happens.

  4. Avatar
    Peat Sat, 11 Mar 2006 19:53:42 GMT

    Alex—Prototyping shouldn’t be a heavy process. It can be whiteboards, sketches on paper, photoshop mockups … whatever medium you can use to quickly explore and capture good ideas. It helps your client clarify and express their thoughts, and allows you to identify potential problems and optimizations early on. Keep the good stuff, burn the bad stuff, and start the real project with a clear and fresh understanding of how it works. Framed in that context, it’s a very easy sell. :)

  5. Avatar
    Peat Sat, 11 Mar 2006 19:57:13 GMT

    ... and by “keep the good stuff” I mean use it as a reference. Don’t use it in the application. You’ll rewrite it better and in less time the second time around. ;)

  6. Avatar
    Justin Sat, 11 Mar 2006 21:02:04 GMT

    Peat,

    Client > Idea -> Prototype -> Reference <> Code?

  7. Avatar
    Peat Sun, 12 Mar 2006 00:02:36 GMT

    Justin—That’s the general idea, yes. If I were to refine it, I’d make it look more along the lines of:

    Idea <-> Prototype -> Reference <-> Code

  8. Avatar
    Robby Russell Mon, 13 Mar 2006 16:01:18 GMT Recommend me on Working with Rails

    Prototyping should be encouraged with most clients. The possibility of you getting it right the second time are much higher and if the first time isn’t held to such strict guidelines… it can be done quicker and will likely even save you time and your clients money. Coding is the easy part. Coding it right the first time.. not so much. :-)

  9. Avatar
    Alex Mon, 13 Mar 2006 16:52:28 GMT

    Thank you for sharing your approach to prototyping. I began prototyping a personal project. It’s not to feel like a hack when you’re doing this but I can see some value in knowing that I plan to throw this away once I get it close enough to know what I’ll be doing.

  10. Avatar
    David Mon, 13 Mar 2006 20:10:12 GMT

    Very good. I believe in the same principle; whatever is not in the final application is in the dumpster. My personal belief is that in the prototyping phase, you should not be doing anything you cannot repeat on demand a month from now, if you need it. If you have an idea that will take major thought or hacking to get right, then that should be a side job to expand a code library or design scrapbook, rather than part of a prototype. I’ve found that when you explain to clients “this is not the end product”, they don’t really care about the gears behind it as long as it looks like it will work. There is rarely any need to do something so complex that you have to keep it past the prototyping stage.

  11. Avatar
    Perry Tue, 21 Mar 2006 01:30:46 GMT

    Spot on. Prototyping is an excellent way to provide the client with a visual or tangible artifact quickly, without causing any technical debt.

    Prototyping is a wonderful thing. :-)