Delivering Great Service? The Journey counts as much as the Destination


A few years ago some colleagues and I were dining at a Parisian restaurant. It had been a long day and we'd picked an establishment close to our hotel. I ordered a seafood dish. The waitress was perfunctory: just doing her job. After a few mouthfuls of gritty crunching between my teeth, it was clear that the food hadn't been properly cleaned.

I called the waitress and mentioned there was sand in my food. Used to living in the US I expected her to apologize, swiftly whisk my plate away, and offer me something else (on the house maybe?). Possibly the chef would come over to proffer his excuses. Did any of this happen? No. Instead the waitress explained in a sarcastic tone: "It comes from ze sea Monsieur, of course it will 'ave sand!" Then she walked away.

This attitude, though extreme in this example, is more prevalent in Europe than the States, esp. in Northern Europe. People in service industries focus on the destination, i.e. the ultimate transaction, such as curbing your hunger, at the expense of the journey. Who cares if there's sand if your food? At least you're no longer hungry, right?

Focusing on the transaction is fine if the service is low value. Fast food joints focus on a cheap, repeatable, consistent experience. Margins are thin enough that there's little room for personalized service, though even here courtesy and a smile can go a long way. As the price of the service rises, how the transaction is delivered, the "journey", is as important as its delivery, the "destination".

This applies online just as much as offline: your site may sell goods cheaper than the competition but if that's not enough if you care about your customers' lifetime value. And if you don't focus on repeat business, you'll be putting yourself at the mercy of search engines and spending more and more on advertising. In fact, unless you're selling commodity items being cheapest probably isn't even the most important criteria.

Ultimately you need your customers to reach the destination, i.e. purchase something. To achieve this you should focus on their journey: understand why people buy from you, what their needs are, how you can differentiate your service, how you can make their shopping experience more enjoyable, informative, and relevant (reviews, videos, testimonials, leveraging the social web, etc.), and deliver great customer support. 

If you can consistently delight your users with a fantastic experience, as well as a good product, your customers will happily reach your destinations over and over and over.

(Picture by James Jordan)

Tech Trends I'm Watching in 2011

The good news for us techies is that there are so many things to choose from... So, in no particular order, here are some that I'm excited about.

Continuous Deployment / Delivery

Different people give it different names but the concept is the same: Since you're already running continuous integration servers against your codebase to make sure they build correctly and pass automated tests, why not go one step further and deploy to production instead of stopping at the integration environment?

Companies that follow this approach will often release to production dozens of times a day. A key goal is reducing the "wait time" for a bug fix or a new feature to be available to users from days, weeks, or even months to a couple of hours at most.

On the technical side, continuous deployment calls for extensive automation, comprehensive unit and integration test coverage, clear procedures for making (reversible!) database updates, improved production server monitoring to detect any flaws ASAP, and the ability to efficiently stage a deployment through multiple "waves" of servers (e.g. start with 1, then 10, then 100 servers) and of course roll it back in case of issues. 

On the business side, continuous deployment means more flexibility in how features are rolled out. While bug fixes may hit all users very quickly, Product Managers can now batch features together as needed and release them to a few clients for beta testing, before "flicking the switch" of a full deployment. Of course, all this entails tight cooperation between Development, Operations, and Product Management.

While some will understandably be gun shy of pushing out code so quickly, I believe that companies that achieve continuous deployment will reap significant competitive advantage.

Kanban

Another example of how our world is moving from the discrete to the continuous is in development "methodologies". Long ago, waterfall gave us release cycles measured in months and years. Today Agile approaches like Scrum typically aim for a "production-ready" codebase at the end of each sprint (typically two weeks). But two weeks is too slow if you're embracing continuous deployment.

Consequently I'm seeing more and more activity around Kanban or Kanban-like models for software development. Based on Toyota's Lean Manufacturing principle Kanban focuses on eliminating waste and improving efficiency based on (among other things) maintaining a smooth flow of features and fixes through the "development pipeline". This "pull" system is a lot more suited to rapidly responding to external changes than waterfall or even Scrum (where early sprint termination is usually fairly costly). 

In reality, it can often make sense to combine elements of both Scrum and Kanban. In my own experience we've found Kanban well suited for operations teams, esp. when they're dealing with many emergent tasks.

Kanban's challenge when used with continuous deployment is being able to decompose stories into small enough items. A four week work item defeats the purpose of continuous flow! :-)

NOSQL

Alternatives to SQL really exploded in 2010 when NOSQL hit mainstream. Products like CouchDBMongoDBRedis, and Cassandra are powering very large sites. These databases are in some ways the descendants of the OODBs that seemed poised to break SQL's hold on our data 10-15 years ago and, more directly, related to the BigTable technology Google developed. 

While the tech community has a well-known affinity for bright, new, shiny things and we're still learning how best to use NoSQL, there's no doubt we'll be seeing a lot of action in this space in 2011. We'll also see a backlash fueled in part by highly publicized failures like this one (though there will always be counter-examples!).

Smart Phones

Despite Microsoft's re-entry in the mobile space with Windows 7 Phone and Palm's impending release of webOS based tablets (oh, and RIM too), I doubt Apple's iOS and Google's Android will lose much if any market share.

Last year Adobe implemented Flash on iOS but was blocked by Apple's strict licensing agreement, which Apple then quietly relaxed a few months later. Given that you need your apps on both Android & iOS to reach the majority of consumers I expect cross platform development environments to get more airtime in 2011. Companies include RhomobileAirplay, and appMobi (which just announced a $6M round of funding yesterday).

In the meantime, since Android and iOS have sophisticated (and mostly compliant) HTML5 browsers,  some developers are building their mobile apps as web apps and releasing a "shell app" to both Apple and Google app stores. Netflix is a prime example of this approach.

Security

It's not clear to me whether we'll see new classes of security products in 2011 but what is clear is that with attack surfaces multiplying, demand will be strong. Companies are expanding their apps into the mobile space, rolling out APIs, dealing with ever increasing browser complexity, maybe even experimenting with NFC, and they often do so at the expense of security. Just as importantly, many web apps now outsource key functions to third parties (e.g. customer supportpaymentsemails...). Criminals targeting these firms could potentially affect hundreds or thousands more.

Financial services may be where most of the money is but cyber criminals are nothing if not opportunistic. They'll keep looking for other industries to target, esp. ones that might not be so security minded. Speaking of branching out, I'm not sure if it will happen this year but with Apple's growing PC penetration it's only a matter of time before virus and trojan writers focus on OSX.

Concerns of "mini wikileaks" within large organizations will likely increase demand for employee monitoring tools, egress filtering, comprehensive audit trails. None of this will prevent a determined data thief, but it will satisfy auditors and shareholders.

There's more to talk about: Rails becoming the defacto startup dev platform, the problems of complex systems, and the progress towards AI, but these will have to wait for another time.

San Francisco and Bay Bridge from Treasure Island

After many years of thinking about it, I finally got round to visiting Treasure Island. Lying between San Francisco and Oakland it was originally created from fill in the 1930s. The island was mainly occupied by the Navy and has only recently been donated to San Francisco. Nowadays it's a mix of residential housing, hangars, fields, and derelict places. My favorite landmark was a "Genetic Reclamation Area" sign.

Why go there? For spectacular views of the Bay and, if you're willing to explore, you can drive down to the base of the Bay Bridge and see some of the impressive construction work going on.

Fusing RSS feeds together from Posterous and other blogs

Posterous is a great web app: they've managed to the keep it simple and elegant to use while making it ever more sophisticated (thanks in large part to Garry Tan's leadership).

They're also very quick to respond to questions from users:

Why did I need such a script? My oldest domain, cyberclip.com, was registered in 1995 (back when "cyber" was cool! ;-) and went through early years of excitement and later years of neglect. A few months ago I streamlined it to a very simple design:

Recently I thought it would be nice to add just a little more content and decided to include a list of the newest posts from all my blogs. Since Posterous doesn't supply a consolidated feed, here's the ruby script I wrote to generate one. I've only tested it with FeedBurner and Posterous but it should work with all properly formatted RSS feeds.

I've purposely kept error handling out of this script for simplicity's sake because that's handled by the program that invokes it. That prog runs as a cron job and regens the homepage on a regular basis. It won't replace the homepage if RSSFusion errors out for whatever reason. So worst case is a stale homepage, not a broken one.

Combining blog posts for inclusion in another page is one use, but this script could also be used to generate a fused RSS feed of multiple blogs, which is something I should probably add to my homepage as well...

Software Architecture should be forged in Fire, not Carved in Ice

(Picture by Jason Bolonski)

I've seen a number of corporate environments that carve software architectures out of ice.Why ice? Because an ice architecture sure looks great: sparkling, pristine, perfect even. This approach often feels right, esp. in cost conscious, slower moving organizations. You know how it goes: spend the bulk of your time in design, figure things out properly, measure twice (or thrice), cut once, and then you're set. Sadly once carved, often the only thing left to do with such an architecture is freeze it, lest it melt. And a frozen architecture is rarely useful.

The problem is that you're never set. Needs keep changing and if your architecture can't evolve with them, you've (best case) got a working but unmaintainable and unevolvable app, or (worst case) something that becomes unusable, even by the people who need the application the most and who are willing to put up with its flaws.

The architecture you want is not one carved in ice. Rather, you want something you've not only heated and beaten into shape to serve your current purpose, but also a design that you can reforge in to something new as needs dictate. So how do you achieve this?

Understand your problem space & key challenges
I'm not advocating no design, I'm advocating just enough design. Knowing how far to go is both art and science. Two things that will help is a good understanding of the problem space and the main obstacles you'll face. If you're building a social app you need to have at least broad designs for your sharing / trust model for users, how you will distribute data and scale, what security choices to make, etc. If you don't have strong expertise in house, hire someone who does, even as a part time consultant. It will be money well spent.

Rapid Iteration
Focus on speed. Not at the expense of quality but at the expense of features. Build your Minimum Viable Product, get it live, get it used, and iterate. The only way to really learn what works and what doesn't is to let your users at your app. The faster your iteration the more you can adapt (reforge) to changing needs. This is one of the reasons that agile development has become the de facto development approach in the past decade. Continuous deployment and delivery are other, welcome, instances of this trend.

Less is more
Build what you need and improve when needed. This goes hand in hand with rapid iteration and goes against the "what if" architecture. "What if I want to go live in other countries? Oh better internationalize", "What if we need to support suppliers as well as customers? Good point, better code them in". "What if I need to scale to hundreds of millions of users?" The list goes on and the longer you let it go the slower you'll be, not just in development but in maintenance and new feature additions.

This doesn't mean making uneducated decisions. If you think there's a good chance you'll need to go international in future, leverage a framework that supports it. But don't build it internationalization (i18n) until you're ready to use it. I'd argue that the cost to support i18n - testing multiple languages across the app, different formats & interfaces, new & altered business logic, etc. - is not worth saddling your dev team with against the day when you finally need the feature.

Ultimately, the fewer lines of code the better. To paraphrase Dijkstra: it's not lines of code produced, it's lines of code spent!. So spend wisely.

Test Driven / Refactoring
If there was one software engineering practice I'd enforce, this is it. A comprehensive and robust set of tests gives you the confidence to make radical structural changes to your application and still have a working product at the end of process. I've seen business leaders question the value of putting in effort here. Understandably they're concerned that all the time spent coding tests could have been better spent coding new features.

A counter-argument to this is to remind the business folks that, once tests are written, all the downstream QA is not only free but extremely rapid. That's when you can reassign developers to new areas confident in the knowledge that you'll detect breaks long before they ever reach end users. As your codebase grows these tests will be a godsend to help avoid spending all your time on maintenance.

"Less is more" is your friend here too: focus on DRY (Don't Repeat Yourself). The DRYer your code, the less of it you have, so the fewer tests you'll need and the easier it will be to reforge.

Culture
The most fundamental and so the most important. The culture of an organization is represented by people's shared values, goals, and behavior. Whether implicit or explicit, culture is the bedrock on which all else rests. The more individuals align with the culture, the more effective the team. This buy-in means that a successful culture cannot be dictated (typically by management), it must be nurtured.

Culture will obviously vary by company but these common values will support all the principles listed above:
  • Continuous improvement: Continually striving to make things better, to achieve ever higher quality, and redefine goals as necessary 
  • Trust: Despite the best laid plans, failures happen. When they do, an organization needs to display enough trust in individuals and team to allow them to fix the problem, learn from the experience, and come out stronger
  • Collaboration: In my experience, tech and business are often in push-pull. Tech rarely gets the necessary time or resources, and business rarely gets all its desired features. The principles above drive long term value. If the culture prizes collaboration, openess, and sustained value, then neither group will want to sacrifice the short term for the long term

Update (2011.2.3): Great article on the importance of culture from Wealthfront.

 

    What about...?
    What about separation of concerns, SOA, AOP, and more? All of these have their place and can certainly improve your application and architecture. Design patterns, if properly used, can make your software design more flexible and reduce the amount of refactoring needed to add new features. Still, these practices are should haves, not must haves. They can make good architecture great, but on their own won't keep it great in the long run.

    Ultimately the key to building great software is great people. Finding them, building the right culture together, and continuously evolving the organization and its processes. Over the years, new software engineering practices will come to light but these principles will evolve much more slowly.

    Sydney: A Splendid City

    Having been in Australia for six weeks we wrapped up our trip in its largest city: Sydney. A lovely place, it reminded us of our own San Francisco: Huge bridge, bay, hills, good weather (better in Sydney I think, summers are warm here!), and both have very expensive housing markets. There are differences too: Sydney feels a lot more livable and relaxed than San Fran. It's cleaner too. I'd say San Fran is a tad prettier though. Oh, and for anyone who's braved the frigid waters of northern California... The ocean here is a lot warmer!

    There's tons to do in Sydney, more than we could ever hope to fit into six days. We were also a little lower on energy than at the start of our trip so we took things easy. We celebrated my wife Katrine's birthday with a seafood lunch cruise (with Thomas Cook Cruises, not bad) and a circus performance at the Opera House (Le Grand Cirque Adrenaline: excellent). We also spent a couple days with friends in Manly and near Bondi beach (which we didn't visit). 

    We mostly stayed close to our apartment which was well located just north of Chinatown, and enjoyed visiting Darling Harbour, the downtown area, and its parks. The Sydney Tower is worth it for the panoramic view and the Aquarium and Wildlife World are sure to please young and old alike, esp. with the cool Lego displays. If you like shopping check out the open market at The Rocks (neighborhood at the base of the Harbour Bridge). It's on every Saturday and Sunday, and there are lots of stalls to tempt you (we were won over by a didgeridoo).

    Travel tips:
    • Visit the Opera House from the inside as well as the outside, check out the shows for any you might like (there's more than just opera!)
    • We enjoyed our cruise but you can get some very nice pics just by taking the ferry to Manly (bonus: they have free wifi on the upper deck!)
    • Manly is worth a stop: it's a lovely little seaside neighborhood with a very relaxed feel and a great beach
    • Contrary to San Fran in the summer you will likely get some rain but, even when heavy, it doesn't seem to last very long
    • Buy a combined ticket for these four attractions (Aquarium, Wildlife World, Tower, and Manly Aquarium), you'll save a lot and these are worth visiting. Well, the first three definitely are, we didn't have time to visit the fourth having spent all our time at Manly beach!
    • We didn't visit Taronga Zoo. We've heard many good things about it, both the animals and views, but we felt like we'd covered all the Aussie fauna already and didn't want to see boring old elephants, giraffes, and lions :-)
    • We stayed in a serviced apartment, the Sydney Waldorf Apartment Hotel. We'd stay there again: the location was excellent, the amenities fair, and $250/night for a two bedroom flat at peak tourist season is a great deal
    • Make sure you find out what's on in Sydney when you visit. As with any large city, there are always events, exhibitions, concerts, etc. to enjoy. In January for example Sydney puts on a month long festival of the arts

    A Puzzle To Die For

    Came across this very cool puzzle at Brisbane's Museum of Science: they'd cut a die into nine pieces and it was up to you to put it back together. Being a big fan of polyhedra the puzzle instantly appealed to me, but I also like the fact that it forced people to think of how a die is constructed. For example, which faces are opposite which? Given there were only nine pieces it wasn't hard putting it back together again but Katrine and I had fun solving the puzzle nonetheless.

    Fraser Island: The World's Biggest Sand Island

    Slowly making our way south to Brisbane we decided to visit Fraser Island, the largest sand island in the world. Fraser's a pretty unique place: over 1,000 square miles of sand with rain forests, fresh water lakes, dunes, mangroves, swamps, the purest strain of dingo in Australia and much more. Life is so abundant here thanks in large part to fungi in the sand which release nutrients for plants to absorb.

    We chose a two day tour of the island via Queensland Bookings. We were picked up at our hotel on the mainland in Hervey Bay, bused to a ferry terminal, and then on to Fraser itself. The buses have a high clearance and, I assume, four wheel drive to able to negotiate all the sandy roads. Day one mainly consisted of stops at Lake Wabbi and Lake McKenzie. They were both delightful to swim in, esp. McKenzie whose waters were cool and blue. Diving to its bottom (depth 10-15 meters?) I startled some turtles rooting about its bed.

    We stayed overnight at Eurong Station. The accommodations were very spacious but be aware that there is no AC here. Eurong uses generators to supply it with electricity and air conditioning would draw too much power. The fans kept us pretty cool though.

    The second day we drove up and down Fraser's east coast highway... its beach of course :-) We saw what was left of the 1930s Maheno wreck, the colored sands further on, the view from Indian Heads, and cooled off in a delightfully refreshing creek. Thomas and I took a plane ride in an Air Van to admire the island from the air. As a pilot myself, this was a treat even if I didn't get to touch the controls ;-)

    Travel tips:
    • There are many ways to see Fraser: in addition to 1, 2, and 3 day tours, you can also rent 4x4s and explore the island on your own. Use your favorite search engine to find options
    • It had rained the night before our arrival so the sand was moist. Turns out that was lucky because when the weather's very dry the sand can get everywhere. Protect your camera and other gear accordingly
    • There's plenty of food at the resorts and (on the second day) on the bus but it never hurts to have extra snack, esp. if you have kids
    • Sunscreen!

    Sailing the Whitsundays in a 100 year old ship

    The Whitsundays, a large collection of islands off the east coast of Australia are a famous destination for tourists and sailors alike. There are hundreds of idyllic beaches and coves dotted around the islands, and a good number of resorts as well. Though you can rent your own sailing ship to tour the islands, we decided we'd have more fun letting more qualified sailors do the work!

    We booked a three day / three night trip on the Solway Lass and were as taken by her as with the islands. Originally built in Holland, the Lass has had an exciting life that includes serving in both world wars as well as trading throughout the South Pacific. She moved to the Whitsundays about 10 years ago and was renovated for the tourism industry. That means her quarters were reasonably comfortable (with a decent AC system) but not up to the quality of our cabins on our Great Barrier Reef diving trip.

    We had a great time. The first day was rainy which unfortunately didn't make for the best snorkeling conditions but we still saw plenty of marine life. Just as fun was the rope swing and diving off the bow, our boys couldn't get enough. The crew were always friendly and took good care of us. The second and third days were beautifully sunny and included island exploration, esp. the famous Whitehaven Beach, voted one of the top ten beaches in the world.

    Perhaps the nicest aspect of the trip was the great company we had on board: a Danish bartender, British-Kiwi affiliate marketeers, a US investment banker, a German Nightwish groupie, a Brazilian environmental engineer... We loved getting to know everyone.

    Travel tips:
    • Book well in advance, at least a month or two to make sure you get the cabin you want
    • The snorkeling gear onboard is OK but they don't have flippers, bring your own if that really matters to you
    • There's very little space on board so pack lightly. The good news is that you don't need much
    • Bring a few dry snacks (cookies, chocs, chips) in case you get peckish between meals (esp. if you have children)
    • Don't forget your sunscreen!
    • Have dinner before you board, your first on the ship is at 10PM that night
    • You can leave your car parked in the marina lot, it was pretty safe
    • Consider booking a room in or around Airlie Beach for the night of your return