You specify what to be developed. Users review it. You develop it. Architect reviews the solution. You do unit tests. You finish development. You do integration tests and functional tests. You do non-regression tests. You deploy in pre-production. You ask your users to do UAT. They do UAT. Everything is OK. Then happily users give Go for production. You do deployment in production. All is well.
User starts using it. With in an hour you get a blocking problem – that had to be fixed ASAP. How is it possible? The problem is with the production environment. That’s why I say, after pre-production, install in production but please don’t give production to the users; instead give pre-production to the users – that’s where everything is alright for everybody.
Seriously – what’s wrong and where are we making mistakes?
Writing right test cases is one important thing. If you don’t have good business analysts who write great test cases then better do testing with the right production data for the actual scenario. For example, if you expect your users to upload a file with their own data, try to get their file which they’ll upload in production and try to upload it against the existing production database dump. It is like HIT – you’ll see all the cockroaches coming out in all directions.
Mostly the users will say that they haven’t prepared that file yet. If they haven’t prepared the file yet for UAT, how are they going to upload to production just after 5 days? Force them to prepare the file. One other advantage is you’ll see what’ll happen in production on the D-Day – including any performance hurt lockers.