Friday, March 21, 2008

RescueTime

RescueTime is a cool service for logging time usage from active desktop windows. They have a nice web dashboard for analysis and goal setting. The possibilities to extend the idea of logging human activity are limitless: smartphones, entertainment systems, even sleep time. I really hope that RescueTime (or any similar service) gets popular.

Why do I recommend RescueTime is simply because I have experience on these applications. A few years ago I implemented a similar system for personal use and before that I used only Excel for time management. I still need Excel for project planning. But for automatic logging you can't find a better solution than RescueTime right now.

Monday, March 17, 2008

Why Closed Source Quality Sucks?

When I was a (full-time) student, I lived in a dorm with three other guys. Each of us had an own room and we shared the rest of the flat. People were moving in and out constantly and over the years I had perhaps with 10-15 flatmates. During this time I learned a lot of men's living habits. Enough perhaps to launch a career in marital consulting or something. Looking back, I think most of the troubles were caused by one thing only. That is, keeping the shared space clean.

If our flat, the overall cleanliness depended on who was currently living there. And guess what? It was dirty if one of the guys caused a lot of mess. It was tidy, if everyone tried to keep things decent. One guy I remember was so careless that the best we could do was to keep the apartment fire safe, not clean. But still, this same fellow looked perfectly normal himself, there was nothing that would have given any clue on how he lived.

Later I have been working with closed source business applications. By 'closed source' I mean that at least the 'business application' parts of the software are closed, not the underlying web framework etc. Unfortunately, I have seen a lot more crappy code in the closed side than in the open side. And any efforts to clean up the bad business code have failed.

I have started to think that team dynamics in developing business software are pretty much the same as in sharing a flat. One individual programmer can turn the whole thing into an unrecoverable mess if given the opportunity to do so. If this one guy "doesn't get it", the rest of the team is usually helpless. Constant refactoring sounds a great way to maintain quality, but economically it equals to cleaning up someone else's shit. In the long run bad coders will win and the good programmers are just content to keep things safe instead of clean.

Contrast this to open source where most of the code has to look decent to get accepted. It is a no-brainer that nowadays basically every web-based business app relies on open source for core non-business functions.

Friday, March 7, 2008

Offshore programming

Three - four years ago I was told by a professor in software business that every software development job is going to India. Another member of the faculty said that this is not going to happen. At the time, I couldn't say who was right or wrong but I wanted to learn more of this fascinating craft anyway. Today, I feel more confident to weigh in my opinion, but first, a few generally accepted ideas about software:
  • Software development is not an automated industry, it is a craft. Something that involves human time and effort. Training of a good software developer takes 10 years. Therefore, it is always hard to find good programmers just as it is hard to find professional brain surgeons.
  • Unfortunately, bad code usually works well enough! In my (relatively short) experience in business software, I have not yet seen an application that would pass any decent internal quality criteria. Producing bad code obviously requires less skill and generally favors bad programmers over good ones.
  • Yes, you can transfer craftsmanship overseas. Actually, even in highly automated industries it is worthwhile sometimes to add (cheap) human labor instead of automation. Human labor is very flexible.
  • Software development has very low returns to scale. Adding more cooperating developers adds progressively less output. I think the optimum efficiency in business applications is between three people: one business person who represents high-level needs, a programmer who creates the application and perhaps a graphical design/UI/database specialist who adds to overall quality and provides support for the programmer.
  • Software industry structure is greatly influenced by the balance between open vs. closed systems. Open systems increase competition, closed systems cause monopolies. Increased competition means cost pressure. And by this I mean time and money. Time pressure generally favors people close to the customer, money pressure favors offshore development.
  • In textbooks, time pressure is handled with agile methods and increased automation. In reality it is handled by writing more bad code instead of fixing it. "Hit and run" you call it.

And finally, my predictions :
More and more cheap code is demanded - and produced overseas. But not in the current offshore havens! They are going to be too expensive for cheap code, and will have to rise in the value chain. Consequently, there will be more competitive pressure for a western technical specialists of any kind, because a specialist for every niche can now be outsourced. Big players like Accenture have already adjusted their network for this.

Personally, my hopes for business software development are in increasing automation, the magical silver bullet. Maybe this craft can become an industry after all, when working with bad code is outsourced to machines who do it best.
(By increasing automation I don't mean anything of general kind, but task-specific tools like report generation that minimize code and maximize data.)