I'm specifically looking at automated builds, unit testing, better source control, and generally moving away from seat-of-the-pants coding and deployment, to specific processes. This is a Microsoft shop, if that helps.
I'm a regular ol' software developer on a team that is growing in size, complexity, and responsibility. We work on internal applications like the intranet and the CRM, and have recently begun integrating these things with our extranet as well. Historically there has been "the guy" that works on any particular system, so imagine "the CRM guy" and "the intranet guy" who knows everything there is to know about that system, from its hardware setup all the way to specific code release processes. We are mainly a C# shop.
The thing is that we are growing and multiple developers have started working on the same projects, the same code bases. This means that setting the working directory to a dev folder and holding exclusive locks from source control forever to work on things in solitude is ending, fast. Developers are starting to trip over each other, and the learning curve when you're assigned to an existing project is steep, as you have to be mentored by that system's "guy" for days to fully extract his knowledge about all the intricacies of the system.
For systems I build from scratch, I try to set up a true development environment; local virtual machines, documentation on the dependencies to release that code, a staging environment, and whatnot. This still isn't cutting it in some ways. Our knowledge of source control (we use SourceSafe) is tribal, limited to the aforementioned check-in/check-out. No labels, no branches, and sometimes not even an easy way to develop locally, instead having several developers hacking at a system on a "development" server. Which, as you could imagine, gets nasty as someone starts doing multiple IISresets while troubleshooting something and the other people on the system grind to a halt. Also deployments get tricky; for instance recently a release had issues because nobody could remember all the sproc and table updates necessary for the code to work right, and we basically spent an hour after the deploy running through the live code to see what SQL call would break next, triggering multiple "oh yeah,
that!" moments.
I try to track down ways to help us out by religiously reading and researching ideas I see from places like
Coding Horror and Eric Sink's awesome
source control writeup, but it seems a huge challenge. Things that might be taken for granted at other places, like a build server or required build scripts or unit tests, don't exist here. I think this could be chalked up to the pressure-cooker environment and the fact that we aren't pissing off true customers by screwing up a release, only internal employees that typically know us well (being "the guy" brings a certain amount of fame/infamy in the company). We can move very fast when an issue pops up, but I want to keep that from popping up in the first place.
We are "developers" or "software engineers" by job description, but there's a lot more to it. QA is done by the engineer mostly, then by the internal end users requesting the system/change, so no dedicated guy there. No DBA; let's just say you learn SQL and database administration really fast when you start here. So talk of things like using Team Foundation Server and Team System might be way too much of a change; I'm sure it's awesome, and looks it, but injecting a massive process change like that might backfire.
I have done things like DDL triggers on sprocs and tables to timestamp database modifications and store the SQL that did it, and this weekend I hope to get one of the projects I'm working on now some build scripts, and maybe even unit tests if I get really brave (TDD is not something we do, either, which is starting to scare me as some of the systems grow in complexity). I will be looking at MSBuild in particular to help us out, though I have done some relatively simple build scripts for other apps using PowerShell.
FWIW, our direct technical manager is all for this, as he came from a much more structured shop, and recognizes that we are growing and have to change. He encourages better process, but the inertia of "the way it's always been done," the down-to-the-wire deadlines, and the normal problem of herding the developer cats seems tough to overcome quickly. I want to spend some extra time breaking new ground in what we do, and then present the process to others as a model for how to do things in the future, and hopefully get some formality on it after that. My team is great, I love the job, and want to better our processes so we're not as stressed out.
So to make a long story longer, my question to the hive mind is this: what small incremental steps do you see that could get us more streamlined and less prone to "the one guy" development problems?
posted by mpls2 at 12:36 PM on March 22, 2008