This will be the first in a series to document my organization's adoption of an agile development process (specifically Extreme Programming). I want to document this process for three main reasons: 1. Basic posterity. I may want to look back on this process and reflect on the mistakes we made. 2. So that others can learn from our mistakes. 3. So that others can possibly help keep me from making their mistakes. Seems like a lot of mistakes being made in agile development. That's actually kind of the point: fail fast. Hurry up and get it wrong the first time, so you can learn from those mistakes and move forward.

Our first challenge is defining what Extreme Programming IS. We got copies of The Art of Agile Development for all the members of the team. It is an EXCELLENT resource for getting everyone on the same page when it comes to XP practices and, more importantly, the purpose of those practices. That is the main fundamental that I have tried to push to my team (and push to myself): the purpose of the practice is more important than the practice itself. The point of TDD is to create a feeling of confidence in the stability and design of your code. If it is not doing that, you need to punt it and find something that DOES do that. The point of Incremental Design, is to develop only functionality that provides business value. If you find yourself outside that scope, either you've wandered off the XP farm, or Incremental design is not working for you... get rid of it.

The whole point of Agile development is making change the heart of your process, don't be afraid to change your process, tools, code, the design, etc. That's what this process is all about.

Until next time...

~Lee

I find that most programmers have a music that they prefer listening to while coding. Just wondering what the gamut of developer soundtracks there are. While I LOVE listening to Sister Hazel, Foo Fighters, Cold Play, Ben Folds, and Bob Schneider for coding, I find myself drawn to the space station most of the time when coding.

What's YOU'RE developer soundtrack?

I saw this book in Borders and, when I read the table of contents, I KNEW I wanted to read it. I had just returned from Headspring & Jeffrey Palermo's Agile .NET Boot Camp class in Austin, and this covered a lot of the same things (and a few others), so that made it very poignant. Code Leader (Wrox) by Patrick Cauldwell

I am adding this book to my must read list. I got through it in about a week. It is VERY easy to read. For developers looking to take their development skills to the next level and are not able to go to Jeffrey's course, this is perfect. Agile .NET Boot Camp covered some more concrete things like NHibernate and the practice of TDD and Pair-Programming. This book covers all the main concepts for setting up a professional development shop. Most of the practices it talks about are main practices in agile software development.

 

This book is broken into four parts. Part one is about the philosophy of code leadership. It talks about some of the philosophy behind test-driven development, continuous integration, and the main buy vs build decision. Not so much how to do TDD or continuous integration (even though, there are concrete examples). but why to use these practices. Part two, is all about the processes. Starting with how you know when you're really done, how to properly do testing, how to use source control and how to use and understand static code analysis. The third section concentrated on how to actually put code together. Cauldwell talks about how to develop using interfaces and how to find and limit dependencies. Section three also covers the model-view-presenter pattern of application development, and some good guidance on how to use tracin and how to do error handling. The final section just kind of puts all the other sections together in a case study: building a calculator.

Definitely added to bookshelf and recommendation list!

 

~Lee

Just some photos I took the other day of Merriam City Park. Another thing to love about this city.

DadNKidInFlagsFlagsIIFlagsVFlagsIIIFlagsVIFlagsIV 

Happy Independence Day!

 

~Lee

I LOVE being a .NET User Group Member, but I was raised by a hippie mother who believed in activism. She believed in getting involved. I guess a bit of that rubbed off on me. I wanted to get more involved in the .NET community this year, and I am having a blast doing it. One thing still rubs me the wrong way about the .Net community and the IT industry in general: they don't consider Kansas City a player in the IT world.

I've blogged about this before. I see conference after conference being held in New York, Seattle, San Francisco, Las Vegas and Florida. Lately, I hear a lot about Austin, TX. There are a lot of really great programmers in Austin. I think there are a lot of great programmers in Kansas City as well. But we never see conferences come here. You'd be hard pressed to find a major event here.

I want to change that. I want to organize (or help organize) some major IT events here in Kansas City. Maybe if we start to organize our own events and people start to travel here for those events and begin to love this city the way we do, they'll start planning their OWN events here. Once they've visited The Country KCKYLINEClub Plaza, Westport, 18th & Vine or even Shawnee Mission Park, they'll start to WANT to have their events here. This is, after all, the middle of the country. Halfway between EVERYTHING! Why WOULDN'T you want to have your event in Kansas City? Why have your event in New York and make people have to shell out $500/night for hotel rooms? Why make people in L.A. travel that far? Why have you event in San Francisco (same problem)?  I think KC is a PERFECT place to have an event. Hotels are (relatively) inexpensive, there are lots of good venues, and we have an EXCELLENT community of developers who are just DYING to go to some of these things, but can't convince their company that it's worth $5000/person, once all is paid for.

This will take your help Kansas City. I want to hear from you about what you'd LIKE to see in a conference. What kind of speakers would you like to see? What kind of topics? Workshops? Fishbowls? Panel discussions? I'm not saying this is going to be easy. We probably won't even be able to put something like this together before the end of the year, but we should start planning now. Most great speakers don't have anything on their calendar for next spring, and spring is an AWESOME time to come see KC, when the fountains are getting going and it hasn't hit the hottest part of the summer yet.

So send me your ideas. Start blogging about it. Start bringing it up at the User Group meetings. Where should we have it? What should it be about? This could be something as simple as an Open Spaces type thing. Just something to get the tech community to realize that there is a thriving geek community here in Kansas City.

~Lee

The Test-Driven Development talk I gave last night at the Kansas City Dot Net User Group meeting seemed to go really well. This was my first ever talk and it is something that I am very passionate about. There were definitely some technical glitches. I recorded my demos ahead of time using Cam Studio and that was tdd_logo good, but I didn't bump up my resolution so the people in the back could see the code. I will have to make sure to set the resolution higher next time.

The turn out was stupendous. There were 62 that signed the sign-in sheet. I imagine there were probably more people there that didn't get the sheet because they were standing in the hallway. The turn out was great but it only made me more nervous. I was sweating like a nun at Sturgis, and I may have talked a little to fast at the end.

I want to (again) challenge all the KC DotNetSig people out there to come up with a topic to speak about. Even people who are not KC natives. Volunteer to come speak at our user group meeting. Come share some passion or expertise that you have about a .Net topic. I'd love to get Jeffrey Palermo to come do an MVC or Agile talk. Hopefully, we'll be able to work something out. We may also need to see if Centriq has a larger room! :0)

 

UPDATE: PowerpPoint and .avi files located here. used WinRar for compression

 

Lee 

OK. I've had a few days to decompress. I am still beating on my deck for the TDD presentation tomorrow (actually tonight) for the .NET Users Group. So I have had some time to decompress and debrief my boss about what I am bringing back from the Agile .NET Boot Camp with Jeffrey Palermo in Austin, TX.

Man! we actually covered a lot! Jeffrey did a great job of making it seem like not much, but when I got back and started telling my boss about it, there were just TONS of things to talk about. We talked about Team Estimation and Design, NHibernate Mappings, Test-Driven Development, Domain Driven Design, Automated Builds and on and on and on. I have absolutely no idea how we managed to cram all that stuff in three days, but we did. There were some things I'd already done, like TDD and setting up CCNet and AgileBootcamp using TortoiseSVN, but I even learned a few new thing in those areas. I HIGHLY recommend this class to any senior level .NET developer ready to take their skills to the next level.

Jeffrey takes a VERY pragmatic approach to software development. He emphasizes focus on what it is you're trying to accomplish and NOT the tools you use to get there. Tools come and go, but the reason you use the tools remains.

I'd like to thank Jeffrey putting up with me and all the questions that go along with trying to explain stuff to me. I'd also like to thank and Tom Jaeschke for just plain putting up with me. I had to call him up after hours two nights in a row, to have him help me out of my own stupid mistakes and he was MORE than helpful.

Thanks Headspring!

~Lee

I was thinking about the level of programming abilities lately, as we are starting to interview for an open position. I thought, "Wouldn't it be nice if programmers came in version numbers like software?" This would make it easy to say, I need a version 3 programmer with abilities in languages A, B and C. It's so difficult to say Mid-Level developer, because mid-level is so subjective. Mid between WHO? So here are my thoughts of what the versions for a web programmer might be:

Alpha: Has read some books and has put together some web sites for friends (mostly using Dreamweaver or FrontPage), but the quality is such that you probably would be leery about hiring them professionally until they learn how to hand-code some HTML.

Beta: Is getting better at putting together sites and has some skill with HTML; but still uses tables for everything, and knows next to nothing about CSS. Still is intimidated by the thought of dynamic web sites or database.

Pre Version 1 (0.1): Just a bit above Beta. Knows HTML and is starting to understand how CSS is supposed to work. Does some with JavaScript, but is still amateurish style. Starting to get into dynamic sites and how to connect to database. Still not someone you'd hire as a web developer for a professional team.

1.0: Can put together a web site. Will take the most direct route to every problem. Has no concept of scalability, extensibility or what's really going evolutionon "under the covers" of their favorite web design tools. Good entry-level developer. Needs lots of help and supervision.

2.0: Understands Object-Oriented development. Understands that there is a need for tiered development and separation of concerns. Tends to find more elegant solutions to problems and may, on occasion, use a design pattern, but has no concept of design patterns. Good junior developer. Can be let loose on coding things and may need some help finding a better solution to complicated problems.

3.0: Starting to understand object-oriented development and design patterns enough to see the use of them. Can even recognize a design pattern when they see one, but may not always be able to see a patterned solution to a problem. Starting to be able to architect solutions that have good separation of concerns and is testable. Knows a few different languages and WHY they are different (i.e. their best uses). Good mid-senior developer. Can easily be trusted to develop a solution and provide guidance to v1 and v2 developers. May still have trouble with more difficult architectural solutions but, with a little guidance, they understand and will remember the decisions they made and WHY for future projects.

4.0: Understands patterns and sees patterns within user stories. Starting to explore methodologies, architectures and approaches to  software development. Learning has begun to transcend language and technology. Constructs and deconstructs applications from their requirements in her head. Can see abstractly, how patterns fit together and how different x-driven designs can be applied to different situations. Is a decently versed Polyglot Programmer. Understands the nuances of different systems and methodologies. Good Senior programmer. Will easily be able to help v2 and v3 programmers to push themselves to the next level.

5.0: Thinks in terms of systems. Can still get down into the bowels of any system and rescue it from total code rot, but is much more valuable in making teams cohesive and preventing code rot. Can easily see when a v1-4 programmer might be starting to derail in their designs and can keep a team of developers motivated and excited about creating software solutions. Leads by example. Is always hungry for new and easier ways to accomplish development tasks. Can easily be trusted to run the entire IT department if they are required to. Good Senior Developer or Architect.

OK. So those are my thoughts. I didn't really edit these or spend a lot of time revising the definitions. Anyone got extras to add? changes to mine? I'd like to make this a group-think project. I know people have been trying to do this from the beginning of time. I have no delusions that this will become an ISO standard for identifying developer competency. But we should at least be thinking about it. What are YOUR versions? I want to challenges dev bloggers to write a blog about THEIR thoughts on developer versioning.

~Lee

BTW - I see myself as a v4 programmer, working REAL hard to live up to my v5 responsibilities. :)

Today was the first day of the Agile .NET Boot Camp in Austin, TX. The class is a blast. Jeffrey Palermo knows his schist. Today covered lots of stuff I have already worked with: TortoiseSVN, TDD, CCTray, etc. There were also some things that I had not worked with before, like Story Boards, and Team Estimation. Overall, it is just what they promised. We are working as a team in a way that a team might work in the real world.

Today, we set up the Team Project, it’s a basic issue tracking system. It uses the ASP.NET MVC framework. It is (intentionally) not complete and we started estimating with not much of a glimpse at the code base at all. Surprisingly, our estimates were not as bad as would’ve guessed, given our lack of exposure to the code.

Team estimation was very interesting as was dividing up the tasks for the stories. I am definitely starting a story board at my work for our big project coming up. Then, we pair-programmed the tasks. At the end of the day we finished the iteration (a little early!) and we talked about what’s on for tomorrow.

capitol

Tomorrow, we will talk more about Domain Driven Design, IoC containers (StructureMap) and  NHibernate. I am excited also to learn about creating custom build files to run tests, code coverage, etc. through CCNet and NAnt.

After class, a friend of mine, Brian Laird, introduced me (via email) to Dan Drown from DataPipe who lives here in Austin. Dan came by my hotel and we took a cruise around Austin. It is quite a beautiful city. Generally, it seems that capitol cities tend to have very little to offer in the way of lifestyle. That is definitely not the case with Austin.

We drove downtown and saw the capitol building (really bad picture) and we even tried to stop at one place to grab a beer, but it closed at 10:00 (not a late night city evidently).

hillary-ousI also got a picture of a car in the hotel parking lot this morning of a Texas state official’s car with a “Hillary for President” bumper sticker. I found that Hillary-ous and thought I’d share. :0)

I look forward to tomorrow.

 

 

 

~Lee

Emulation The good folks at SlickEdit® hooked me up with a review copy of SlickEdit 2008 Professional, and I gotta tell ya I was pretty surprised. I didn't really know what to expect. I guess I just expected a less feature-rich Visual Studio, but that's definitely not what I found.

First of all, I wouldn't consider SlickEdit to be a competitor to Visual Studio. It's more of a multi-purpose polyglot programmer's editor on steroids. First, on install, it asks about your editing environment emulation. This is a great way to ease into SlickEdit from another editing environment (for me Visual Studio).

BuildTagFileIIThen, it asks about language Tag Files (which is basically how the environment will handle you  chosen languages like syntax highlighting, compiler options, etc). Then it starts on a long journey of building these Tag Files. This was really the only unpleasant part of beginning to use SlickEdit. It seemed to take an inordinately long time to build these files. Chances are there are more things going on than I am aware of in this step of the set up process. Nonetheless, you only have to live through this once.

ColorSchemeOnce this was done, I moved directly to the Tools -> Options. I was able to  setup my color scheme pretty close to the what I like using some preset color schemes. In Visual Studio, I use Jon Lam's Vibrant Ink Port for Visual Studio. It's very easy on the eyes. So just choosing the "Black" color scheme got me pretty close.

I then saw Tools in the tree on the Options panel and opened it up. I saw Version Control Setup and was able to add Subversion by just clicking setup and pointing it to my Subversion executable on my machine. Couldn't have been easier.

 

AppLanguagesOptions

 

Cruising around the Options panel some more, I saw the Languages Item in the tree view. I think there is probably a choice for every programming language ever used (what the hell is YACC?). There are so many options in the Options Panel I could write a book about just that panel.. but I'm not gonna. Suffice it to say, that if you want to program in ANTLR, you can use SlickEdit.  :0)

 

Finally, I sent an email to SlickEdit and asked about setting up MbUnit unit testing within the IDE. This tests two things: whether or not I could do it (it wasn't obvious from the menus) & how fast the respond to support questions. I sent the email at 3:22PM and got a response at 4:33PM, so that is a damn good response time. They actually answered my question, too. I was able to setup MbUnit to run from within the IDE, by setting up a new menu item and pointing to the MbUnit executable to run my tests. (My tests didn't actually run, my command line arguments were not correct, but I didn't want to take the time to figure out what they should be and that is not a problem with SlickEdit, it's a problem with me. PEBKAC)

Even though, I'm not going to stop using VS in favor of SlickEdit, it is definitely going on my machine for programming in other languages that don't have a good IDE. All in all, SlickEdit is pretty... slick.

 

~Lee