I wish that I knew more about certain aspects of modern computer technology, espcially information-management aspects of technology. Examples of things that I wish I knew more about:
- Eclipse, especially its automated refactoring tools.
- How to write a web page that doesn’t look like it was written a decade ago.
- Web pages that accept input.
- Web pages that are generated on the fly. By a trendy new language (i.e. not PHP); probably Ruby on Rails.
- Web services.
- GUI creation and design.
Also, there are things about my own information management that bother me. Examples:
- I give information that I’m interested in to others (e.g. book ratings to Amazon) without keeping a copy of such information myself.
- Book links in my blog are ugly, and point to an outside source.
- I’m using Windows to get at my iPod, and it’s not as easy as I’d like for me to edit both its contents and the presentation of its contents.
- It would be nice to keep (and make available) a list of books that I own or have recently read.
(Whenever the above says “book”, read “book / cd / video game / dvd.”) It would be nice to be able to fix some of these issues, while brushing up my agile development chops at the same time. (Especially in ways that they aren’t getting brushed up at work.)
Last winter break, I started on a project to address some of these issues. Which failed abortively, its only tangible output being a series of posts here on Java. Analyzing this with my finely honed agile management skills, what went wrong? Some things that I didn’t pay attention to:
- Sustainable Pace. Realistically, I won’t have any time during the week to program on this. (Plan, maybe, but not program.) If I’m lucky, I’ll have a couple of hours at a time in the weekend to program. When I started, I was using a technology that I was unfamiliar with (Java GUI programming); I had a free week to learn about this, which probably would have been enough if I hadn’t spent a lot of that time playing GTA instead of programming. Which was the right decision, but it meant that I never got the product to a useable state that week, even in embryonic form, and it was really hard to make further progress once work started up again. So this time, I have to plan all of my work to fit into two-hour chunks that I can work on every week or two.
- Frequent Releases. It would be even better if, at the end of each two-hour chunk, I could use the resulting functionality to do something new, that would be reflected on this web site. It would also be acceptable if there were changes that led to the same web site being produced in a different way: they wouldn’t be visible to the outside world, but they would have valuable for me in my Customer role (somebody who wants to produce a web page), not just me in my programmer role.
Putting these lessons together, I can’t get too hung up on the final technology that I’ll use. Which is probably correct for other reasons: eight months ago, I was thinking in terms of Java+XML as a final technology, while now Ruby+database seems more likely; once the implementation gets that far, my technological goals will probably have changed again! What I need to do, instead, is come up with an initial story that I can implement in two hours or less, that will result in a change that is visible on my web page, and that will hold up to potentially drastic technology changes under the surface.
If there’s a change on my web page, HTML will have to be generated; if I can carry it off in two hours, I will have to generate the web page by hand. (Or something morally equivalent, hard-coding strings into a program.) But it would be nice if, a year from now, the same link led to a web page that was generated on the fly, instead of a static web page. So let’s not have the link end in .html.
Fortunately, Apache has a tool (mod_rewrite) that allows you to manipulate how you generate HTML in response to a given URL. So there’s my first story: I’ll write a web page by hand, hide it somewhere on my web site, and learn enough about mod_rewrite so that the link http://www.bactrian.org/dbcdb/2 causes the contents of that web page to be generated. (The ‘2’ at the end instead of ‘1’ is because of the order in which I plan to implement the early stories.)
What shall I use to plan this? I’ll write up some stories, and put them somewhere, as well as a list of technical / planning tasks that don’t have direct Customer value that I’ll address as necessary to complete the stories effectively. I’ll ditch the concepts of iteration and releases, though: every story will be really short and lead to a release, so there’s no room for additional layers. Most of the Planning Game will go away. (I don’t think I’ll bother estimating my stories, either: I’ll just have a note as to whether or not I think it’s necessary to split them before implementing them.) No Pair Programming, obviously. Not much in the way of measurement artifacts, but I will make my list of completed stories available, with dates. And I’ll add a dbcdb category to this blog, so that I’ll feel embarrassed if I don’t work on this project enough to create posts that justify that category.
Hopefully I’ll implement the first story this weekend; if not, then next weekend. I’ll also try to get a few dozen initial stories written up over the next week or so. I’ve put up the list of motivations already; right now, it only contains information that’s in this post, but as I learn about more technologies (or stop caring about technologies), I’ll update it as appropriate.
There are no revisions for this post.