Bamboo

September 30, 2008

Filed under: Software Development, rubyonrails, Bamboo — Doug Clinton @ 4:18 pm

Development continues apace on our new application, Bamboo. What is Bamboo? It’s a web app which aims to provide support for lightweight business processes for agile organisations. Pretty much all organisations, no matter how small, evenutally reach a point where they need basic processes to manage things. With Bamboo, we hope that they can implement these processes with a minimum of effort and time so that they can get on and do the things they like to do.

We hope to launch in 6 to 8 weeks with a basic site offerring one core feature, Checklists. Checklists let you capture the steps of a process, say creating a new build of your software or handling all the tasks for a new employee starting, and then filling out a new copy of the Checklist when you need to do that process. Once you’re done you can file it away for future reference. How do Checklists differ from todo lists? Firstly, a Checklist is for when you have to do the same procedure many times. Secondly, the result of completing the checklist is always there for you to go back and look at in case you need to audit the procedure.

As well as developing the app, we’re also using CrowdSpring to help us to prepare the design. If you want to see the current contenders for the logo then have a look at our project.


Funny goings on with Eclipse on Leopard

March 28, 2008

Filed under: Java, Software Development — Doug Clinton @ 10:48 am

I’ve just copied my system drive over to a new hard disk and re-booted from the new image and suddenly Eclipse will no longer start up. With some experimenting, I’ve found that using -Xmx768M was causing the problem. If I reduce this to -Xmx512M then it runs just fine.

The thing is, that the only change to the system was booting from a new drive. There’s plenty of memory free but it seems that the JVM is no longer able to allocate more than 512M to the heap. Go figure.

Java on the iPhone

March 17, 2008

Filed under: Java, Gadgets, Software Development, Apple, Mac, Opinion — Doug Clinton @ 10:11 am

Just been listening to the March 14th newscast from the JavaPosse where they spend a lot of, very interesting, time talking about the new SDK on the iPhone and the apparent restrictions in the terms and conditions which prevent people from distributing apps which run on a VM. This would mean that developers could not distribute Java applications which required the VM to be present to run. They discuss a lot of interesting points, and speculate a lot on the motivations, sinister or otherwise, of Apple in deciding to limit developers. Obviously, not being Apple, they’re not able to draw a lot of definite conclusions.

I’d like to offer a different perspective on this issue. As developers, we see the iPhone as a development platform with huge potential. Since the moment it was released, I’ve been wanting to have other apps running on it. It makes a great connected device and it’s easy to compare it with other, open, platforms such as the Nokia N800. However, I believe Apple did not create the iPhone, and are not looking at it, as a device for developers. This is a consumer device, first and foremost. Apple’s priority at all times is that someone who has bough an iPhone, as a consumer, should get the best possible experience all of the time and if that means that developers are left frustrated then so be it.

I think that the directive against VM-based apps it based on this principle. Apple do not want people to come browsing the software on the iPhone store, seeing something they like and then being told they need to download one or more other components in order to get it to run. Or worse, downloading (and perhaps paying for) an app only to find it won’t run because they didn’t know that they needed to download (and possibly pay for) another component before it would run. Supporting this in the iPhone store would mean dealing with dependencies between components and then you get into all the problems of version handling - what happens if I have the Java 5 runtime installed but another app needs Java 6?

Looking at my experience of using a Nokia N800, it was great that it is a very open device and that there are lots of third-party apps for it, but my experience of installing those apps was often frustrating as I needed to locate libraries that those apps depended on and download them separately. Even as a programmer I found it very annoying and tedious. I can well see that Apple to not want that to be the experience of the average user who expects things to just work.

In fact, I would not be surprised if Apple did not take “it just works” as their yardstick for deciding how and when to open up aspects of the iPhone. As the JavaPosse discussed, the delay in releasing the SDK was probably not down to not wanting people to develop for the iPhone, but rather taking the time to ensure that the experience the developers have is a great one which probably meant considerable cleanup of the libraries and tools between the launch of the phone and the release of the SDK. For iPhone users they are going to be even more stringent in applying that principle.

Of course, another aspect of that is that they would want all apps on the iPhone to be as consistent as possible in their look and behaviour. The first part of that is the visual component library which means getting people to use the native SDK as much as possible. The second part is the UI guidelines, but Apple developers are usually pretty good at sticking to those. I have used Java apps on Symbian 60 phones and generally they look and behave very differently from the native S60 apps which can cause a lot of confusion and just be downright annoying sometimes. Again, a situation Apple would love to avoid on the iPhone.

In conclusion, I think that if you take a step back from your developer viewpoint and look at the iPhone SDK and software distribution system from the point of view of a consumer then Apple’s behaviour seems a lot more understandable and a lot less sinister.

Joel re-invents the XP planning game, calls it Evidence-Based Scheduling

October 27, 2007

Filed under: Software Development — Doug Clinton @ 10:50 am

I’m a FogBugz user. I think it’s a great bug-tracking system. So much so that I paid money for it rather than opting for BugZilla. It looks like it’s about to get even better with the new version 6 release.

One of the key new features is Evidence-Based Scheduling. Joel has posted a long article describing it here. What really cracks me up, though, is that the article is really just describing the planning and tracking method used in Extreme Programming (that XP, not the other XP) and other Agile methods.. The foundation of estimation in XP is basically “estimate that you will do as many units of work next week as you did this week”, and by getting the developers to estimate the tasks and then track how much time they took to actually deliver them, you get a very good idea if you are ahead or behind the estimates.

Even this description of what to do if the schedule says you can’t deliver everything by the desired date:

4) A schedule is a box of wood blocks. If you have a bunch of wood blocks, and you can’t fit them into a box, you have two choices: get a bigger box, or remove some blocks. If you wanted to ship in six months, but you have twelve months on the schedule, you are either going to have to delay shipping, or find some features to delete. You just can’t shrink the blocks, and if you pretend you can, then you are merely depriving yourself of a useful opportunity to actually see into the future by lying to yourself about what you see there.

is pretty much exactly the same as what XP describes, though XPers do it by laying index cards out on a table, rather than putting blocks in a box. What is most striking about the article is the way it talks about putting so much of the responsibility and control into the hands of the developers, as opposed the traditional method of “project planning by dictum” controlled by the management or the client which is what leads most projects to fail. This idea of sharing the responsibility and, more importantly, the authority, is a cornerstone of XP and Agile. Trusting the developers to make the best estimates (because, after all, they’re the ones who actually do the work) and not letting managers and the client override them are key. In XP parlance, “time, resource, scope - the client can have control over any two of those, as long as the team is given control of the third one”.

Joel claims not to be a fan of Agile techniques, yet time after time, he has published articles describing the way he develops software which are simply Agile methods re-cast into his own metaphors. For example, in his article on the Project Aardvark Spec he makes the claim “I can’t tell you how strongly I believe in Big Design Up Front, which the proponents of Extreme Programming consider anathema”. However, the spec document that he links to at the end of the article would be completely unrecognisable to anyone who has worked with true Big Up Front Design in the past, and contains nothing, apart from the coding conventions which he admits doesn’t belong there in the same article, which you wouldn’t find written on an index card in an Extreme Programming shop.

Come on Joel, it’s time for you to finally admit that you are as Agile as they come, even if you’ve expressed all the ideas and techniques in your own way (which is a totally acceptable thing to do.) If you don’t think so then please read the Agile Manifesto and tell us which bits you disagree with.

Are lego blocks really a good aspiration?

February 3, 2007

Filed under: Programming, Software Development — Doug Clinton @ 4:54 pm

I’ve been reading “Dreaming in Code” recently. This is written by a journalist, Scott Rosenberg, who embedded himself in an open source start-up company a few years ago to follow the progress of the development project, in much the same spirit as “Soul of a New Machine”.

In an early chapter, Scott explores the traditional ideas about software development evolving towards a ‘lego’ model where software is created by snapping together pre-formed units to form an application, and then ponders the reasons why this has not happened. This has got me to thinking. Do we really want to aspire to a ‘lego’ model for software? Are we really suggesting that software should be compared to a child’s toy? After all, look at any lego structure and tell me you would want to use a software equivalent for anything. In fact, look at the world around you? Tell me, is any of your furniture made of lego? Your household appliances? Your house? Lego structures may look impressive, but only in a sort of dancing-dog kind of way. The key features of any lego house I’ve ever seen, for instance, are that all the top surfaces are covered in small, round, protuberances and everything is squared-off and all the corners are sharp. Oh yes, and it’s a toy. Even if you built a full-size house out of lego, I doubt anyone would want to live in it, except perhaps as a post-modernist art exhibit.

The usual comparison that is made at this point is with electronics. After all, aren’t there lots of standard electronic components that you can plug together to make, say, an amplifier? It doesn’t matter which electronics company you get them from, you just take standard transistors, op-amps, resistors, capacitors, stick them on a circuit board according to established patterns and, hey presto, an amplifier. What are you going to do with it then? Well, at that point you’d write ‘Matsushita’ on the outside of the case and put it on the shelf of Dixons for £49.95 to sell to people who don’t give a damn about audio quality. The fact is that anyone who wants to make an amplifier that doesn’t sound like a couple of tin cans tied together with string takes care to select high-quality components from specific manufacturers; builds their own power circuits; develops creative new patterns for circuitry that make the best of those components and minimises interference between them. They test them and then make changes and test them again. Then you can put Quad or Linn on the outside and sell them to people who care about sound. BTW, there is a “standard component” way of developing software. It’s called Visual Basic. You can very quickly knock up a useful, database-backed GUI in VB with all the usual bits and pieces such as text fields, combo boxes, radio buttons, etc. as well as much more complex things such as spreadsheet components in a very short time. But when you see one of these apps you’ll notice that the main defining characteristics are the software equivalent of there being small round protuberances on all the top surfaces, everything is squared-off and the corners are sharp. In a lot of cases, these apps are no more than toys (though, contrary to real lego, it is possible to build non-toys as well.)

Take another example: the car industry. This is a very mature engineering industry, but do they have a lego model? Look outside at all the different cars you see. Even the cheap ones. Can you take a door off a Nissan and stick it on a Ford? Even within the same brand, the main visible components are not interchangeable, they’ve been tailored to the design. There is an interesting parallel between car manufacturers and software development, however. That is the concept of the ‘Platform’. In the past couple of decades car manufacturers have realised that developing a new car from the ground up is just too expensive. Now, several different manufacturers will get together and design a chassis together and use that as the basis for a whole range of different cars of different makes. A lot of variation can be built on top of a good platform for a fraction of the cost of ground-up. But that is exactly what the software industry has been doing over much the same time period. In the early days if you wanted to make a computer you build the hardware and put your own bespoke software on top. This was the approach taken for mainframes and mini-computers and the early micro-computers. But then in the 80’s people customers demanding cross-compatibility and since then the industry has standardised on a few, common platforms. There are the Unix-based platforms (including Linux and OS-X), the Windows platform and a few mobile phone platforms. In addition, the hardware platforms have become more standardised, too, with the IBM PC architecture being the most common. IBM soon lost control of that and advances were driven by a wide consensus between manufacturers. No-one builds a new computer from the ground-up anymore. Even Apple have moved to much more standard Intel-based components. They just take more care in putting them together than most companies. The variety of systems you can build on these few platforms is immense.

But it is interesting to note that the computer industry reached this point only a few decades after it’s inception. The motor industry took close to a century to get there. Perhaps we’re not so far behind in our thinking and practices as some people would have us believe.


“Dreaming in Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software” (Scott Rosenberg)

PairProgrammingMisconceptions

November 2, 2006

Filed under: Software Development, Agile — Doug Clinton @ 1:51 pm

Martin Fowler gives a well-considered summary of pair programming and dispels some of the misconceptions which are sometimes propagated.

Technorati Tags: ,

The roots of agile

October 11, 2006

Filed under: Programming, Software Development, Agile — Doug Clinton @ 12:19 pm

Steve Yegge has posted a followup to his earlier rant about Agile. Now it seems that those of us who take agile approaches to development are superstitious and unscientific. We’ve swallowed the snake oil and don’t realize that we’ve been blinded by religion. Only Steve sees things clearly. That’s okay, he says, we can do what we want as long as we don’t try to corrupt others with our ideas.

Somehow, the possibility that the set of tools and techniques the agile community have created may actually have been developed out of observation, analysis and understanding of a very real crisis that exists in software development never seems to cross his mind. I’ll go into that in a minute, but first I want to digress into a commentary on one of the sources he cites in support of his rant.

Steve references an ACM article by Jef Raskin that talks about technical superstition. There are two key points I’d like to make about this article. Let’s start with Jef’s anecdote about the time he set up two hi-fi systems and told people that a big switch would change the sound from the the cheap amp to the expensive ones. Unsurprisingly, a lot of the people he tested it on said the expensive amp sounded better. The punch-line is that the switch actually didn’t do anything at all so people’s perception of the difference must have been based on their expectations. Jef puts this forward as part of a discussion of debunking hi-fi myths so the implication is that clearly there is no difference between cheap amps and expensive amps. However, the experiment does not demonstrate this in any way. All it demonstrates is that there is a thing called a placebo effect where people’s expectation colours their perception. There is nothing new about this. It’s why science uses double-blind tests to test things. The experiment says nothing at all about the difference in quality of amplifiers, or about any other experiment which one might do to test people’s perception of the quality of amplifiers, any more than would a setup where the switch actually did work.

The second point I want to bring up from this article is Jef’s discussion about CD players and the “bogus” claims by makers of such things as weights to stop the “wow and flutter” of the CD from affecting the sound. Jef asserts that because the data on the CD is digital and because bits are just 1 and 0 then the data coming off the CD must be perfect and any addition to the mechanism driving the CD could not possibly affect the sound quality. I, too, used to counter such claims with this argument until one day someone pointed out to me that, in fact, the data coming of an average CD in an average CD drive actually has an astonishingly high bit error-rate. One of the problems with a CD is that because it is reading in real-time there is no opportunity to go back and re-read the data. CD audio data has quite strong error detection built in but limited error correction. The upshot is that when the player detects that the data coming off the disc has errors, it attempts to compensate for that by interpolating the signal. In other words, it makes it up. Although modern CD drives are better at dealing with these situations they still have a lot of errors. That is why iTunes, or any other MP3 CD ripper, has an option to re-read on errors when ripping so that the resulting MP3 file doesn’t contain skips or noise. Try switching it off sometime and ripping an even mildly scratched CD and see how it sounds.

Once you factor in this detail, i.e. that the data coming off the CD may be 1’s and 0’s but it isn’t necessarily the same 1’s and 0’s that were written to it, the wholesale debunking of such things as the rim-wieghts on the basis that you can’t improve on perfect, goes away. Note, that I am not making any claims as to whether any specific devices or techniques might have a material affect on the sound, merely pointing out that the primary “proof” against them having any effect is not valid. It also provides for a convenient and easy experiment to test the claims. Simply create a setup which allows you to record the bit error-rate from a CD and see if there is any change when you apply the ’snake oil’.

Science has always operated on this basis. Theories always contain axioms, which are really just assumptions that are considered so obvious that no-one challenges them. Occasionally, someone comes along and successfully challenges an axiom and science undergoes a revolution. Einstein did it to Newton. Newton’s laws worked perfectly well for hundreds of years but they contained the axiom (assumption) that there was an absolute background geometry to space (and time) that didn’t change. All the experiments we were capable of doing found that to be true. However, Einstein pointed out that at one extreme (the very large, very heavy and very fast), this assumption broke down and we got the General Theory of Relativity.

So what has all this got to do with agile software development? Well, very little really. I just wanted to get that off my chest and to demonstrate how people’s smug assurance that something is obviously and unquestionably scientifically false can be punctured by adding a previously unrecognized, but highly salient fact to the equation.

The reason it has nothing to do with software development is that software development is not science. To some it is engineering, to some, a craft, for others an art and often considered a mixture of all of those and more. When developing software, or, indeed, software methods, we do not create theories, subject them to rigourous analysis and then devise experiments to confirm or deny them (although test-driven development, a key feature of many agile methods, is as close as most programmers have ever got to it). Our development processes are tested in the marketplace in the real world and can succeed or fail for so many different reasons that no current scientific method could possibly hope to make sense of it. Of course we can try and measure things like line counts, defect rates, etc. but as has been pointed out many times, programmers are smart people and the act of measurement usually results in them re-optimising their development activities around the metric being measured. Additionally, development projects are chaotic so there is no practical way to set up controlled, repeatable experiments to rigourously test one method over another.

There is, however, one glaring metric which stands out and points to a very real crisis in software development. Here in the UK, the figure typically quoted for government software development projects is that 65% of them end in failure. You can argue over the precise figure. Perhaps it’s 55%, 45% or maybe 75%. The fact is that a lot of very large, very expensive projects conclude without delivering what they originally set out to do, spending far more than budgeted and often being cancelled completely. Clearly something is wrong with the way these projects are being carried out. Private sector project failure rates are lower, but still unacceptably high, usually being quoted as 45%.

This is the background against which agile methods have been developed. Not as an alternative way for small startups to operate, or companies like Google, but as a reaction to the astoundingly bad success rates for real projects. The various methods have evolved thought taking a good, hard look at the conventional wisdom (primarily waterfall methods) and the practical problems associated with those methods and making changes to address those problems. Probably the single most important understanding is how most software development processes try to nail down requirements at the start and prevent change happening in the later stages of the project where the approach to development made it expensive. For me, the most important thing that Kent Beck, et al, did was to point out that it is possible to flatten the cost-change curve by taking a different approach. Here was an axiom of software development (it is more expensive to make changes the later you are in a project) which didn’t have to be true, and XP put forward a set of interrelated practices that said “here’s one way of making that true”.

For Steve, perhaps that isn’t such a big issue. He probably already works in a way that allows for change in later stages of a project and, anyway, what does ‘later stage’ mean when there’s no delivery schedule? When you have deep pockets, the cost-change curve doesn’t apply. Here in the real world, there are external forces that impose deadlines. When you’re building a processor to parse tax return documents being submitted over the internet, then it has to be ready for the filing deadline. I can’t tell my client “it’ll ship when it’s ready”. If I miss that deadline, we lose the contract and ministers have to stand up in parliament and explain what went wrong.

On the other hand, perhaps the same forces do apply, but just on a time-scale which means Google have yet to experience the pain of their approach (though Sergey has hinted that this may already be the happening). As deep as Google’s pockets are, they are not infinite and they can only operate as a charitable institute for programmers for so long on the back of their advertising revenue. Again, Steve should reflect that the pay he takes home each month is not related to his programming activities, but simply the result of the founders having a good idea and attracting enough eyeballs to make advertising revenues not just a viable revenue stream, but a veritable torrent of income. I’m reminded of another company that made one good deal and has been living off it ever since.

The rest of us have to test our ideas in the most scientific way that software development has yet devised - the commercial marketplace. It’s a poor substitute for a particle accelerator, but does its best to keep us real.

Is there a lot of hype and bullshit surrounding Agile? Of course. The same is true of every idea that has ever come along in history. I’ve been programming long enough to remember, for example, the Open System wars, or the advent of object oriented programming. Those, and other revolutions driven by great ideas, attracted their own share of companies who traded on buzzwords only, but that didn’t invalidate the real potential of the ideas. My biggest objection to Steve’s posts is that he thinks we should not try to communicate our ideas and our experiences with agile. For someone working in an industry and a company that have done more than any other in human history to promote the communication and accessibility of ideas, I find this very perverse.

There are always unscrupulous people and organizations that will try and dupe unsuspecting people by perverting good ideas into snake oil, but don’t let that blind you to things that might actually make a difference to the crisis facing real-world software development.

Technorati Tags: ,

Steve Yegge’s answer to Agile

October 10, 2006

Filed under: Programming, Software Development, Agile — Doug Clinton @ 12:23 pm

Steve Yegge doesn’t like Agile. All that hype, marketing, consultancy. Except that recently he decided he likes a bit of it; ‘agile’ with a small ‘a’.

Agile proponents think estimating is hard so they try and make the estimates very short and check their assumptions frequently rather than try and estimate out weeks or months (or even years) into the future. Steve thinks estimating is hard so he thinks you shouldn’t do it at all. Apart from that, everything he talks about is actually very close to the essence of agile. He wants project managers who keep things running smoothly, eliminating obstacles, rather than managers who tell people what to do next. He wants people to be co-located so that they can communicate when they need to. The list goes on but, for the most part, what he describes actually is what agile is about. Of course Agile (big ‘A’) is also a fad which is used to sell consultancy, books and proprietary processes. That’s because really understanding the essence of agile is hard for a lot of people and they are much more comfortable buying things which make them feel like they’re doing the latest thing when in fact they’re just repackaging the same ideas about software development that have been around for decades.

What I take exception to in Steve’s post is when he describes Google’s approach to software development and puts it forward as if it is some kind of viable model for other companies to adopt. Things like never telling developers what to work on, allowing developers to switch teams whenever they like, encouraging them to spend 20% of their office time on projects unrelated to their main project. Sounds great, but let’s take a reality check here. Google is a company that:

  • Earns 99% of it’s revenue and profit from advertising, a source that is totally unrelated to any of the software development activities that it undertakes and is based entirely on the work that its founders did on making a better search engine than previously existed
  • Has several billion dollars in the bank from the most successful IPO ever, not just echoing the dot-com boom but shouting it out through loudspeakers.

In other words, google can run their software development in the way that Steve describes simply because they do not need to make any money from those activities to survive (at least in the medium term). It is interesting to see this week Sergey Brin announcing that he is asking google developers to stop making new products and actually concentrate on finishing the ones that are already there and get them to interoperate with each other. Perhaps allowing developers to jump to new projects when they want, never setting deadlines or release dates, and encouraging them to work on things other than their main project is not such a great boon to software development after all.

The one key thing about agile software development that Steve seems to miss is that it is, in my opinion, the most successful approach to date of actually getting working software out the door. Companies other than Google rely on that because they actually have to sell their products to stay in business, not keep clever ideas in beta for years and years. Most of us don’t have the luxury of the deep pockets which allow Google to operate the way they do.

Don’t get me wrong. I’m glad that Google exists. I’m glad that there exists an environment in which very smart software developers can explore ideas. I think Google mail changed the world by showing that rich browser apps were a viable way of serving millions of users, for example. I just don’t think that anyone at Google is in a position to be lecturing the ‘real world’ on how software development should be done.

Technorati Tags: ,

Powered by WordPress