Slashdot Mirror


A Proper Environment for Web Development?

umdenken wonders: "I'd like to know how others on Slashdot do their server-side web programming. We have dozens of Perl CGI scripts, and are currently doing development by editing these production scripts in place on the web server (!). Our sysadmins have finally installed an SVN client on the server (Solaris), and have offered to create a new virtual host that we can use as the development server. What are some of the practices you use for organizing this kind of set up?"

3 of 66 comments (clear)

  1. Separate your environments by KermodeBear · · Score: 5, Interesting

    In my experience, I have found that it is best to have four environments: Production, Pre-Production, Testing, and Development. Every environment is isolated and has the same hardware and software.

    Developers do their development in one environment (if possible, each developer should be isolated), and when their code is written it goes to a testing server where it can be hammered by your QA/Testing team.

    When it passes QA, it goes into Pre-Production, which is what your Production environment should look like when you push your changes live. Any kind of external integration can test against this environment, since it is as close to your production environment as possible.

    Then, you have your production environment where everything is live.

    It is VITAL that each environment is set up the exact same way, or as close as possible, to every other environment. Each one should have its own separate hardware running identical software versions - unless you are testing software upgrades, in which case you FREEZE THE CODE, update Development, then QA, the Pre-Production, then Production (testing everything, everywhere), and THEN resume writing your code again. It is incredibly frustrating for a developer when code works on servers A, B, and D, but breaks on C and E due to non-matching hardware and software.

    It is also important that your developers and qa team have access to fresh, live data if at all possible. It is easier to develop when you have real data to develop with; Plan on updating your QA and development data once a week.

    If you have a set up like this, then development, testing, and deployment will be very smooth. It can be a bit of a pain to set up at first, especially if you are not used to the idea, but once you have something like this I promise that you will never go back.

    Other people may recommend different set ups, but the basic idea is the same. Keep the developers separate from the testers, keep everyone separate from production. The pre-production just makes deployment easier - push code that passes QA to pre-production, then when the time comes, just rsync the files over.

    --
    Love sees no species.
    1. Re:Separate your environments by Phillup · · Score: 5, Insightful

      It is VITAL that each environment is set up the exact same way, or as close as possible, to every other environment. Each one should have its own separate hardware running identical software versions - unless you are testing software upgrades, in which case you FREEZE THE CODE, update Development, then QA, the Pre-Production, then Production (testing everything, everywhere), and THEN resume writing your code again. It is incredibly frustrating for a developer when code works on servers A, B, and D, but breaks on C and E due to non-matching hardware and software.

      I like for the pre-production and production environments to be as close as possible.

      But...

      I like the dev and testing environments to be different from each other... and from the production environment.

      I've found that doing this helps me shake out some "dependencies" that I may not have thought about.

      Taking care of those "dependencies" helps me write code that is easier to move to another environment if the customer wants to upgrade their systems.

      YMMV

      --

      --Phillip

      Can you say BIRTH TAX
  2. Minimize complexity by riceboy50 · · Score: 5, Insightful

    In my opinion, there is a point at which complexity outstrips any gains from separation. Just keep it simple; dev, staging, production.

    --
    ~ I am logged on, therefore I am.