Coding is like gardening...

Archive for the ‘business’ Category

Announcing ykyat.com

Screenshot of ykyat.com

Screenshot of ykyat.com

I’ll blog more about this next week, but just wanted to quickly let you know about our new web application, ykyat.com.

It’s a very simple service built on Twitter. It collates classic ‘you know you’re addicted to…’ jokes on a central website, and allows them to be rated so that the funniest are promoted for all to see.

It was built partly for fun, and partly as a grand experiment in rapid application design and development: we designed, built and deployed the entire app from the ground up in 8 hours 42 minutes. We learnt a lot from the process and I’ll be posting a minute by minute diary with some screenshots next week.

Web development is moving on: are you?

Great article on thinkvitamin.com today, although there was one small point I wanted to quibble:

First of all, for the most part it’s impossible to develop offline ‐ this is because we use hosted services, APIs and most likely you’ll write something that uses some data stored elsewhere on the web.

I disagree — if you’re doing things properly you should be stubbing that API in your test and using git locally, allowing you to work anywhere. Testing the integrated whole must usually be done online, but full integration tests can be always be run later when you’ve done your piece of work and you’re back on the grid.

Billing with Integrity (part 3)

More likely with fixed price projects...

More likely with fixed price projects...

(You may want to read parts one and two first).

This time we’ll look at four variables of software development which always apply to any software project. We’ll see how they interact with each other, how a fixed price project model is affected by them, and a potential end result which is often a reduction in quality and more bugs.

So what are these four variables of development? Briefly, they are:

  • Scope – the size of the project.
  • Time – the amount of time taken to get a project done
  • Cost/Resources – the amount of money the project is costing
  • Quality – the end quality of the project (i.e. how robust it is)

You can fix two or three of these variables but it isn’t possible to fix all four.

For example: suppose a feature will take four days to do properly. If you want to take two days over it, then you can either:

  • Increase cost/resources (add more developers, not generally a good idea)
  • Reduce scope (cut the requirements for the feature in half)
  • Rush the work (stay up late, or just code too fast) which then litters the code with bugs, reducing quality.

Fixed price projects try and fix all four of these: “I want this spec, by this date, costing this much. Oh, and no bugs.” So when the inevitable happens and project scope changes, what can be done? The cost is already fixed, or only changeable through a long-winded change process, and there may simply be no money to throw at the project. The deadline could be extended (increase time), but that then leaves the developer out of pocket if the cost stays the same, and the client is unlikely to be happy.

Often the only option is that a developer will revert to rushing the work, to try and get it done as quickly as possible. This leaves a project that looks just great on the outside, and may work ok when delivered to the client, but after a few months it becomes obvious that it only just hangs together. The client might request a change that appears simple on the outset, but because the original work was rushed, the work takes much longer than the developer thought and exposes underlying bugs. Automated tests are often skipped when work is rushed, which further reduces confidence in the codebase when something needs to change.

Conclusion: Don’t fix project price and scope

So, in conclusion, a long fixed price project for a fixed spec is counter-productive. As we’ve already seen, it can allow developers to take advantage of clients, it pits the client and developer against each other, and in practice it fosters bugs in software. Change is the natural state of a software project, and by definition, this model is incompatible with change.

Next time we’ll look at variable billing, by charging for small increments of time. We’ll see how this model interacts with the four variables discussed above, and some of the advantages and disadvantages it poses to both clients and developers.

Tune in next time for a discussion on variable billing (you may want to subscribe for the latest updates). If you’re in a hurry for an “answer”, you could always peek at our pricing pages if you want to know how we bill :) Thanks to Kent Beck’s excellent essay on Optional Scope Contracts (PDF) for many of the ideas in this series and to Ngọc Hà for the photo.

Billing with Integrity (part 2)

Should have written a clearer spec...

Should've written a clearer spec...

(You may want to read part one first).

We left off saying that fixed price projects had a number of disadvantages. One other problem with these types of projects is that they’re implicitly set up to pit client and supplier against each other. This wastes valuable project budget on working out what to do when the project changes.

Imagine a client and developer have come to an agreement and spent a lot of time writing the spec for a project. The contract is signed for a developer to deliver the spec for £4,000. Immediately we have two contrasting forces at work:

  • The client is wanting the maximum amount of features that the developer will give him, so he gets the best return on investment.
  • The developer is hoping to spend the minimum amount of time on the project to get the work done, so that he can cram as many projects in and make as much money as possible.

Good developers and good clients will mitigate these forces, but each party will always need to protect their interests to some extent, or they’ll go out of business.

There’s enough tension in the above relationship as it is. What happens when the client wants to add in another couple of features? The client might argue that the new features aren’t really new, but part of the original spec, so that he can try and get as much as he can for his money. The developer is likely to argue that everything that differs from his interpretation of the spec is new, and therefore should be charged for. The result is usually a fight, hopefully a compromise, but always a big waste of time and energy. Who wants to plough through a huge change process just because the original spec wasn’t clear enough? That time could be better spent actually delivering more features and providing more value to the client.

In practice, specs are never clear enough, and always require changing. Therefore at the beginning of the project you are committing to spending a fair amount of time arguing about the spec. If the change is a big one, then you’ve got a big problem: a lot of time has been spent already getting this spec “right”, and now it’ll need to be thrown away or rewritten significantly. There’s also more pressure to rush this new spec, which results in a worse spec the next time, causing more problems down the road.

The net result of all this is less efficient and more costly projects, bad feeling between clients and developers, and an overall reduction in the success of the project. Forget that ‘ongoing high quality relationship’ both sides wanted at the beginning: for serious failures often the only priority is to escape without a lawsuit.

It’s not all doom and gloom: some fixed-price projects do go as planned, but setting up projects in this way makes it all that much harder to see them through. I’m also not against specs: clearly it’s important for the client to communicate what they want! I’ll discuss how we use specs (although we call them something different) in a later post.

So take heart: there are more modern project management methodologies which ensure that there’s that much more chance that projects succeed and that everyone gets along. Next time we’ll look at some fundamental laws of software development in the search for a better way.

Tune in next time for the four variables of software development (you may want to subscribe for the latest updates). If you’re in a hurry for an “answer”, you could always peek at our pricing pages if you want to know how we bill :)

Billing with Integrity (part 1)

Billing is a thorny issue for most developers. At Eden we’ve billed via various means over the last few years, and have recently settled on a new method which is worth me taking some time to explain. If you’re in software development, it might help you to rethink the way you’re charging your time to clients – our new billing method has made our lives much easier, and improved communication with our clients.

But first, a bit of background on various ways developers bill clients for their work.

Fixed price – Billing per project

Are you sure you want to do this? There is no undo.

Are you sure you want to do this? There is no undo.

As a developer, I have an aversion to billing a fixed price for a whole project. In my opinion it pits the client and the supplier against each other, especially when parts of the project change (as they inevitably do).

The fixed price concept is borrowed from traditional engineering, when costs and requirements had to be worked out fully in advance as things were hard to change. Imagine you are a building contractor, you’ve just poured the concrete for the foundations, and your client pops over to ask for the building to be moved slightly to the left?! Because things are difficult to change after the work has been done, it costs a lot to do so. Therefore it makes sense to work out the costs fully in advance, and charge a fixed amount. If things need to be changed after the fact, there’s a rigorous (and expensive) process that is worked through, usually costing the client a bunch of money.

Some software developers behave as if the same was true of writing code. They put together a brief, build a website, possibly as a cut-price deal. Then they charge a fortune to change the homepage text, or add an extra button. We often get calls from clients who are fed up with being charged for four hours of time to change the wording round in one sentence. Ultimately, unlike in the construction industry, software (especially web-based software) isn’t and shouldn’t be hard to change. Why do we behave like it is?

Sure, expertise is valuable, and one argument for this sort of charging had made the round in various forms and is often used as a defense for this practice. However, I’m more concerned with communication: let the client know what the ongoing bills are likely to be before you start. Otherwise they have no way of measuring how much your expertise is actually going to cost, and therefore no idea about the true cost of the project. Because all projects change, a so called ‘fixed price’ gives clients less information that they would normally have.

Tune in next time for more discussion on why fixing prices for whole projects is also bad for project quality (subscribe for the latest updates). If you’re in a hurry for an “answer”, you could always peek at our pricing pages if you want to know how we bill :)

“History will be kind to me…”

“…for I intend to write it.” — Sir Winston Churchill

I love this quote.

To me it sums up the idealism that caused me to go into this business in the first place: If you don’t like your story, or the world around you, then change it!

I saw a lot of average web application developers out there, and I decided the whole ‘web business’ thing could be done much better. So I set out to create a great company full of great people producing great work, making the experience of web application development that much better for others.

It’s perhaps not the best time in the world to start an average business, but, let’s face it, who would want to start an average business? There’s never a great time to start a bad business, but there’s never a bad time to start a great business.

If you’ve got a great idea for a business, or a charity, or for making a positive difference, but you’re sitting on the fence with it, what’s holding you back? Rather than us vaguely wondering if history might be kind to us (or even notice us at all!), let’s instead take up the challenge and write some history of our own.

Starting at Eden

Not many people can honestly say that they are actually doing their dream job. Many people have dreams and aspirations, and somewhere along the line they end up in a completely different destination. Life just has that way of sidetracking you, without you even noticing. That being said, on September 21st 2008, I walked into my dream job. Everything would be plain sailing from here on, the hard work had already be done getting here in the first place, right? Wrong.

From the first hour I realised that that these guys (and girl!) were good… really good. Not just that, they were talking in a completely different language to that which I was accustomed. Agile Development? Behaviour Driven Design? RSpec? Outside-in? Fixing broken windows… isn’t this a computer company? To say I was confused and a little scared at this point, would be an understatement. I still had a very big mountain to climb, in fact, my journey had only just started.

However over the last few months that I have been here, I have really started to grasp a lot of these concepts. Not perfect, or master them (that takes time and practice) but the value of them and how applicable they are to modern software design has blown me away. The concept of Agile Development and BDD isn’t completely strange and abstract, in fact, it’s quite simple:

  1. Write a story to explain the feature you are adding. (This can be done by the developer or customer)
  2. Run the story (it involves Cucumbers, i’ll explain some other time)
  3. The story fails (no code yet)
  4. Write a spec for the code that you will finally implement (This is the second layer of testing)
  5. Write code

The first 4 steps can be repeated a few times before any real code is actually written. When you do come to write code though, you know it works. How? The specs tell you so. It’s magic. Compare this to how I was taught software development in University:

  1. Write a design document (This explains the entire system and its individual components)
  2. Create UML diagrams and User Specifications for every Class in the system and how they interact
  3. Write code

Fewer steps, it must be quicker. What I didn’t mention was that the first two steps can take months alone. Often by the time that you actually come to write some code, a feature of the applications design has now changed, this means that has to be re-written and the diagrams all updated. Further delays. This monolithic approach is largely inefficient and frustrating!

So Agile Development works out better for the customer and better for us programmers (we actually get to do what we love doing!). Coupling that with strict testing at every step ensures fewer bugs and greater flexibility. You can approach each new feature/problem with confidence knowing that if any change you make breaks another part of the system, it will be caught by the tests failing. This is why the staff at Eden actually love doing what they do. They get to write awesome software, and have fun doing so. Compare this with the Games industry which is full of programmers who are overworked and burnt out. They were in what they thought was their dream job, but really wasn’t. I still have a mountain to climb to reach my new goals, but I’m having a lot of fun doing so!

Eden is a great company, with extremely talented staff. We have lots of really interesting projects spanning many different industries. I think this mountain will be quite fun to climb :)

Why design completeness should track the project schedule

The level of the completeness of the design for a website should accurately track the completeness of the project. It’s been said before, but it’s worth saying again…

In the past I’ve been guilty of two equal yet opposite mistakes on website projects regarding design implementation. There’s a temptation to leave the implementation of the design right until the end of the project (”It’ll only take a day or two, after all”). There’s also a strong urge to get the design done right at the beginning of the project, to really show the client what the finished article will look like.

Both of these approaches turned out to be mistakes.

When we’ve left the design until the end of the project, the client ends up directionless. Unless they’ve got a programming background, or heck of lot of vision (and most don’t), they just won’t put your lovely design concepts together with your naked ‘Times New Roman’ HTML wireframes. Sure, the site works, and works well, but it just won’t feel right. The client won’t be able to get past how it looks and will ignore all your fervent feature demos because they’ll be thinking about that ugly font.

With one project on which we did this, the client ended up changing their mind too much about what they wanted; had they seen the design progressively improving look and feel they may well have been able to catch the vision for the site quicker. With less understanding clients, you run the danger that all your hard work behind the scenes will be dismissed just because it looks awful and they wonder what you’ve been doing with all that time and money.

So why not get those concepts right onto screen straight away in their full glory? That way they’ll know exactly what they’re getting, right?

Big mistake. When we’ve done this in the past, we’ve noted that clients often equate the progress of the design with the general progress of the site. With one project, we rolled up at the end of the first iteration with a beautiful website that showed the finished design in all its glory. The client was very pleased. However, the very next iteration, after we’d spent just as much time on functionality and ‘behind the scenes stuff’, they were less pleased. Despite us telling them how much we’d accomplished, they just couldn’t quite see it. We then spent quite a while on the back foot trying to convince them stuff was happening, even though the site looked much the same as it did at the start!

So where’s the balance? I’m not sure there’s a perfect middle way; it depends on the client you’re working with and the type of project you’re working on. These days however we progress with the look and feel in stages; it tends to ensure both client and consultancy are on the same page and everyone can measure progress in their own way.