Your seat in the clouds awaits you

Ce billet de blog est également disponible en français ici.

Back in November 2011 easyJet announced that starting in the spring of 2012 we would begin a trial of allocated seating and on April 12th we went live on five routes from London Luton and Glasgow. Since then we have gradually extended this trial and we are now offering allocated seating on almost all routes on our network and by the end of November we will be at 100% operational delivery. This is a huge change for easyJet. Free seating, referred to by many of our passengers as “the scrum”, was part of our DNA. It was how we had always operated. It had become part of the definition of easyJet. As our CEO Carolyn McCall said in the article above, the trial could only be deemed successful if it met all three of the following criteria:

1. It had to increase customer satisfaction. We work hard to have happy customers. It’s another thing that’s part of our DNA. Allocated seating had to really make a difference to the passenger experience. Many people said that they wanted it but, once we gave it to them, would it really make the difference they thought?

2. It had to work operationally. easyJet operates one of the quickest turn-around times in the industry. If boarding passengers into allocated seats was seen to have a negative effect on our On Time Performance (OTP) it would not have been considered viable.

3. It had to work commercially. Allocated seating had to prove itself a commercial success as a revenue generating product.

Trial by fire

This highlights the fact that such a move was a calculated risk. We were not sure it would work but it required significant change and investment to find out. One of the major changes was to our reservation system. Our home-grown reservation system did not support allocated seating. The primary advantage of maintaining a bespoke system is that it can be tailored to your exact business needs. No extraneous functionality cluttering up the works. It does, on the other hand, support bookings from around 58 million passengers a year and take over £4 billion in revenue.

Changing the beating heart of our enterprise, our various sales channels like easyJet.com and our operational systems to support allocated seating was no small undertaking, quite apart from the changes to our operational processes. Making those changes to support a trial, an experiment? That called for a quite special approach.

Our first decision was that we definitely did not want to have to conduct open-heart surgery on our reservation system to add this functionality. The I/O load from selling 58 million non-specific seats a year is already a veritable fire-hose. Scaling and refactoring to support the tracking and locking of over 58 million specific seats on a system that can book up to 1500 seats a minute would be a huge project.

“Seat-allocation-as-a-service”

Would it be possible, we wondered, to buy “seat-allocation-as-a-service” (SaaaS?) from a third party? Get someone else to do the heavy lifting of tracking the availability of every single seat we have on sale while we just stored the output, a few bytes that represented the selections made for the seats we have actually sold?

Apparently not. However the idea of a separate “seat-allocation-as-a-service” solution attached via a very light-weight integration was too attractive to let go so we decided to build our own.

What this means, in summary, is that the tens of millions of seats we have available at any given time are tracked via partitioned SQL Azure databases and cached in the Azure AppFabric Cache. All the logic, business rules and data relating to …

  • selecting seats
  • handling contention for seats
  • aircraft types
  • seating layouts and configurations
  • price bands
  • which passengers can sit where
  • seating access for passengers with restricted mobility
  • algorithms for automatically allocating seats to passengers who chose not to make a selection
  • and the million-and-one other things that have to be taken into consideration when seating an aircraft

…all this is done in the cloud. Even the interactive UI that displays the graphical map of the aircraft is served from Azure and injected into the booking pages on easyJet.com.

seating

The ingenious work to achieve this using JSONP, Ajax and Knockout.js (amongst other things) is a tribute to the fantastic development team at easyJet and may be the subject of a subsequent blog post.

The overall approach however has allowed us to implement an incredibly significant change to the way we operate and sell our flights and deliver it at massive scale without needing to implement much more than small refactorings in our core operational and retail systems. The low cost and massive scale of Azure has made the whole notion of experimenting with something so fundamental an achievable reality. This calculated risk has become a bet we can much more easily afford to make.

Most importantly it has massively reduced the cost of failure. We had to conduct a thorough trial. We couldn’t be sure that it would work. Whether it worked or not was primarily a business decision rather than a technical one.

Now that it has been successful we have delivered a solution that works technically, works operationally, works commercially, improves customer experience and transformed our enterprise. However, if it had not worked and we had needed to turn it all off and walk away, we could have done so without having incurred huge risk, technical debt or cost.

Tablet History

So you think you’re a thought worker ?

One of my favourite quotes is from Fred Brooks, author of The Mythical Man Month :

Well over half of the time you spend working on a project (on the order of 70 per cent) is spent thinking, and no tool, no matter how advanced, can think for you. Consequently, even if a tool did everything except the thinking for you – if it wrote 100 per cent of the code, wrote 100 per cent of the documentation, did 100 per cent of the testing, burned the CD-ROMs, put them in boxes, and mailed them to your customers – the best you could hope for would be a 30 per cent improvement in productivity. In order to do better than that, you have to change the way you think.

This quote is about 13 years old now. You can tell it’s old because of the CD-ROM reference. Seriously, when was the last time…? But that’s about the only thing that dates it. Other than that, it’s as true today as it was then and I suspect it applies to many areas or disciplines besides software development. It’s just particularly pertinent to software development because it’s about productivity, one of the grails of our craft.

There is no shortage of software tools today. A new one seems to appear every week. Nor is there a shortage of column inches extolling the virtues or instructing in the use of this or that tool. By comparison there seems very little guidance on the use of the one tool that (one hopes) every developer uses, all day, every day, regardless of which language or platform religion they adhere to.

There’s a tacit assumption that we must be good at thinking. That because we *are* our minds we must know all there is to know about them and be good at using them. How could we not be ?

The closing comment in Fred Brooks’ quote above has often made me wonder how you go about changing the way you think ? How many different ways of thinking are there ? We are often told to “think laterally” or “think outside the box” but what does that actually mean, technically ? I mean, how can I tell if my thoughts are lateral or whether they are inside or outside the box? And, if they’re not the right thoughts, what mental buttons do I push, what mental map or set of instructions do I follow to get them there ? Is there some special Nam-Shub of Enki I can incant to get me thinking differently ?

For me, thinking about anything in depth, means constructing a mental model. I need something that is relatively simple and coarse-grained but that covers thinking from the most whimsical fancies to life-and-death decisions. I’m also a very visual thinker so it had better look pretty too.

thinking

There it is. Can you see where I am now ? That’s right, I’m up there in the cyan corner being all Conceptual. I’ve been trying to apply this model to the way I think in the sense of understanding at any given moment where I am. If the situation requires some “different thinking” then at least I know my current position and have some bearings of where else I might want to go.

I’ve also tried to work out what my relative strengths, weaknesses and preferences are and look for patterns that might indicate imbalance or the embedded routines that might indicate mental ruts (see Cognitive Bias). There I go again, in the cyan corner.

The red, critical segment is the real-time, here and now “me”, observing the stream of reality and working in a continuous loop of evaluation in the eternal search for the answer to the question, “What should I do next?” Always evaluating, balancing and judging. Working anti-clockwise we find the forward-looking strategist and prioritiser and then the backward and inward looking collator and categoriser of information. He has a million jigsaws on the go and as many mental models that need constantly refining to take account of new information and ideas. Next the outward looking innovator who works with pure thought-stuff and finally the raw nerve of intuition.

So, what have I learned about my thinking from thinking about thinking ?

1) When consciously applying myself to a problem, i.e. deliberately thinking, I tend to go Conceptual first and then work my way round clockwise. My first question, right after “What is the problem?” is “What type of problem is this?” This generally get’s me into a position to start moving clockwise and planning a practical solution. If not, I may have to go anti-clockwise to Innovative. This is where I think we find “lateral” and “out of the box”. I go in search of ideas or inspiration.

2) You can never go to blue (Intuitive), or at least I can’t. It has to come to you. This is the stuff that seeps through in your subconscious. This is what is at work when you decide to “sleep on it”. It may also tap you on the shoulder and take you by surprise at any moment when you are somewhere else entirely. Although I *do* Innovative, Conceptual, Practical and Critical, I *am* Intuitive and I rely on it a lot.

3) I am happiest within the processes of Innovative and Conceptual. These are my playgrounds. However, I am most satisfied by the results or output of Practical and Critical. Practical and Critical are much harder work but they are the most satisfying and rewarding. They mean a job well done.

4) Look at this “thought path” :

thinking2

You can probably tell what that is straightaway…almost without thinking ;) It’s a snap decision, a knee-jerk reaction an impulse. These are risky because they can easily fall foul of the influence of our prejudices but they can also be quite valid and useful provided we don’t try to kid ourselves about what we just did. Often, the initial hop from instinct to decision is followed up by a quick visit to reasoning. This is called rationalisation or the “story-telling reflex”, whereby we either don’t acknowledge or don’t want to admit the sneaky short cut we just took to our decision so we go back and retrospectively apply reasoning to it to make it look legit. Some great examples of this (both the risky and the useful) are described in Malcolm Gladwell’s book entitled “Blink : The Power of Thinking Without Thinking”.

5) While I was looking for his “pure thought-stuff” quote, a final thing occurred to me when I re-read what Fred Brooks’ wrote about why programming is fun. The Intuitive, Innovative, Conceptual, Practical and Critical thinkers in me are all amply catered for in his marvellous description.

Intuitive : “the delight of working in such a tractable medium. The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination.

Innovative : “the joy of always learning, which springs from the nonrepeating nature of the task. In one way or another the problem is ever new, and its solver learns something: sometimes practical, sometimes theoretical, and sometimes both.

Conceptual : “the fascination of fashioning complex puzzle-like objects of interlocking moving parts and watching them work in subtle cycles, playing out the consequences of principles built in from the beginning.

Practical : “the pleasure of making things that are useful to other people. Deep within, we want others to use our work and to find it helpful.

Critical : “Yet the program construct, unlike the poet’s words, is real in the sense that it moves and works, producing visible outputs separately from the construct itself.

Azure Service Bus

Azure Service Bus : Connect All the Things !

GOTCHA : Using Silverlight with the Azure AppFabric Access Control Service (ACS)

Version 2 of the Azure AppFabric Access Control Service now serves up a proper ClientAccessPolicy.xml file to Silverlight clients. Here is what you used to get under version 1 if you went to

https://yournamespace.accesscontrol.windows.net/clientaccesspolicy.xml

<access-policy>
	<cross-domain-access>
		<policy>
			<allow-from http-request-headers="*" http-methods="*">
				<domain uri="https://*"/>
				<domain uri="http://*"/>
			</allow-from>
			<grant-to>
				<resource path="/" include-subpaths="true"/>
			</grant-to>
		</policy>
	</cross-domain-access>
</access-policy>

Here’s what you get now :

<access-policy>
	<cross-domain-access>
		<policy>
			<allow-from http-request-headers="*" http-methods="*">
				<domain uri="https://*"/>
				<domain uri="http://*"/>
			</allow-from>
		<grant-to>
			<resource path="/WRAPv0.9" include-subpaths="true"/>
			<resource path="/v2/OAuth2-13" include-subpaths="true"/>
			<resource path="/v2/wstrust" include-subpaths="true"/>
			<resource path="/v2/wsfederation" include-subpaths="true"/>
			<resource path="/v2/mgmt/service" include-subpaths="true"/>
			<resource path="/FederationMetadata/2007-06/FederationMetadata.xml" include-subpaths="true"/>
			<resource path="/v2/wstrust/mex" include-subpaths="true"/>
			<resource path="/v2/metadata/IdentityProviders.js" include-subpaths="true"/>
		</grant-to>
		</policy>
	</cross-domain-access>
</access-policy>

Here’s the gotcha : this may break previously working code because Silverlight considers those paths to be case sensitive !

If you call the ACS from Silverlight and try to get a simple web token from the WRAP endpoint by calling https://yournamespace.accesscontrol.windows.net/WRAPV0.9 you will get a Silverlight security exception BEFORE Silverlight even attempts to make the call. Basically it will get the client access policy, compare the URL to the permitted resource paths and then throw an exception because /WRAPV0.9 does not match /WRAPv0.9. It will not give you ANY CLUES !

Badass tattoos and pimped nails

I went out for a few beers with colleagues last night and left my phone in a restaurant. Fortunately my colleagues rescued it for me. Unfortunately they then took it with them on a drunken, late-night tour of  Tower Hill and Essex whilst logged into my Facebook profile. Here’s a record of how thoroughly I was violated.

 

More video…

I just found this video while I was looking for easyJet-related resources on the web. Hadn’t even realised it had been filmed. I gave this talk at BAFTA for a Microsoft event called Migrating Businesses to the Cloud. Pretty nerve-wracking as the other speakers were Bob Muglia and David Chappell; tough acts to follow by anyone’s standards.

Bargain

Found a fantastic bargain on eBay this week. An Ibanez AW40ECE-NT, as new for £160. Less than half the £360 RRP. Absolutely flawless and it sings like and angel. A perfect little sister for my AW140QMECE-VV.

aw40ece-nt-38 aw40ece-nt-36

Hospital Cuts

My wife is a consultant anaesthetist. She works in a well renowned North London hospital. One of the surgeons she works with is a paediatric specialist of some repute. A complaint they regularly treat in infants is something called DDH or Developmental Dysplasia of the Hip. This is where either the ball or the socket of the hip is not correctly or fully developed and requires intervention to make sure that it develops correctly.

A common treatment for this is a type of plaster cast which holds the legs and hips in the correct position. It then often requires a that a horizontal brace be incorporated into the cast at about ankle level, so that the whole cast forms an “A” shape with the brace as the cross-bar. There is no special instrument or implement prescribed for creating this brace so surgeons tend to improvise. The surgeon in question favours wooden walking sticks. These are cheap, abundantly available in hospitals and can be quickly and easily sawn to the exact length required.

One of the theatre staff can pop out to the medical supplies room, grab a walking stick and remove the rubber end-cap so that the exact length can be sawn off the end. At the end of the procedure the it is common practice to  pop the rubber end-cap back on the sawn-off stick and hang the stick back up in the medical supplies room with the other walking sticks. That way the surgeon may get two or three braces out of a single stick. Over time quite a collection of these little walking sticks had built up.

The other day one of the senior theatre staff was showing trainees round the theatre suite.

“This is the supplies room”, he said and proceeded with the usual tour of where to get what. As they were turning to leave one of the trainees caught his eye.

“What are these little walking sticks for?”, the trainee asked.

Without missing a beat the staff member replied, “Those are for Dwarf Clinic.”

“What’s Dwarf Clinic?” the trainee enquired.

“We run regular clinics for Dwarfs,” came the reply. “The circuses have always favoured us because they can make camp in the surrounding fields during the off-season and the performers can come in for treatments that are hard to undergo while they are constantly on the move.” The hospital is indeed surrounded on three sides by fields.

“Dwarfs, contortionists, sword-swallowers, fire-eaters”, he continued, “we’ve treated them all here.”

“That’s fantastic” boggled the trainee, “I had no idea”.

It is a credit to the other theatre staff that they all managed to keep straight faces during this exchange and managed to maintain their composure even when later the trainee had cornered the hospital’s Head of Training in the corridor outside theatre and was overheard to ask, “…and while I’m here I’d really appreciate it if I could attend one of the Dwarf Clinics.”

There was a flicker of confusion on the senior man’s face as the trainee was whisked away down the corridor, the ensuing conversation echoing back, “We’ve had to cancel them. The land has been sold to property developers and the circuses can’t afford to lease it any more.” “That’s awful!” “I know, but what can we do ? One just hopes they’ll be able to find another hospital with the right facilities.”

I worry that this amusing fabrication will now leak out and take on a life of its own as urban legend. I fully expect to turn on Question Time in a few weeks to hear some minister being harangued over the lamentable state of affairs in the NHS that has led to fat cat property developers in the green belt causing medical treatment units for persons suffering from dwarfism to be closed. The headlines about big business filling its boots at the expense of the little man just write themselves.

UKTechDays 2011 : My Talk on easyJet’s use of Cloud Technology

I gave a talk at UKTechDays last month on how easyJet had evolved from its start-up style, D.I.Y IT, though managed services to cloud. Thanks to everyone who came and for the great feedback. The video is now up on the UKTechDays website : http://uktechdays.cloudapp.net/techdays-live/every-cloud-has-an-orange-lining-how-easyjet-is-making-cloud-work.aspx.

Follow

Get every new post delivered to your Inbox.

%d bloggers like this: