The Tao of Software

Thursday, August 18, 2005

Ping pong sandbox usage


Interesting article by Mike Spille.

While I haven't noticed us doing this in our code, it does make me think of our sandbox practices. (I say practices because although our strategy hasn't changed, we tend to vacillate in our observation of this strategy...)

When I joined the company I'm now with last October, there was a big push to "always work in sandboxes". That is, do all development work in a private branch. Once that code is stable, integrate it in to the project branch. A month or two after we adopted this as our official policy, I noticed that most people on my project team seemed to be working out of the same developers' sandbox - let's call him Dave. Eventually, people concluded that occasionally breaking the build was slowing things down for other developers and started making sandboxes off of Dave's sandbox (so they stayed in sync.) This made things extremely difficult for anyone who wasn't in a Dave-sandbox-derivative to keep their sandbox in sync and put tremendous pressure on Dave to continually sync to the project main so they could sync their Dave derivative sandboxes with anyone who was correctly following the practice... In short, it was a mess. Slowly but surely, people moved into their own sandboxes (off the project branch) and then started doing feature sandboxes for collaboration and all was briefly well.

Enter Scrum, stage left. We now have a new and exciting agile development style that is going to help us build software faster. To keep the three sprint teams from colliding, we made a branch for each team, and gave each Scrumaster the responsibility to keep those branches in sync. This was cool but then all the developers started doing all their work in their team branch. Again, we started running into the problem of risky code breaking builds and hindering the development efforts of our teammates. My team went back to strictly working on sandboxes. Today, after a lot of head scratching and emails as to why a particular bit of code didn't seem to jive with what I was expecting, I realized that I needed to perform my 5th integration to get the updated code, making me wonder if this sandbox thing was too heavy weight when a simple check in/out and sync would have been less cumbersome (assuming we were in the same branch!)

I'd like to propose some middle ground on this sandbox thing:

"Try to work in sandboxes for code that might put you in build hell. Share the team branch for highly collaborative but relatively low risk code. Use your judgment on anything in between."

jk