Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Development and Test Environment Best Practices?

This question is for ASP.NET and SQL Server developers. What are your best practices with respect to setting up your development and test environment? I'm interesting in the following issues:

  1. How many tiers do you recommend and what goes on on each tier? Just dev, test, and production or perhaps dev, test, staging, and production?
  2. Which types of applications and/or servers should run on actual physical hardware and which can get away with a VM?
  3. What are your strategies for loosely coupling users from web sites, web developers from their web/app/DB servers, and DB developers from their DB servers?
  4. How do developers stay "DRY?" (no deodorant jokes, please ;)
  5. What are the pros and cons to putting web, app, and DB servers on their own machines? Does putting servers on separate machines in order to minimize contention for a machine's resources trump any NIC and network latencies that might be introduced by putting them on different machines?
  6. How do you configure your web apps to minimize contention for resources (e.g. virtual directories, separate application pools, etc.)
  7. How and how often do you refresh your databases on each tier? Do you just refresh the data or both the data and objects?

Thanks.

like image 963
Jim Avatar asked Jul 07 '10 18:07

Jim


1 Answers

I can't comment on all of these but here's what i've found to work best in my experience.

1) Depends on your resources but ideally i like to have 4.

Dev is hyper flexible and owned by your dev team. It can get updated whenever they feel is best or as features are completed.

QA is updated on a scheduled or delivery basis depending on your process. If you do waterfall its updated when your in the testing phase, if you do iterative agile its updated each iteration. It should mimic prod as closely as possible but you may be able to get away with some compromise (see #2)

Staging should be identical in every way to prod. It should even use real production data if possible (potentially restored from a recent backup of the true production environment.) It should be used for acceptance testing prior to any release.

& Prod

2) Dev can be on a VM usually. QA can too most of the time. Staging and prod should match. I've seen folks run prod on VMs before, it depends on your resources and the demand for your app.

3) Our devs use a backup of prod on local SQL servers for development. This keeps everyone off of a central dev SQL server. Dev web and dev sql are separate boxes (just out of necessity they manage a bunch of projects.) same with QA, Staging and Prod.

4) A lot of testing and communication. If you have one small / medium team this isnt that hard. If you have lots of teams look at something like scrum, formal code reviews, something to keep communication going between teams. Don't treat DRY issues like suggested fixes, treat them like bugs, that need to be fixed. You'll spend way more time maintaining the code than writing it up front so treat maintenance as a 1st class citizen and make sure management is on board with that.

5 & 6) Not really qualified to comment

7) Dev whenever the teams need to, QA and up on a schedule depending on deployments. QA is every iteration / sprint, Staging and Prod is every release.

like image 140
JoshReedSchramm Avatar answered Sep 18 '22 04:09

JoshReedSchramm