C# – the difference between a prototype and a production level solution

asp.netcnetvisual studio

This question is purely for learning and to step-up my technical understanding. I know there is no perfect solution and this question has possible never ending solution list but I think it's very important for every architect to understand the difference between demo and a live project.

I created many demo solutions in .Net in the past. I now have been assigned to architect and implement a production level web solution so I wanted to ask – on a very high level, what is required to convert a demo into a production level solution. From my understanding, this will require (other than functionally implementing clients' requirements):

  1. Unit testing every method
  2. Ensuring ~100% code coverage is achieved
  3. Logging all exceptions and possible pointcuts – possible with AOP
  4. Using interface design pattern, dependency injection, possibly by
    using a framework e.g. spring.net
  5. Using performance counters and
    profilers for instrumentation
  6. Applying appropriate security – i.e.
    windows authentication (if that's whats required by client).
  7. Transaction management on every single method
  8. Back up of the web application files before new deployment of solution

What else?

My question is more related to technical side instead of functional/documentation because otherwise we will go into another path 🙂

Thank you.

Best Answer

I think the most important difference is that a prototype's objective is:
1. To prove that a problem can be solved in a certain way OR
2. Give client / management a feel of what the product would look and feel like

whereas the objective of a live system is:
1. To solve a certain problem / address an issue.

Notice that the objectives of the two are completely different.
Therefore, in my opinion a prototype should be thrown away before developing a live system.

This is also because a prototype is usually a 'quick and dirty' project, thrown together without any of the considerations you've rightly pointed in your question (like testing, performance, security and a lot more).
So you'd be better off starting a new, proper project, than trying to make a bad project better.

Related Topic