I've been a big fan of most of the practices I learn from Agile for a long time. I've never been a big fan of zealotry, though. To me, the core of agile is about continuous self-improvement and everything else comes from that. If you adopt a couple of good practices just because some guru told you to, and you haven't really learned how to evaluate your own situation and discover ways to improve your self or your team, you're missing it.

On that note, I'd like to thank jrwren for these hilarious agile videos. We've had lots of intense agile-buzzword-flying-around action at work and it's nice to see the human side and smile again.


 
Categories: agile | humor

December 1, 2006
@ 06:17 AM

Long time since I last posted. Need less to say, I have been a little busy. I hope to resume most of my regular life soon, but here are a few highlights (to be followed with further posts later) of what I've been up to:

  • Julie and Allie came back from a month long trip to Taiwan, to visit Julie's mom. Allie got her second hair cut - the last was when she was 1. She went from waste length hair to just past the shoulders. She made amazing progress in Chinese. Before this trip, she had a bad accent and very limited vocabulary. Hanging around with two cousins she adores, as well as dozens of other extended family members willing to spend time doing things with and talking to her made a huge difference.
  • At the beginning of November, I was invited to participate in a week long training session my company puts on - not for developers, but for analysts. It was a really neat experience and I think it speaks highly of our management - that they get the need to keep developers as up to speed as anyone else on how the business works. I learned a ton of stuff, and go to spend time with top minds in the industry (and bug them with questions.) In addition, I met a bunch of cool people from our offices all over the world. We have a lot of work to do on the technology front to improve our organization, but I have now doubt that we're going to do it. This company will grow amazingly over the coming years, and I am glad to be here to take part in that.
  • We were going to go to our friends Monique and Dominique's house, in Portland, for Thanksgiving, but ended up inviting a few people over. More people got invited. Then a few more. In the end, I think 19 people showed up. We had a blast, but it was a lot of work to get ready and clean up.

Enough personal stuff...

  • I enjoyed the final day of the Seattle Code Camp. I got a chance to talk to two of my agile heroes, Brad Wilson, and Peter Provost. I also got to talk to Stuart Celarier, and was introduced to the Seattle XP Group. Too bad their meetings are the same day as South Sound .NET - which I haven't gone to either in several months. Argg...
  • Speaking of user groups: Some co-workers finally got me excited enough to form an in house Developers Group. I had the good fortune of getting to know someone in our company that is one of those "do-er" kinds of people - the kind that can organize a teleconference on 3 continents with 100 people, in under an hour, without batting an eye. I kind of bashfully asked if there was any way we could use one of our company's fancier meeting/conference rooms after hours for around 20 people. She basically said, "Go for it!" and I found that it was actually as easy as inviting the room to our conference. I could even invite coffee and his friends pizza and sandwiches from the cafeteria downstairs if my boss was willing to pay for them (hmm...haven't asked about that...) We got a sweet conference room on the twelfth floor, with an awesome view of the Puget sound, a massive projector and computer, fancy mood lighting, comfy chairs, a mezzanine level - the whole nine yards. I hope about 10 people will show up, which we will try to grow to 20 or 30 as time passes. Thanks Wei, Michael, and Ariel for finally pushing me over the edge on this!
  • I've been learning SSIS. It's been kind of frustrating, kind of fun. Mostly, it's only fun when it works. It was really painful to get to the "works" stage with my first couple of projects, but aside from a few gripes, I see how powerful and useful it could be going forward.
  • Our development team at work feels like it's getting tighter. Inspired by Brad and Peter, we spent more energy trying to do pair programming and share code better. I think we are good, but we could be a lot better. We only have one project we are doing right now that is truly owned by all developers on the team. The other 4 projects we actively work on all have code owners, and we are working to abolish that.
  • My boss said I was a "hippy coder" at a recent team meeting held down the street, in an...umm...off site meeting facility with fermented beverages. I was a little shocked. I try to be open minded, but compared to most of the other developers in our organization, I think I am _more_ disciplined - I use TDD, automated builds, normalized database schemas, consistent names, etc., in comparison with the local standard, which is to say "good enough" a lot. I guess I was just kind of shocked about this, but my boss has a history of making startling observations about me, which give me great cause for self reflection - which is a good thing.
  • I installed Vista...like it...not the stuff of dreams, but lots of little things I like (parental controls especially.)
  • I finally checked out the "Baroque Cycle" from the local library. What a read. Lots of history. Lots of math and science. Heavy. Sucked up a lot of time.
  • I have been working on something kind of neat, integrating SQL Server, our applications, and OLAP. For a taste, here's a paper a colleague wrote several years ago, about doing almost the same thing, just using SAS for the application part (where I would be using .NET.)

Anyway, I hope to blog more now. Later!


 
Categories: agile | career | CodeCamp | database | tdd | ug

Last night I was working on something and suddenly found myself needing about 30 really simple ActiveRecord classes. I figured it was about time to stop writing these manually each time.

Looking at the CastleProject.org site, and seeing that the status of ActiveRecordGenerator was frozen, I briefly considered writing my own little tool (or just modifying ActiveRecordGenerator as needed) to do the job. After another 10 minutes, I finally broke down and made a CodeSmith template (we've got CodeSmith, but for some subconscious reason I keep avoiding using it.)

This was fairly straightforward, and after 20 minutes or so, I had the template I wanted, and started generating classes. After another 20 minutes I had added some things I missed the first time and everything was great.

After completing this, I looked at what I had done, and found myself thinking: this is alot of cruft.

Let me mention that all 30 classes had basically the same set of properties. I briefly considered writing a generic class, but didn't think there would be a way to get the name of the class into the '[ActiveRecord("MyTableNameIs")]' attribute. That, and a small handful of special rules, were the only things different about these classes.

I was thinking: A lisp-like macro would have been really useful. Why don't we have lisp macros in OO languages like C#? I've always fealt (but not agreed) that it's because OO leads you to composition instead of code generation. I could have written one base class with the properties I wanted, then 30 derived classes with the right names and attributes. That is still too much typing, though, and I would have used code generation anyway. I chose not to relate these classes, as they are not really related in this domain anyway, only functionally and structurally related.

I am not sure what the best answer to this type of design problem is, but I know I haven't found it. Code Generation is a jack-hammer in the face of the problem of code duplication caused by imperfect design. It gets me through the barriers, but the barriers were trying to tell me something.

Frameworks and tools (like ActiveRecordGenerator, or even better - Streamlined) that generate applications based on meta data are becoming very popular. Are these tools just reactions to the lack of good DSL tools or lisp-macro-like facilities - i.e., why am I writing my C# application in Code Smith templates and not in C#?


 
Categories: design | architecture | refactoring | agile