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):
- Unit testing every method
- Ensuring ~100% code coverage is achieved
- Logging all exceptions and possible pointcuts – possible with AOP
- Using interface design pattern, dependency injection, possibly by
using a framework e.g. spring.net - Using performance counters and
profilers for instrumentation - Applying appropriate security – i.e.
windows authentication (if that's whats required by client). - Transaction management on every single method
- 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.