CodeBetter.Com
CodeBetter.Com
RSS 2.0 via Feedburner
           Do you Twitter? Follow us @CodeBetter

Jeremy D. Miller -- The Shade Tree Developer

Under the hood and working with .Net, TDD, Software Design, and Agile Stuff

Little observations

  • Stale code is dangerous.  My poor colleague tried to merge code from a class that's basically a directives file today.  He had kept his code out for a month.  When I was much younger my father would gently mock me about my propensity to foul out of basketball games.  Guess who played the "I told you so Father" role today?  (I did help him through the merge).  One more time with feeling, stale code is evil.  Check in often.  Work in small steps so you can check in often.  If you can't check in often, update your copy from the master frequently.  You can keep the nasty merges away without retreating to pessimistic locking.  Walking out of the office at night with modified code on your workstation needs to feel like going to work in the morning without a shower.
  • Side note:  I worked with a quirky developer at my last job that used to say "Uh oh, it looks like another learning opportunity" anytime he or we suffered an episode like my colleague today with the merge.
  • Note to self:  get better with SVN Merge
  • Keep the build server clean baby!  The build server today caught a problem with a VS project reference that wasn't apparent on a developer workstation.
  • Frequent checkins plus the SVN Revert command == ugly code be gone
  • Cubicles == Collaboration Proof Force Field.  Is there any worse way possible to arrange a development team?
  • A team building a feature is far better than a group of individuals doing tasks.  It's the same amount of work, but somehow the team/feature combo working with a shared purpose produces more real value than a bunch of disconnected individuals working tasks in a project management worksheet.
  • Something smells if you sit in a meeting for an hour and are only impacted by 5 minutes of that hour.


Comments

Jimmy Bogard said:

It smells worse if you realize that the 15 other developers in the meeting are impacted by exactly 0 minutes of that hour, and are lucky if the meeting is only an hour.

# November 13, 2007 4:18 PM

JH said:

Ahh... I see that a stringent dose of RUP is helping you see the light on the true business value of lengthy meetings and inordinate amounts of shelf-ware documentation. (sarcasm intended)

# November 13, 2007 4:46 PM

Carlton said:

Two comments:

"Team building a feature is far better than a group of individuals doing tasks" - lately I have been trying to lead a Scrum team where there is no Sprint Backlog.  In exchange, I make sure during the Sprint Planning Meeting everyone understands the goal of the Sprint and commits to the user stories.  I will tell you how it works out.

"Something smells if you sit in a meeting for an hour and are only impacted by 5 minutes of that hour." - institute the "Law of Two Feet" from Open Space.  If someone is not getting anything out of a meeting within 10 minutes, they can leave no questions asked.

# November 13, 2007 7:00 PM

Jeremy D. Miller said:

@Carlton,

I don't think I can do that with my client's manager, but I got a chuckle out of it.  In the bad old pre-Agile days I used to keep a notebook or my computer with me to work in meetings and just scan for keywords.

# November 13, 2007 7:46 PM

Haacked said:

If you ever wondered what the point of Twitter is, it is little observations like this. ;)

# November 14, 2007 2:11 AM

Stand-up meeting practice ¦ Micka??l Sauv??e’s blog said:

Pingback from  Stand-up meeting practice ¦  Micka??l Sauv??e’s blog

# November 14, 2007 5:06 AM

Russell Ball said:

Good observations.

On the source control issue, I think it is also possible for developers to go overboard on this advice and check changes in too frequently. I've seen lots of developers view source control as a personal backup system rather than as a repository for a working build. When this happens you get all kinds of bottlenecks occur with people checking in non-working code that breaks other people's code.

I think as long as you have a continous integration system in place that runs tests and you have set up a culture where it visible and a bad thing to break the build, then you can encourage very frequent check-ins. Otherwise, I would temper this advice with a warning about the integrity of the build being paramount.

# November 14, 2007 1:05 PM

Jeremy D. Miller said:

@Russell,

You said the magic words -- "Continuous Integration"

I really can't imagine doing software development in this day and age without at least the bare bones basics of CI.

# November 14, 2007 1:19 PM

Simeon Pilgrim said:

@Russell,

Branching. Make a branch, do days work, check-in, merge from the trunk, check-in again.

Source control IS a personal back-up. It's on the server, your desktop hard-drive isn't.

@Jeremy,

I find DiffMerge from SourceGear (it's free) to be so much better than SVNmerge. When used as described in the help, it's quite nice.

# November 14, 2007 5:53 PM

Russell Ball said:

@Simeon - I disagree. I think working folders should be mapped to a network drive on a server that is backed up. The purpose of backup is to make sure you don't loose work. The purpose of source control is to be able to logically manage changes, revert to prior versions, and easily diff files.

I like  branching, but merging has its own overhead associated with it, so I prefer to only use it to manage production branches or major functionality forks for very large teams. I don't think it is worth the overhead to have every person have their own branch.

@Jeremy - I agree. CI is key, but I although the idea is becoming mainstream, I don't think the practice is quite mainstream yet. I just started a new job and set one up for them. They recognized that it was a good thing, but I don't think they ever would have gotten around to setting it up if I hadn't taken the initiative.

# November 14, 2007 6:16 PM

Simeon Pilgrim said:

@Russell - Working folders on servers doesn't scale to large teams, or large projects, or both.  I agree trunks shouldn't have 101 check-ins a day. Keeping a personal branch in sync is no harder than keeping a working folder in sync. In fact it's the same effort. Because nobody else is changing your personal branch. You then check-in a larger change-set to the trunk/project branch. Seams it's on the server, your version uses code based space per user, where-as a branch uses delta's. This all assumes your using a real repository tool.

# November 14, 2007 9:51 PM

Russell Ball said:

@Simeon - I don't agree that disk space considerations should be a major factor in determining check-in policy. My working folder is only a small portion of the space I am using on my network drive. Most disk space issues in my organization have been addressed by putting policies in place about storing large personal files such as mp3's, movies, and photos. Relatively speaking, src text files don't take up that much room, especially since you are only keeping the most current version.

I also have some concerns about the affects of using one personal branch per person would have on the effectiveness of continuous integration practices. For example, would you run a separate continuous integration build for every person? If so, that will introduce some major overhead and scaling problems on your build server. If not, then I question whether code will be integrated frequently enough. If I have to go through a two step process to integrate my code (checking it in and then merging my personal branch), then I will probably reduce the frequency I do this as much as possible. This will negate the effects of getting more immediate integration feedback.

# November 15, 2007 5:05 PM

Simeon Pilgrim said:

@Russell - my server issue is more of a IO concern with developer directories on a server, gigabit ether gets swamped quickly. As to CI, why would you do integration testing when your not integrating it? It's a personal branch. So points where really, compiling code that sitting on a non-local disk doesn't scale. Long periods of not check-in code into the trunk is bad. I find personal branches a solution that fits my needs.

# November 16, 2007 10:48 PM

Barbricks.Com » Little observations said:

Pingback from  Barbricks.Com » Little observations

# November 18, 2007 8:09 AM

Leave a Comment

(required)  
(optional)
(required)  

Enter the numbers above:
Add

About Jeremy D. Miller

Jeremy began his IT career writing "Shadow IT" applications to automate his engineering documentation, then wandered into software development because it looked like more fun. Jeremy previously worked as a systems architect building mission critical supply chain software for a Fortune 100 company and learned agile development practices as a .Net consultant at ThoughtWorks, one of the pioneers of agile development. Jeremy is the author of the open source StructureMap (http://structuremap.sourceforge.net) tool for Dependency Injection with .Net and the forthcoming StoryTeller (http://storyteller.tigris.org) tool for supercharged FIT testing in .Net. Jeremy's thoughts on just about everything software related can be found on his weblog "The Shade Tree Developer" at http://codebetter.com/blogs/jeremy.miller, part of the popular CodeBetter site. Jeremy is a Microsoft MVP for C#. Check out Devlicio.us!

This Blog

Syndication

News

All opinions expressed here constitute my (Jeremy D. Miller's) personal opinion, and do not necessarily represent the opinion of any other organization or person, including (but not limited to) my fellow employees, my employer, its clients or their agents.

About Me

"Best Of" Compendium

StructureMap (Dependency Injection for .Net)

StoryTeller (Supercharged Fit)

Build your own Cab

TestDriven

MVP