Deployment Process and Problems

Our company has three stages of application development:

  1. Development stage, which means the application is being served on each developer’s workstation. There was also a consideration to run database server on individual’s workstation, but it’s decided that there’s no apparent advantage in doing so, thus we use common database servers in our development stage.
  2. Test/Staging stage, ideally in this stage, the application is moved into the live server environment and obviously its own database server. In this stage, production manager and testers test the whole application for existing bugs, ideally client should also be involved. This is also the stage where client is usually giving feedback, requesting changes etc.
  3. Production stage

I think these are the problems with our deployment process so far:

  1. Who is/are responsible for the deployment?
    Is it a person on the project’s responsibility or is it shared responsibility? Which one is better? My opinion, the tech lead on the project should be responsible for the deployment. After a deployment, the deployer should do a global/general test to iron out the configuration or environment specific problems like Application.cfm/cfc, doing refreshAppVars etc. A functional testing then should be conducted by appointed testers, production manager should test as throughly as possible before client is invited to test.
  2. When to move from development to staging? This is I think is very difficult question to answer. We must clearly define the purpose of creating a staging stage, is it to test production environment or is it to show client the project’s progress.
  3. Our ex system administrator had done a good job in setting up the infrastructures to ease the stage progression. He introduced the use of Subversion for source control replacing Visual Sourcesafe, he also tried to automate the deployment process by using Ant script. The former has been one of the best move so far, the later has a mixed result. The problem with automating deployment at the moment is our lack of understanding on how Ant works. Out of frustation with Ant script, a colleague wrote a deployment script using Coldfusion instead, at least every developers in the company knows Coldfusion, it is yet to be known whether this approach is working well.

    The headache at the moment is due to the fact that we have no specific person who knows all there is to know about deployment. Due to some internal problems, the company could not fill the system administrator role thus every developers now is sharing the responsibility but ONLY for the projects that they are involved in. There are just too many variables in live or even staging deployment that just break our projects over and over again. Some killer variables:

    • Operating system changes
    • Path (filepath, URL etc)
    • Case sensitivity, eg MySQL database in Linux is case sensitive, Windows is not

    I guess over the time we will be able to iron these issues out, but to do that we really need to hire someone that can concentrate in these issues and thus free up the developers to do things that they like most, you know things like programming.