Blog posts tagged - "Uncategorized"

A Life Changing Event

After almost 8 years at Asynchrony, I resigned my position as VP of Engineering on Thursday to take a new position working with some of my old friends. The times at Asynchrony were some of the best times in my career, and I feel privileged to have worked with so many bright, driven, passionate people. The reason for this move has nothing to do with Asynchrony – I consider them to be one of the good guys in the industry.
Continue reading -->

Re-energizing a Standup Meeting with Kanban

Problem: Standup meetings are more like status meetings than a collaboration meeting for the team. Symptoms:  The whole standup meeting is run by the Scrum Master, with no one doing or saying anything until called upon. People on the team report their status back to the Scrum Master or team lead. No one or few people speak to the rest of the team, and interaction between people is pretty rare.
Continue reading -->

“You get what you measure” versus “What you measure, you can manage” – The Agile Metrics Dichotomy

(I just reinstalled Windows Live Writer and reconnected it to my blog, and it pulled down some drafts I wrote years ago. So, I have no idea when I actually wrote this, what the context was that was in my head, but it seems like a decent article. So I’m posting it :)) I’ve long been a fan of the “You get what you measure” school of metrics doubters, especially in agile projects.
Continue reading -->

New blog home

Hey, sorry for the inconvenience. We lost our hosting at our previous site (Thanks, Peter, for doing it for over 5 years!), so I’m reloading all content here, setting up a nice theme, etc. It might take a while, but it’ll eventually get done. Thanks for your patience… — bab
Continue reading -->

Test Driving a WPF App – Part 3: Switching to new window

This is the third part in what I hope to be a four-part series about creating a WPF application using TDD to drive the functionality and MVVM to keep everything testable as we go. The idea is to use view models to split away functionality from the view and have it available for testing while not losing any capabilities along the way. If you haven’t read the first two parts,  you may want to do that.
Continue reading -->

Using Unity to make Singleton-ness an implementation detail

The most common, canonical use of the Singleton pattern irritates me. Every time I see it, I think, “The singleton-ness of a class is an implementation detail, and shouldn’t leak out through that class’s interface.” Yet, that’s what it always does. In the usual implementation, someone decides that some new class they’ve written is so resource critical, or so standalone, or so useful that they can have only one instance of that class and that instance has to be visible everywhere.
Continue reading -->

Are you coming to St. Louis Day of DotNet?

Only a few seats left, apparently, for the conference on August 28th and 29th. Register here. Looks like lots of good sessions, lots of good topics, and filled with good speakers. Personally,  I’m speaking on Using MVVM and TDD to test drive a WPF application.   bab
Continue reading -->

Handling interactions between ViewModel classes

I’ve been puzzling over what seemed to be an insurmountable problem lately. It seemed that the guys who came up with the MVVM design pattern totally missed the boat on anything more than a simple, single-page app. It couldn’t be me, since I’m a SuperGenius ™. Well, OK, it did turn out to be me. Once I stopped flailing about in WPF-land and actually thought about the problem, it became easy.
Continue reading -->

Using Powershell to diagnose installation failures

I was trying to install the Application Block Software Factory, part of Enterprise Library 3.1, the other day, and I ran into a problem. During the installation, I got a failure stating that the necessary installer types could not be found in “c:program filesMicrosoft Visual Studio 8common7ideMicrosoft.Practices.EnterpriseLibrary.BlockFactoryInstaller.dll”. I was instructed to see the LoaderExceptions property of the exception for details. Huh? How in the world was I supposed to see this property of an exception that I didn’t even have access to?
Continue reading -->

Episode 2 – Filtering by Genre

Update — Craig Buchek pointed out something about one of my tests that he didn’t like. My test entitled PresortedBookListWithSomeBooksInCorrectGenreOnlyReturnsBooksInCorrectGenre made an assumption about data ordering that was stronger than was necessary for the intent of the test. I didn’t need to show that the elements came out of the filtered list in sorted order for that test — I only needed to show that the elements were present in the filtered list.
Continue reading -->

Another TDD example – Part 1

Title: Solution to Class Exercise As described in class: I have books — too many books. They are all over the floor, I trip over them. I can’t keep track of all the different books I have. I really need a book list manager. Please build one for me. Here is the list of stories I give the students, and I ask for them in somewhat random order. I should be able to see a list of my books, sorted alphabetically by title I should be able to see all books in a specific genre I should be able to read in a list of books from a text file I need to know the current price of a book I want to sort books according to price I want to be able to add a new book to my list I want to be able to save my list of books to a text file I want to be able to mark books as having been read I want to be able to find which books have been read I want to sort books by genre and title BookID |Title |Genre |HasBeenRead 1 |Clifford Goes To College |Childrens |Y 2 |Have Space Suit, Will Travel |ScienceFiction |N 3 |Goedel, Escher, and Bach |Science |N 4 |Elegant Universe |Science |Y 5 |Life in 1000 AD |History |N 6 |1001 Ways to Cook a Cat |Cooking |N Story 1 — Give me a list of books sorted by title
Continue reading -->

New .Net testing framework, xUnit.net, available on CodePlex

I’m a few days late to this party, but my friends Jim Newkirk and Brad Wilson have released a [new .Net testing framework(http://www.codeplex.com/xunit). What is interesting about this framework is that it is built based on many years of combined experience between Jim and Brad, with input, I’m sure, from Scott, Peter, and others. Jim and Brad made some interesting choices, like removing SetupAttribute and TearDownAttribute, but they’ve defended their choices.
Continue reading -->

Episode 1 of Deep Dive Revisited — Setting the stage with customer tests

So let’s begin our reimplementation of the sample payroll system introduced previously. Briefly, the problem stated that I had a batch payroll system that I needed written to pay the few employees that I had right now for my small company. They are all salaried as of now, but I can imagine hiring some hourly employees later. Story number one said that, “As the owner, I want to be able to run payroll so that I can pay my employees”.
Continue reading -->

3 day Test Driven Development course in St. Louis — June 12-14

For anyone out there interested in TDD training, Asynchrony will be holding a public TDD course in our offices in St. Louis June 12th-14th. If you have been interested in learning TDD, I promise you’ll enjoy this class. I’ll be teaching it personally, with the help of some very capable coaches. Good times will be had by all! Go here to learn more and to sign up for the course…
Continue reading -->

And so ends St. Louis Code Camp, 2007

Wow, what a great day that was! Yesterday we held the 2nd Annual St. Louis Code Camp, and it was a smashing success. We had about 100 people show up, and they all seemed to have a ball… Some of my own favorite moments: Meeting and getting reacquainted with folks I met last year. I hadn’t seen Alex Miller and Sean Carley, for example, since last year, and chatting with them was a ball.
Continue reading -->

The duty of agile developers

I’ve been noticing a common theme in several of the teams I’ve been helping or observing over the past few months. I’ve been hearing the complaint that members of teams are working as hard as they can to implement as many stories as they can, ignoring such “optional” activities as refactoring, etc, because they can’t afford the time. They are accepting so much work in terms of functionality that they don’t have time to put any time into the architecture, design, or other “niceties”.
Continue reading -->

Brainstorming a test list

Question — When writing code test first, how do you know where to start, how do you know what to do next, and how do you know you’re finished? Answer — By creating a list of tests that help you bound the problem you’re solving. Given that previous statement, it sounds like having a good set of tests is a pretty important part of Test Driven Development, eh? Obviously it is, so the question becomes how you create a good list.
Continue reading -->

Powershell script to convert RTF docs to plain text using MS-Word

On our current project, we had a bunch of RTF files that had some text in them that we wanted to yank out and store in a database. Instead of laboriously opening and resaving each of the files as plaintext, I decided to write what I had hoped would be a simple PowerShell script to do that for me. What follows is my best try at that script. I am very open to any questions, criticisms, and improvements in the script, as I’m still very much learning the language.
Continue reading -->

Announcing the 2nd Annual St. Louis Code Camp

At long last, I can officially announce the 2007 St. Louis Code  Camp, to be held May 5th, in Creve Coeur, MO. The code camp will be held in the offices of Microsoft at Three City Place, at the corner of Ballas and Olive, and will meet from 8:30 until 5. Final plans for the number of sessions we can accept are still being drawn up, but we should have enough room for lots of good presentations.
Continue reading -->

Agile and Agile Project Management links

I gave a talk to the local PMI on Friday morning, and I promised them some links they could use to learn more about the subject. I’ve gone ahead and added those links to my page at http://del.icio.us/bbutton . I’ll keep adding information to that page as I remember or find new links. Here is a summary of what I have now: Websites: http://www.agilealliance.org http://www.xprogramming.com http://www.controlchaos.com http://www.cutter.com/project.html Books:
Continue reading -->

St. Louis Code Camp Materials links

Sorry this took so long. Here are the links that I have from people to the materials from their talks: Cory Foy – Ruby for C# Developers, Achieving Customer Zen with Fitnesse Kevin Grossnicklaus — Advanced Threading in .Net Dave Holsclaw — Rails without the Hype Jeff Barczewski — Extending Ruby on Rails (Project Site) Steve Brennan — Bringing Existing Code Under Test Chris Caplinger — Using the Atlas Framework for ASP.
Continue reading -->

What are your top 5 things to consider when building a framework?

Help me out with an experiment… I’m finishing up the slides and content for my TechEd talk, and I want to do a little research based on the community. The subject of my talk is “Architecting your own enterprise framework”, and I’m curious to know what you consider when you’re doing this, and what you’d like to hear someone talk about. This is going to be used in the structure of my talk to make a point about how frameworks are built, so your answers are very important to me.
Continue reading -->

Code Camp Organizer podcast with Podcast Studio posted

I was asked by Jeff Julian and John Alexander to participate in a podcast of MSDN Code Camp organizers yesterday evening, and the resulting podcast has been posted. The group consisted of Jeff and John, along with Thom Robbins, the originator of Code Camps, Don Demsak (DonXML) from the NJ Code Camp, Chris Williams and Robin Edwards from the South Carolina Code Camps and yours truly. It was a round-table discussion of aspects of organizing and holding a Code Camp.
Continue reading -->

Still looking for St. Louis Code Camp speakers!

For any of you planning on attending the St. Louis Code Camp, we are still looking for speakers. If you have ever wanted to try your hand at sharing some of your knowledge with your fellow developers, Code Camps are a great place to start out. Talks are very low key, audiences are very friendly, and you’ll give yourself a big leg up for that next presentation you have to give to your great-grand boss at work If you’re interested, please go to our web site and site up to attend and to speak.
Continue reading -->

stlcodecamp.org is live!

Please use www.stlcodecamp.org to register for the St. Louis Code Camp, May 6 and 7. That site will be the primary place to get news and information about this upcoming conference. Thanks! — bab  
Continue reading -->

Announcing the St. Louis Code Camp!

At long last, I can officially announce the 2006 St. Louis Code  Camp, to be held the weekend of May 6th and 7th, in Creve Coeur, MO. The code camp will be held in the offices of Microsoft at Three City Place, at the corner of Ballas and Olive, and will meet from 8:30 until 5 each day. Final plans for the number of sessions we can accept are still being drawn up, but we should have enough room for lots of good presentations.
Continue reading -->

The St. Louis Code Camp is Coming!

It’s on the East Coast… It’s on the West Coast… Now it’s coming to St. Louis… The St. Louis Code Camp Are you passionate about some technical topic? Are you interested in learning what other developers in your area are doing? Have you always wanted to present, but never had the nerve to do it? Well, the St. Louis Code Camp is for you! What is a code camp? Code camps are very informal gatherings of developers who want to get together to share what they know with their fellow developers.
Continue reading -->

3-day public Test Driven Development course in St. Louis, MO, July 13-15

Sorry for the crass commercialism, but I thought I’d post this to my blog to see if anyone was interested. Agile Solutions Group will be offering another in its series of public Test Driven Development classes, July 13–15 in St. Louis, MO. The class covers both refactoring and test first programming, which together make up TDD. The session is about 20% lecture, 30% example, and 50% lab, so you’ll get a chance to really get your hands dirty with this stuff.
Continue reading -->

Double Duty — My “Better Software” article as PDF

Thanks to the kind folks at Better Software Magazine and Sticky Minds, I have my article, as published, as a PDF. In this article, I discuss how to write programmer tests in a little different way to support them being used as API documentation. Tests needs to stand alone a little bit more, you need to pay more attention to using better names, and you need to have some way to let you map from application method to the tests that define it.
Continue reading -->

Refactoring Web Cast — Wednesday, May 25th, 3-4 PM PDT

Sorry for the late notice, but I’m doing a teched webcast tomorrow on Refactoring. I’d love it if a big crowd showed up! Here is the link to listen: http://www.microsoft.com/communities/eventdetails.mspx?CMTYSvcSource=MSCOMMedia&Params=%7eCMTYDataSvcParams%5e%7earg+Name%3d%22ID%22+Value%3d%221032273124%22%2f%5e%7earg+Name%3d%22ProviderID%22+Value%3d%22A6B43178-497C-4225-BA42-DF595171F04C%22%2f%5e%7earg+Name%3d%22lang%22+Value%3d%22en%22%2f%5e%7earg+Name%3d%22cr%22+Value%3d%22US%22%2f%5e%7esParams%5e%7e%2fsParams%5e%7e%2fCMTYDataSvcParams%5e Yeah, I know — what kind of system do they have to create URLs that long! Show up anyhow and ask lots of good questions. Hope to see some of you there. — bab
Continue reading -->

Agile Speaking

I was asked by the local VB.Net User Group to give a talk on Agile Development. The problem with giving a talk like this is that there are so many possible things to cover in the time allotted. And I never know what kind of background the folks showing up will have. So, if I explain this in another way, I have a specific time in which my talk has to fit, I have a specific amount of resources to deliver the talk (me!
Continue reading -->

Why I love astronomy

Astronomy is one of my major hobbies. I have a 10” Discovery PDHQ Dobsonian that I take out waaaay to infrequently. But when I do get out, I see things that are really beautiful. The last time I went out, a few weeks ago, I saw this, one of my favorite celestial sights. It looks great in this picture, but I saw it with my own eyes. Clear and bright. That was fun.
Continue reading -->

Announcement: TDD Webcast, 1100-1200 PDT, Thursday, April 28th

Peter Provost, Scott Densmore, Brad Wilson, and I will be doing a webcast on TDD, hosted by Ron Jacobs. I don’t have the link yet, but as soon as I do, I’ll post it here. The content for this webcast is introductory — we only have 1 hour, so we’re going to talk about what TDD is, how it can help, do a really quick example of it, and share some of our war stories of using it on real-life projects.
Continue reading -->

Legacy Refactoring Series – Part1

As promised, this is the first installment of a series of articles on refactoring a piece of legacy code that I have been given. The purpose of this particular piece of code is to use reflection to find all the types in an assembly, determine the relationships and associations between these types, and spit the resulting model out in XMI. For those of you who are unfamiliar with XMI, as I was/am, it is a standard interchange format that UML tools are supposed to support that allows models built in one tool to be viewed in another tool.
Continue reading -->

Explaining TDD to a non-techie

I was explaining what was different about the agile approach to software to a non-technical person the other day, and I chanced upon an explanation that I kind of liked. She did, too, as it made sense to her. So, this is the explanation I used: Imagine you have to write a 10 page paper. One way of doing it would be to sit down and outline the whole thing carefully, and then write it.
Continue reading -->

New continuing series starting

Consider this an teaser of things to come 🙂 A group I am a member of, the C# Design Patterns Group, had a piece of software donated to it, and we are now responsible for its maintenance and upkeep. It just so happens that the software is not in the best possible shape, as far as design quality goes. Our plan is to fix a few bugs, refactor it a bit, and eventually add some new features to it.
Continue reading -->

The difference between OEM and Retail when buying computer components

I may be in the process of learning a not-inexpensive lesson here, and I wanted to share it with others in the hopes that you may avoid my pitfall. There are two ways to buy most computer components. You can buy full retail boxes, which are exactly as produced by the factory for the part’s manufacturer, or you can buy an OEM part. OEM stands for Original Equipment Manufacturer, which is someone who builds systems and buys that part to include in their system for resale.
Continue reading -->

Building a new development machine

Update — Brad Wilson has given me some advice about RAM and video cards, and Sean Malloy advised me away from 25ms response time LCDs, so its back to the drawing board for those. I may also change out the Zalman cooler for one from Silenx as well as a couple new case fans. The Zalman cooler is actually about the same in terms of cost and noise, but the Silenx one doesn’t have the freaky blue LEDs in it 🙂 The Silenx case fans are supposed to be really quiet, so I may upgrade to those after the fact.
Continue reading -->

Pointer to posts mentioned in my webcast

Hi, all, I hope some of you had a chance to listen to my webcast yesterday on the Enterprise Library Caching block. I did an OK job — I was a little nervous at first and felt very rushed during it. Anyhow, I hope the content I wanted to get in was understandable… At one point, someone in the talk asked about thread safety and performance of the  block, and I mentioned that I had blogged about how the locking scheme in the caching block evolved over time.
Continue reading -->

Double Duty — Using Unit Tests as Documentation is published!

The article I wrote about some months ago is finally published in the February, 2005 issue of Better Software Magazine. I spent a lot of time on that article, and to see it in print is particularly satisfying. There is a discussion forum for the article currently being hosted on Sticky Minds, so if you’d like to comment on the article or participate in the conversation, please visit. I am also actively developing the TestMap application I speak of in the article.
Continue reading -->

TDD — What about internal methods?

Over the past few months, I’ve taken part in a few chats about whether or not internal methods should be tested. One of the basic premises of TDD is that you should use it to explore, design, and implement the public interface of your classes. If you are using it to test methods that are less than public, you are probably testing implementation and not interface, which leads to very fragile tests.
Continue reading -->

Enterprise Library released to the wild!!!

I know I’m a few days late to this party, but I’ve been recovering from workaholism for the past few days. Now, feeling refreshed and energetic, I add my voice to the growing firestorm: Check out the Enterprise Library. It is everything you have ever hoped for, dreamed about, and wanted, for your software development needs 🙂 Compliments cheerfully accepted. Criticisms consciously sought and appreciated. After all, we want to get better.
Continue reading -->

Death by spam

I admit it. Spam has me beat. A few weeks ago, I got around 1000 spam a day. Two weeks ago, I got 2000 spams a day. Last week, 3000 per day. Are you picking up the pattern yet? As of today, I got 4500 spams. By next week, I’ll be over 5000, I just know it. Does anyone out there have any suggestions about how to tame this problem? I have spambayes in the middle of my mailtool chain, so I don’t see very many of these, but I still have to deal with the bandwidth they take up.
Continue reading -->

A constructor is not part of a class’s interface

Peter Provost and I were talking today about some code that we’re working on together. We’re constructing a class right now, called a Starter. The job of a Starter is to stitch together a Repository, a class whose job it is interact with a source control repository, subversion in our case, a Builder, which is responsible for causing a Project to be built, and a BuildLogger. All of this stuff has to be aware of configuration changes, so we also  have to pass in a Configuration object that is able to tell us the current configuration values.
Continue reading -->

Release date for Enterprise Library announced!

According to Scott Densmore, barring anything unpredictable happening, Version 1.0 of the Enterprise Library will be released to the web on January, 28th. It will be available MSDN and the patterns & practices site. Yahoo!!!! Hmmm. Rumor has it that Agile Solutions Group will soon be offering training classes on Enterprise Library as well as consulting services revolving around using it. Email entlib@agilesolutionsgroup.com if you’re interested 🙂 — bab
Continue reading -->

“Extreme” Refactoring — The Video Store Revisited

In Fowler’s Refactoring book, he has an extended example  of refactoring procedural code into object oriented code. I’ve gone through this example in talks a bunch of times, doing the refactorings Fowler does for the most part, with my own little twists to it. Today, however, I wanted to have a little fun. I wanted to turn my refactoring knob up to about 12 and see what happened. So I started with the Customer class after it was refactored in the Video Store example and see how much further I could take things.
Continue reading -->

“Cannot Create SSPI Context” and how to fix it

Just a quick note for anyone who has ever gotten this error before: “Cannot create SSPI context”. I started getting this error when I was trying to establish a connection to a SQL Server when I wasn’t connected to the internal Microsoft corporate network. Connection strings that worked just fine when I was connected just wouldn’t work at all, and I could not figure out how to fix it. GIYF (Google Is Your Friend) I googled it and found out that I had my connection string set wrong.
Continue reading -->

Enterprise Library talk at St. Louis C# Users Group, January 10th

I’ll be speaking about the Enterprise Library project I’ve been working on at Microsoft since early 2004 at the C# UG in St. Louis on Monday, January 10th. I’ll be talking about the design of the Enterprise Library, showing off some of its capabilities, and demonstrating its common configuration tooling. Given time, I’ll also be building a sample application, to illustrate how simple it is to consume it in your own application.
Continue reading -->

How much travel is too much travel?

I’m sitting here on the plane flying from Dallas to St. Louis, the second hop of my trip home from Redmond, and we’re a couple hundred miles out of St. Louis. I just made it to Executive Platinum on American Airlines in the past 100 miles or so. For those of you who don’t know what that is, that’s 100,000 miles flown in one year. Is that too much travel? Sometimes I feel like I’m just visiting when I’m home 🙁
Continue reading -->

TDD Dive — Chapter 6

In this installment, we’re going to code up the input side. This is going to be very much like the last installment, where we did the output. The key to making this easy is to do everything in terms of TextReaders instead of specific kinds of TextReaders. This will allow us to use StringReaders in our tests, and substitute in a StreamReader later, in main. Armed with this knowledge, we can put our test code and test data in the tests themselves, as opposed to having the data spread out in little files all over the place.
Continue reading -->

A Great Refactoring Experience

This post is going to be entirely non-technical. Instead, I want to relate a refactoring experience I had yesterday with Peter Provost. Peter is working on something that he has never worked on before, Event Tracing in Windows (ETW). This is a very low-level, kernel-provided facility to track events in Windows. Accessing these APIs is hard, because you have to P/Invoke to get to all the calls, and it involves messy logic in .
Continue reading -->

The Never-ending TDD Story — Part 5

[Note: I’m using Copy as HTML to transfer code from VS.Net to BlogJet. This tool embeds style sheets into the posted blog entry to provide the nice formatting for the source code. Unfortunately, the version of .Text used by Dot Net Junkies won’t let me post the embedded style sheets. This means that viewing this article in an aggregator will look different, and worse, than viewing it on the DotNetJunkies site.
Continue reading -->

TDD Dive 4 — Refactoring away External Loops

[Note: I’m using Copy as HTML to transfer code from VS.Net to BlogJet. This tool embeds style sheets into the posted blog entry to provide the nice formatting for the source code. Unfortunately, the version of .Text used by Dot Net Junkies won’t let me post the embedded style sheets. This means that viewing this article in an aggregator will look different, and worse, than viewing it on the DotNetJunkies site.
Continue reading -->

Different keyboards promote different priorities

Scott Densmore and Peter Provost are both keyboard junkies. They live their lives finding new keyboard shortcuts to do stuff. If it doesn’t have a shortcut for it, they ain’t gonna use it. On the other hand, I don’t have an obsession with keyboard shortcuts. I have no problem using a mouse, right clicks, etc, to get the job done. And it is not because I am in love with the WIMP style of interfaces.
Continue reading -->

Speaking at .Net Users Group in St. Louis, 11/29

For those of you interested, and in St. Louis, I’ll be speaking at the .Net Users Group meeting this month. My topic will be “Refactoring: Adding Design to your Code After It Is Written”. My underlying intent in this talk is to convince people that refactoring is a worthwhile activity, as it adds value to your code. I intend to walk through some simple refactorings to improve a piece of procedural code and begin to flesh out its dumb data objects into living, breathing OO classes.
Continue reading -->

The Psychology of the Extreme Programmer

There has been an interesting thread going on in the Extreme Programming Yahoo group. I haven’t read the whole thing, but I’ve cherry picked out some good posts from the list. Steve Gordon posted one that I find particularly interesting. He posits: I am finding that the most productive pairings are when the knowledge of the more junior developer is not a proper subset of the knowledge of the more senior developer, but complements it in some way.
Continue reading -->

Diving into TDD — Take 3

[Note: I’m using Copy as HTML to transfer code from VS.Net to BlogJet. This tool embeds style sheets into the posted blog entry to provide the nice formatting for the source code. Unfortunately, the version of .Text used by Dot Net Junkies won’t let me post the embedded style sheets. This means that viewing this article in an aggregator will look different, and worse, than viewing it on the DotNetJunkies site.
Continue reading -->

Happiness is…

Spambayes. A long time ago, in a blog far, far away, I pined for something to free me from this prison of spam. My good friend, Peter Provost, turned me onto Spambayes. This single tool has given me back my inbox. I’ve been targeted these past few days by a particularly nasty spam that has been sent to me over 300 times in the last 24 hours. Spambayes caught each and every one of them, and I didn’t even know they were there until I went back to look at the spam that had been filtered for me.
Continue reading -->

TDD Dive — Part Deux

When last I left you, we had just about started implementing a simple payroll system using TDD. We had written two tests and done some refactoring, but there were still some code smells that I didn’t care for that we were going to look at before proceeding. This is the current Payroll.Pay method: 1: public string Pay(string payDate) 2: { 3: if(employees.Count == 0) return null; 4: Employee theEmployee = employees.
Continue reading -->

Deep Dive into Test Driven Development

In a class I recently taught, the students created a simple payroll system using Test Driven Development. Different students made different amounts of progress, some almost finishing the example I’m about to post, and some not quite so far. But they all asked for my solution. I have already posted the code to my solution, but now I want to talk about how I went about creating it. Hopefully this will share my Test Driven thought processes with my students and anyone else who might be reading.
Continue reading -->

The unsung benefit of TDD

Through an interesting set of circumstances, I have the opportunity to create a really simple build server here on my project team at MS. We’re using Windows Services for Unix and writing everything using KSH scripts. Ah, my years of Unix experience coming in handy again 🙂 Anyhow, the issue here is that my script is now 200 lines long, and I’m trying to put in several different changes to get it finished.
Continue reading -->

To my students from last week…

As promised, here is the code I told you I would post. This is just the first story, paying a salaried employee. I’ll post an explanation of what I did and what I refactored tomorrow. After that, I’ll post the code for the next story and an explanation of that. See PayrollExample — bab
Continue reading -->

Programmer Tests as Agile Documentation talk at St. Louis OOSIG last night

I gave another talk on this subject last night at the St. Louis OOSIG meeting. Not a huge crowd, as the announcement came a little late (that’s my story and I’m sticking to it :)). Presentation went really well I thought, and I’m really getting my thoughts and ideas in focus around this subject. I do think there is a tool and a technique missing from my bag of tricks that would make life easier when using tests as docs.
Continue reading -->

Another name for unit tests…

There are so many names being used for TDD’ed unit tests right now: Unit Tests (of course :)) Programmer Tests Technology Facing Tests and more I can’t think of right now But, my friend Michael Hill (who doesn’t blog and I wish he would) came up with a different name for them at the XP Universe conference a few years ago. We were talking at the bar (where else would you find Hill?
Continue reading -->

Updated outline for Agile Tests as Documentation

I’ve updated my outline a bit and fleshed it out some. This is the new outline, so please feel free to comment. Introduction <LI> problem </LI> <br /> <OL type="i"> <br /> <LI> Documentation is an expensive anchor around a team&#8217;s neck<br /> <LI> Lots of money to produce (40% on current project)<br /> <LI> Expensive to change (increases inertia and cost of change)<br /> <LI> Difficult to make comprehensive (need source anyways)<br /> </OL><br /> <LI> Need something different that will promote minimal inertia, cost, and is accurate and comprehensive.
Continue reading -->

Upcoming talks in St. Louis

If you happen to be in St. Louis any time over the next few weeks, I’m talking at a couple of different user groups. On Wednesday, Sept 1, from 7-9PM, I’m talking at the XPSTL meeting in St. Charles. And I’m also talking at the St. Louis OOSIG meeting on Thursday, Sept 16th. The topic of both talks is the same: Using Programmer Tests as Agile Documentation. For more information, and an outline of the talk, please see the previous entry in my weblog.
Continue reading -->

Feedback sought on using Offline Application Block

Has anyone out there written any code using the Offline Application Block? If so, Microsoft would love to talk with you. patterns&practices is actively looking at what changes should be made to the OAB for version 2, so any feedback would be great. In particular, we are looking for information on how easy the API was to use and understand, if there were any things that you were trying to do with the block that were impossible or needlessly difficult, and any new features or tooling that you’d like to see.
Continue reading -->

Using programmer tests in place of some or all documentation?

I’m writing an article for an agile software magazine about how to use programmer tests in place of some or all written documentation, and I’d appreciate some feedback on a very early outline for the article. This is what I intend to cover: Different audiences for documentation <LI> Application programmers &#8212; users of our libraries </LI> <br /> <LI> Maintenance programmers &#8212; modifiers and extenders of our libraries </LI> <br />
Continue reading -->

Button’s Law of Design Maturity

The prevalence of Singletons in a design is inversely proportional to the maturity of the design, and the designers. Be it known, that from this day forward, this shall be known as Button’s Law. (Just kidding) There is a note a truth here, however. I’ve talked to a lot of the best designers that I know in the field, and we all share a common opinion. (Not that I’m putting myself in the same class as these developers.
Continue reading -->

Quick trip report from XP/Agile Universe

I just got back from the 4th annual XP/Agile Universe conference, held this year in Calgary. I was only able to attend the first 2 days due to other obligations, but I wanted to share what happened while I was there. It started Sunday, with a day full of tutorials. I’ve been the tutorial chair for the last three years, and I’ve noticed a shift in the attendance patterns. The first year, we had more tutorials focused on basic agile programming techniques, like TDD and refactoring.
Continue reading -->

It’s not about testing!!!

When you hear someone talking about Test Driven Development, what is the first thing that comes to mind? Is it “Gee, this sounds like a testing technique!”? If it is, you aren’t alone. Given that the first word of the phrase is Test, I guess you could be excused. But the startling fact is that Test Driven Development, or TDD for short, is not fundamentally about testing. If Not Testing, Then What?
Continue reading -->

I guess I should introduce myself…

I’m Brian Button, and I own Agile Solutions Group. My 30-second elevator speech goes something like, “Agile Solutions Group works with small to medium size business and teams that creates software as part of their business, but not as their primary business function. I can show them how to build better, faster, stronger software using less time and fewer people, and creating the software with higher quality than anyone else in their industry.
Continue reading -->