iterative development

We’ve all had it drilled down our throats that development should be completed in short-sharp iterations. “Release early and release often” – no agile developer gets up in the morning without repeating this mantra to themselves before they reach the sink. However, surely it’s important to realise the difference between “Release early and release often” and “Release utter shit early and release utter shit often”.

Who really wants to use an application/toolkit/library that has so many bugs in it that the user experience is dreadful? Surely users would rather wait a few more weeks for something that is, in a sense, polished? I mean we’re not talking Microsoft Vista style release cycles here, but quality control consisting of a little more than running a set of unit tests would be nice.

So what has prompted this minor rant? Well Firebug unfortunately. I hate to criticise it because it’s free but the bugs I find in it are getting worse and worse. The most recent one being that the continue button no longer works in the latest release (1.4.0b10). Sigh. However, open source or not, my feeling is that if you choose to do something then do it properly or not at all.

Anyway. Regardless of the product, it surely makes more sense to sacrifice your release schedule a little for some real testing and bug fixing? For commercial products a bad user experience is going to make a sale difficult both now and in the future. Being first to market is one thing, but it’s far from being the only (or even main) contributing factor to a products success – Google and Facebook being good examples of this.

So is it possible just to have a little common sense about all this and maybe restate the mantra as “Release quality early, release quality often”. It can’t be that hard, right?

it’s easy to live in perfect hell

Just the other night I was watching a video of a live music performance on YouTube of my favourite band of all time Manic Street Preachers. While watching I observed how young they looked in the video. It then struck me how I remember the era when the video was recorded as if it were yesterday. The only problem is that it was nearly 13 years ago!

I’m pretty sure that I had many more ambitions and hopes back then – I would have been around 18-19 at the time. Certainly over the years my hopes and ambitions have changed. For better or for worse? I’m not sure.

There are things that I knew I really wanted. One of them was to attended university, my parents never forced me into this, I simply wanted to go (I was the first person in my family to do so). During my 4 years at uni I became certain that I wanted to do a PhD. However, by the end of my 4th year, the only real post-graduate opportunity was at the University of Bath, and I wasn’t really interested in moving. As a result, I ended up taking a job at OKI. The week after accepting the job, I was contacted by someone at a local children’s hospital about an opportunity to undertake research for a PhD in 3D modelling of the eye for the early detection of certain diseases in children. I turned it down. I thought to accept it would be unfair on my new employer.

After working at OKI for a year I moved on to work with at Cisco Systems. Eventually after 3 years at Cisco (the last year being pretty miserable, but I was kind of holding out for a possible redundancy payment) I got made redundant. As it happens, just before I got made redundant, I had applied for a PhD position in the area of algorithms, and was fortunate enough to have been accepted (I ended up obtaining a really great supervisor and was glad I held off). So not only did I get a pay off as part of my redundancy, I also had been accepted for my PhD prior to being made officially redundant. Sweet. Persistence pays off.

So, why the life story I hear you all say. Well, it was basically to illustrate the point that if you want something, you really need to go and get it. During my time at OKI and Cisco I had become stale – you just settle in and accept what is coming to you. It was rare when I tried to force what I wanted in those jobs – and in actual fact when you did, you were usually met with resistance. When you meet this resistance to ideas it is probably the time to move on. In large companies you have too many people protecting their own jobs.

Now, what exactly is the relationship between what I’m saying and the music video? Well if the band in the music video has aged that much, then I have to – despite the fact that it doesn’t quite feel like I have! And I think the older you get the less likely you are to make bold moves in your life. But you shouldn’t let this happen. You should always have goals, if you don’t believe me, believe Seth Godin.

I often find myself writing/talking about poor management and poor working conditions. However, it’s not just me, with the increase in the number of blogs and social network sites, people are finding it easier than ever to express their opinion. It’s not too difficult to find people saying: “I need two monitors and a Herman Millar chair”, and “My manager doesn’t have a clue how to do his job”. The thing is, many will be like me, that is, they have never been a manager and never owned a company. Both myself and others have a total barefaced cheek to criticize something we have no experience of, but it also shouldn’t stop us.

So, this brings me round to my point. If we are going to complain about, our managers, our co-workers, or the company we work for, then maybe we should get off our arses and do something. Stop sitting about telling people how things should be done or moaning that nobody listens. The cost of doing something for yourself these days in minimal, so if we all really believe that we can do things better then do something about it. This is what moves society and technology forward.

Not everyone is going to read this and think “Yeah let’s do it”. You will have the folk who say “It’ll never work”. You just have to ensure that you don’t surround yourself with these people – I’m not saying ignore advice here, as you may genuinely be exploring something that is never going to work, but ignore advice from those who say a lot but do very little. It will be the same folk that say “He was just lucky with that business”, or “I could have done that”.  Their procrastine nature will only dampen your enthusiasm.

Surely there can’t be a person who is happy to live in mediocrity? The only glowing benefit of Capitalism (and it’s the one that allows it to beat all other systems into the ground) is that it promotes the bettering of oneself and in turn society in general. It’s easy to mistake Capitalism for greed, but they are two different things.  So if you find yourself hit by the credit crunch and unable to find work, moaning about your job, or moaning about how everyone else appears to be making all the money, stop it and try to do something positive. I’m not the only one saying this. The legendary Paul Graham wrote and essay about it and many people who own their own software companies are saying sales are as strong as ever.

Just remember “Libraries gave us power, and then work came and made us free”.

are you in it for the long run?

As developers we are often faced with the issue of time vs. quality. Let’s face it though, we could spend forever getting it all just right, from documentation right through to unit testing. However, there has got to be a point when you let it go and see how it flies.

This is particularly true when you are faced with a real-world optimization problem, e.g. scheduling, time tabling, process optimization.  Often with this type of problem it is very difficult to obtain an optimal solution. However, I find the more time you spend on the problem the better you understand it, which normally leads to an improved model.  In turn, the improved model leads to a better solution, or an equivalent solution found in a shorter time.

This begs the question when do you give up and say it’s finished?

To be honest, I’m not sure what the answer is to that. As a developer I want to keep on going, hoping to pull the rabbit out the bag, but as an employer, I just want the thing done good enough to have a competitive edge.

The same goes for unit testing – especially at a startup. In this setting you are NOTHING until you get your product out the door, and until you do, you are hoping and praying that no one beats you to the punch. Some people say that quality shines through, but how bright it shines I’m not sure.  Take myspace as the perfect example. It has no redeeming features – it just got there before everyone else. Does anyone know a band not on myspace though?

However, Google proved that the best product can establish its market regardless of its starting position – I now find it difficult to believe that I thought Altavista was good. It’s important to remember though that for every Google there is a myspace (or the ipod, for that fact) where the first is not the best, but people have invested too much time in their choice to change (or in the case of the ipod, maybe it’s fashion outshining functionality).

So what IS the answer to when is the software ready to go? Maybe the simple answer is “whenever someone is willing to buy it”!

why would you choose .net?

I’ve been wondering for quite some time now why a new startup, on a greenfield project, or even a personal site, would choose to use .NET for web development?

Firstly, this is not a Microsoft bashing article – I’m simply trying to understand the thought behind such a choice. While researching this I noticed another recent article (titled: When Windows beat Linux: a cautionary tale) on something similar, so I will use some of the information from this article.

For those than can’t be bothered to read the article I linked to (as many people on a certain social network site decided to do before apparently casting their vote) I will summarise. The article looks at a case study by a German airline company who was restructuring the IT systems of a bankrupt airline which they had acquired.  In this process they were moving from a Linux based “scripting” solution to a Windows based .NET stack.

To aid the discussion let’s say that I’m starting a new mISV (micro Independent Software Vendor – this seems to be the buzz word for startup).  What will I be producing? I don’t know, let’s say an online bakery because I LOVE cakes so much.  Now suppose that we choose to do this using Python and Django on a Linux dedicated server.

So let’s assume that we are going to be a rip roaring success and that every business close to us will be looking to buy our cakes to reward their industrious employees, i.e. the application should scale reasonably well.

A quick look at the case study seems to imply that for every Windows based server needed, we require 2.5 times the computing power for equivalent performance in the Linux based system:

4 Windows Server IIS 6.0-based computers replacing the 10 computers that had hosted the former Linux version

A quick check on Google reveals that a Windows dedicated server will cost around £120 (~$170) more per year than a Linux server.  But I need 2.5 times as many Linux servers as I do Windows servers (assuming my application is going to be maxing out the Windows server). Therefore if a Linux server costs me £600 (~£840) a year, this means that I’m £780 better off with the Windows server as my choice.  Hold on though, because, let’s face it, the conclusions drawn about the number of servers required for each solution in the case study are pure bullshit! Right?  The case study thinks it’s fair to say that 4 brand new top of the range servers are equivalent to 4 Pentium P3s from heaven knows when. Common sense here states that I would get at least as much performance out of my Linux server as I would the Windows one. Hence I will be saving £120 a year, not gaining £780 as the case study would like you to believe. Now on to the software.

The case study states that: 

The Web front-end to the e-commerce solution was rewritten using Microsoft C# technology, introducing object-oriented programming to what had formerly been a script-based solution and enabling the solution to be updated and expanded more easily in response to business requirements…The Web server portion of the solution took three months and $120,000 to develop; had SWISS used Java, Heintel estimates, the solution would have taken 50 percent more time and money.

How the hell did Heintel arrive at that estimate?  Christ, every bank in the world would be scrambling to rewrite their enterprise Java apps at that rate.  Let’s face it, their estimate was utter nonsense – my Mum could have came up with a better estimate and she still hasn’t figured out how to use that wee-thing-that-you-move-with-your-hand-to-make-the-wee-arrow-thing-on-the-screen-move!  Moving on, I didn’t realise that you couldn’t write object-oriented programming on a Linux environment, news to me!  I mean it’s not like you could write the exact same object-oriented based solution in a language of your choice, whether it be Python, Java, Ruby or PHP (or even C# using Mono). Therefore instead of saving me money on software it’s going to cost me. Why?

First, I’m going to have to purchase SQL Server, I can’t imagine it’s cheap, say around £800. Not only that, I’m going to have to pay for upgrades that I might need in the future, not to mention more SQL Server licences for any additional db servers should I need them.  The Microsoft stack is certainly not saving me any money here.

Now on to the IDE. For the Linux based system I could use NetBeans or Eclipse, which are free. For the Windows based system I could use Visual Studio Express Edition. However, I can’t imagine the Express Editions are good for building large web applications, and I haven’t seen too many Microsoft shops using these editions –  am I wrong?  Presuming we can’t use the Express Editions, I need to pay for the full version of Visual Studio, which tots in at around £600 per developer. However, the Linux based approach is costing me NOTHING for each additional developer that I add.

Another facet of .NET development I have noticed is that you tend to have to pay for nice developer tools that are otherwise free on non-Microsoft based stacks – Reshaper being the example that springs to mind. Hence you have to factor in the cost of such 3rd party libraries.

All in all it appears that the Windows based system is going to cost me waaaaay more to get started than the Linux equivalent. Costs may not seem that high to some people, but when you have limited financies to start your own mISV, any costs, however small, are something you can do without, more so in the current economic climate. 

One thing I have so far failed to take account of is the cost of learning new technology.  If you are a veteran C# developer then taking the Linux route would mean learning to use new tools and new languages. However, any developer worth their weight in salt is keen to improve their knowledge and would quickly be able to cope.  Most smart developers see it as FUN to learn something new. 

What I would like to mention is Microsofts BizSpark.  This came to my attention after listening to the Startup Success Podcast of which I have become an avid listener.  If memory serves me correctly it drastically reduces the cost of Microsoft development tools for mISVs – sorry I can’t remember the exact price but it’s low (update: please see the comments below for some more info on this). This kind of incentive from Microsoft is a great idea, and something I may look at closely, alongside the Linux based options, in my own mISV ventures I will soon be embarking on.

To sum up: with the exception of the BizSpark incentive, if this truly delivers what it appears to, I just can’t see any reason to choose the .NET stack over a free Linux based solution. Can you?