It is a bit late, but I have busy with assignments since before Christmas.
I guess 2009 was a fairly eventful year. Had a baby, moved to another part of the country, started a new job. Passed my first year of uni.
Started a mailing list, agile-quality, it didn’t really catch on, but that is fine. I wasn’t really prepared to promote it by starting a lot of the discussions myself. I thought about it but that would have made it a bit like a more pervasive blog.
Went to three open space conferences, a software architecture one, and two .NET ones.
Did several presentations at work. One for developers on the Dependency Injection Principle, one for project managers on Scrum, Lean and Kanban, and another one for developers on Domain Driven Design. Unfortunately they have stopped the regular presentations for developers now. Supposed to be replaced with workshops that are presumably more relevant for our work, which to me defeats the purpose a bit. It was nice to be able to explore ideas from outside our day to day work.
Went to the local .NET usergroups fairly regularly in the middle of the year, but I stopped for two reasons, too busy with uni and less interest because my job was mostly MFC C++. I also try to keep my programming for work life and my programming for fun life as separate as possible. I don’t even have Windows at home now, just Linux, although for most of 2009 I did have a Windows 7 Beta VM set up. I know a lot of people are devoted to .NET and the Microsoft ecosystem, but it is fine for .NET to be just my work platform. It turns out that by the end of the year my job involved more .NET, so I am reevaluating attending .NET usergroups, as the .NET community here is still a pretty good community. Depends though, my wife and baby will be going swimming on Tuesdays nights which is when the .NET usergroups meet, so I will first have to see how the schedule plays out. In the meantime, I will start looking out for other software developer communities, perhaps more general ones, nothing too platform or language specific.
I mentioned in a previous blog post that I was thinking about a programming language for 2010. It is a bit of a cop out, but because I don’t feel like I invested enough effort into learning Haskell last year, I will give it a proper go this year. I have set a goal to have completed going through Real World Haskell by the middle of the year, and will try and use it properly for something in the second half of the year, perhaps starting a, or contributing to an open source project. The two runners up were Erlang and Factor. I look forward to learning those in subsequent years.
I started off being subscribed to a number of blogs, mailing lists and twitterers, and the number steadily grew over the year. I couldn’t keep up with that much information overload. Especially when I got my new Nokia N97 phone, and started getting emails on my phone, I ended up creating a special mailing lists folder and redirecting all mailing lists there so they my phone doesn’t vibrate every couple of minutes, and non-mailing-list emails are easier to find in my inbox.The result of that is that I hardly ever read mailing lists anymore, and by the time I try and catch up on them, the conversation has moved on. It got to a point where I did a mass unsubscribe on Twitter too, cut down the people I follow from around 800 to 200. I did the same with the blogs I read in Google Reader. In the next few days I will have to think about which mailing lists are the best for me, and probably unsubscribe from the others. Another option would be to have the good ones and ok ones going into separate folders. I am still undecided if I will allow any to go directly to my inbox or not. I will let you know which mailing lists I have found the most interesting and will try and take part in.
For a few years I had been a user of the Dvorak keyboard layout, and I found it superior for when typing in larger blocks of text. However it is unsuitable for programming with shortcuts. If you use the mouse a lot, and only type in the source code, Dvorak is ok, but if you try and use the mouse as little as possible, and want to use shortcuts a lot, Dvorak doesn’t help. Also by pair programming it is a nuisance having to switch all the time. For these reasons I have switched back to Qwerty, using my terrible three finger approach. One thing I miss about Dvorak is that it forced me to properly touch type, and it was faster. However my typing speed is not the bottleneck no matter what I do, so my three finger qwerty pecking is fine for me. Another bonus of Qwerty is that it works one-handed while Dvorak needs both hands, so I can hold the baby and still use the computer.
I experimented with using personal, or household Kanban as an organizational tool. I found it didn’t work so well for the different types of things that need to be done. Sometimes you need to put something aside when something with a different schedule comes along. My Kanban board told me there were smells in my value stream, but I knew that. The solution was to look upstream, and limit what is coming in, but if you don’t control or own the entire stream, there isn’t much you can do. As an example, my backlog might be filled in with things like “Write a blog post”, “Go shopping for shirt”, and “Read Clean Code”. Notice how they all have very different natures. Writing a blog post can be done in one session, but can usually be done at any time. Going shopping for a shirt has constraints on when it can be done, I can’t do it between 5 and 7am on any arbitrary day. I have to wait until a sale is on, go into town, which costs extra travel time, and so it is best combined with other things that need to be done in town. Reading a book is something that doesn’t happen in one session, you start it, and do bits here and there over time, while you do other things.
My In Progress column ended up getting filled with things like “Buy a shirt” “Read Clean Code”, and “Develop CQRS example program”. When a university assignment came along, with a deadline of course, there would be no slot for it until I finished one of those three items. And you can’t tell your professor “sorry, I don’t have any slots free for that, hopefully my wife has time to help me buy a shirt next weekend and I can make a start then”.
I have seen people solve exactly these issues by complicating Kanban with elaborate swimlanes, and special categories but the best thing about Kanban is its simplicity. We have started using it at work for our bug-fixing sprints, and it seems to work well, and I could see how it would work well for some people as a personal organization tool, but I decided that complicating Kanban to accommodate my needs was too much of a compromise, and decided to try something else. Now I know that every day I have time to get things done that don’t have constraints on when they have to be done. Things like writing blog posts, doing assignments, developing software and reading books. Of those that can be done in one session, like blog posts, I simply pick a day, (usually a day when things with deadlines are out of the way is a good choice, for example, weeks ago I had two assignments to do, and I wanted to write this blog post, so I scheduled it for today, the day after the assignments were due). For the other things, like assignments, and reading books, that have to be done over time, I have set up a spreadsheet that tracks my progress in words, or progress or whatever, and knows when the deadline it. It tells me for the current point in time, where I should be, and how far ahead or behind I am as a percentage. It is sorted according to this percentage and I work on (in my regular morning timeslot that I have set aside) whatever thing I am the furthest behind on, or the least ahead. I will try and keep the number of things on this spreadsheet limited though. I am thinking somewhere between 3 and 5 should be the limit. For other things, that can only be done at certain times, or have to be coordinated with other people, you just have to pick a time to get it done and do it then. General todo lists are evil though, anything that can’t be managed by the approach described above will either be done immediately, or not done. I find with my diary, and my spreadsheet there is enough to do without a todo list hanging over my head.
The second year of uni is about half way through, it is very interesting, we only have 4 students in the course. The assignments are getting longer. It will be interesting to see what is in store for us in the next half of the year, or indeed the next half of the course.
In November I attended the XP Days in Germany which I blogged about. Hopefully there is the opportunity to attend further such conferences in the future. OOP in Munich would have been good, I should have asked to go to that.
So that is about it for the year. I don’t have any goals as such, because I find the things that people usually list as goals are at the opposite end of the cause and effect chain to the things that people can actually control. I am going to think a lot more about values and principles, and try and make decisions according to those values and principles and assume that where that takes me is the right place for me to be. In writing this blog post, I have thought about two more blog posts I want to write. One about which mailing lists I have decided to take part in, and another about my values and principles which could take a bit more thought. I won’t schedule them now though, just keep them in the back of my mind for now.