Edd Dumbill: We're all ops people now
Ten years ago, most of us wouldn't have dreamt we'd be managing terabits of storage, tens of megabits of bandwidth, arrays of network-distributed services. The height of a programmer's worry would likely be choice of UI toolkit or finding the right way to indent code, and the height of consumer concern deciding which room to put the new computer in.
Now the problems associated with managing large networks are becoming real for everyone, right down to the consumer level. Stupendously large amounts of computing resource are available at an instant.
Your household probably has more than a terabyte of storage already. Issues such as single sign-on are going to hit home over the next year, as networked computing and entertainment devices profilerate. Features such as Apple's Time Machine will be increasingly vital — software that makes traditionally gnarly sysadmin tasks consumer-friendly. The rebranding of .Mac into "Mobile Me" is also a step in this direction.
The impact on developers
As software developers, we also have to cope with the effects of this resource-richness. For small sums of money we can get access to large computing clusters, geographically redundant hosting services. Our programs have left the desktop and found their new home on the web. System administration issues loom large upon us, security concerns lurk auspiciously in the corners of our minds.
Although the cost of infrastructure has dropped radically, other costs remain high and are going to stay that way. System administrators are not only grumpy, they demand high wages. Commercial software license fees spiral out of control: traditional per-CPU licensing models make little sense when you can quickly bring up tens of machines. The cost in power is already troubling large companies, and there's no reason to suspect the problems won't ripple down.
Help is at hand from a variety of technologies. If they don't yet make massive resource management trivial, they at least make it possible. Some of these also inhabit the weird territory of being both the source of a problem and a solution at the same time: virtualization, for example.
Distributed revision control systems
Distributed revision control is a technology whose time has finally come in popular circles, thanks in part to Linus Torvald's Git system. DRCS has several important impacts on today's developer:
- Branching and, importantly, merging become much cheaper, allowing agile and flexible iterations of development.
- Loosely connected and geographically diverse development becomes much easier. Even within a single organization it is not uncommon to find teams spanning countries, time zones. Complex multi-site VPN setups aren't necessary when a few SSH keys can do the job.
- Revision control becomes packaging on the cheap. Like it or not, the mere tagging of a source tree has now become a valid option for releasing software.
- Agile infrastructure — a ready supply of new machines makes it a lot easier and cheaper to test different scenarios, architectures, and to separate concerns. If things go wrong, throw away the image and start over. It's all about cutting the administration load.
- A packaging solution — the new macroeconomics of software distribution mean that distributing entire machine images which communicate exclusively via the network is now a feasible way to distribute your software. We must adjust to the notion of distributing appliances, not code. We may mourn the lost crafts of creating RPMs or installers, but let's face it, it's now a waste of time.
- New business models — your application can now be delivered as a black-box appliance, circumventing compatibility issues, or as a service, with virtualization part of the solution to scaling.
For developers and users alike, our world is changing. Hardware, connectivity and increasingly software is becoming cheap or free. The solidity of the old things we put value on — real things you can touch like disks — is eroding. What really matters is our data, our creations, and their communication. If they don't quite yet exist in a universal "cloud" yet, they're certainly getting frisky. As vendors provide solutions for consumers to manage their new domestic infrastructure, developers must look to network-aware toolkits and operations techniques to manage and get the best from their emergent infrastructures. Also on this topic: Join the conversation about this post
As I've mentioned
In a perfect world, when we design some aspect of our infrastructure,
we'd get it right the first time, and would never have to change our design
once it had been deployed.
Back in this world, however, we regularly have to change things as we
expand our infrastructure. Sometimes we made a mistake originally, other
times new requirements pop up. In either case we will end up doing things
differently in the future than how it was done in the past.
The danger here is that if you only create your new machines or services
differently, you've got effectively two separate and different systems to
maintain. This may not sound like much, until it happens again... and
again... and again... and then suddenly you've got 18 different ways of
setting up backups, depending on how long ago you set it up and (if you're
really unlucky) who did it and what the phase of the moon was at the time.
If you've been here before, you probably remember the pain of having some
disaster happen and needing to fix it NOW NOW NOW, only to wade into the
setup and realise that it's been done in a way that (you thought) died out
six months ago -- and so you don't really remember how it works, and yeah,
the documentation's been updated so many times since then that it doesn't
mention the old way of doing things, and here comes your boss to ask how
long it's going to be until it's all working again...
If you haven't had this experience (yet?), you'll have to trust me when I
say that it's no fun to hit an older, out-of-date system. It's especially
painful because the most common reason you change things is because the
old way sucked. So you turn up at a critical moment to fix something in
a poorly documented and sub-optimally configured system.
Fun, fun, funnity fun.
There are only two ways to avoid this problem: never change the way you do
anything, or else plan your changes so that retrofitting is part
of the plan every time you're modifying an existing service.
Assuming that never changing anything isn't an option, you need to plan to
retrofit. When you're putting together the design for your system change
(you do design your changes, right?) you need to audit what's out
there, determine what's needed to bring it all up to date, and put
together a plan to make that happen. It's like documentation and testing
-- if you don't make an explicit effort to make it happen, it'll never get
done.
That sounds like a lot of work, and it is. Luckily, if you're already
working in a well-maintained infrastructure you should only really have one
existing config to upgrade, which shouldn't be too painful. However, if
you've got a lot of machines to change there's no way around the fact that
they've all got to be changed, and that can take time.
If you accept that you don't want configuration skew, you can start to
think about how to engineer your systems and processes to make it less of
a hassle to keep everything up to date. Putting some extra thought into
how you set things up in the first place so that it's easier to update is
at the heart of this. Automating deployment is an easy way to take some
of the pain away from rolling out new configs, but there's also plenty of
smaller decisions that help with updating configs: putting everything in
revision control, making extensive use of templating and pulling out
common config fragments, and making sure that you've got good notes and
records of what has been done where.
The more you automate your deployment and maintenance, the less pain you
feel when you need to retrofit. With something like
Yes, Manu Chao was really home yesterday in Paris Bercy. And he was obviously feeling like being home.
The concert began at 21:30 and ended up at 00:30. Yes...that makes 3 full hours concert. All that for 25 euros.
The crowd support, dance, participation was *amazing*. I often go to concerts in the Bercy arena and never saw the crowd in the upper rows being stood up all concert long.
Radio Bemba played their usual tracks first. As usual, the very Manu way to mix songs, themes from all his carreer and mix them up, distord them and make new songs from old ones. This is what always made Mano Negra, then Manu Chao oncerts unique experiences. Just imagine 20,000 people singing Clandestino a capella, most of us not knowing any damn word of Spanish...
After about 2 hours of magic without any stop, the very special moments came in. Manu, Gambit, Majiv (what a guitarist when playing rumbas de Barcelona!), Julio (de Barcelona!)...and all others were just feeling like being home with a few friends. So the encores lasted...and lasted...and lasted. They just didn't want to stop (Manu probably said about 3 or 4 times "c'est fini").
Then, they did something I never ever saw in a big 20,000 people concert since my first one back in....long time ago. Manu asked "do you have 5 more minutes?". So, they stopped for 5 minutes to get the guitars re-accorded(sp?)....the crowd just...waited...and the gig re-started again with songs from "Si Sib rie m' tait cont e", the special book-album he made with friends, inspired by the sad winters he spent in Paris in his early years. Soooooo special and, believe me, that *was* special. Seeing all roadies, crew, friends just dancing backstage and partying clearly showed this was not to always happen (this will probably happen again on today's concert).
He was just feeling like home. And so were we. Not wanting to leave and shut down the light.
Finally, at 00:30, all of us were dead tired and we just hugged around with Manu and left. Just like old friends.
I don't know if that will happen everywhere




We actually got home last Sunday, but I've been too jetlagged, and then too
busy with work to really have a chance to write anything...
We got back in at around 2pm, but our bags fell victim to Heathrow's
Terminal 5, and didn't arrive until around 11pm. I think I lasted until
about 8pm, when I had to crash. Poor Sarah had to stay up until 11pm when
they finally got around to delivering our suitcases.
The week in Zurich was wonderful. The Zurich office is everything the photos
make it out to be, and then some. One weird thing: apparently there's some
Swiss regulation about how much you're allowed to cool a building in
relation to the outdoor ambient temperature, so there's no air conditioning
in the office. Instead, you can open the windows. Unfortunately, there's a
fairly busy set of train tracks right beside the office, so it can get a tad
noisy... It was a pretty warm week, I think around 30°C. I certainly
prefer being colder rather than hotter when indoors, so found the lack of
decent cooling to be a shame, given the rest of the building's features.
That said, it was pretty amazing sweltering away in Zurich, and then looking
up and seeing snow on the mountains. It was surprising how much of a
temperature difference there was.
On the last evening in Zurich, we went on a reconnoitre to try and find the
river that we could hear (and see on the map) behind our apartment. We
eventually found some street access to it, and it was another world back
there. It was fairly thickly wooded, and the sunlight was heavily filtered
through the trees, so it was cool and shady.
The river was fairly fast flowing over some rocks in parts, which is what
was making it so audible. The whole setting was absolutely beautiful. There
were a couple of paths, and the whole thing felt like something out of a
fairy tail. We think we stumbled onto a fox, but we're not sure. It's a
shame we only discovered the place on the last day, as I'd have liked to
have explored it further.
I really liked Zurich. It was nice and flat, and had an excellent tram
service.