Executive Car Services (ECS) is a large limousine company with a call
centre servicing operations in multiple cities. (ECS is a fictional
organisation, but this case is based upon real experiences.) Although the
company enjoys a reputation for excellent customer service, the standard
call centre approach of attempting to cover all customer interactions using
standardized, optimized scripts can sometimes lead to considerable
frustration - for both customer and booking agent - as the following
example reveals:
-
How can I help you? I'd like a car from mid-town Manhattan
to JFK airport early this afternoon, please.
-
May I have your first name? Richard.
-
Last name? Pawson.
-
I see you've booked with us before. Are you still with CSC?
Yes.
-
In that case I'll need a project number for the invoice. I
don't have a project number to hand, can I pay by credit card?
-
Certainly. Type of credit card? American Express.
-
Number on the card? 3791 xxxxxx xxxxx.
-
Expiry date? 01.04
-
Name as printed on the card? Richard W Pawson.
-
Date of travel? Today.
-
Time? 2.30pm.
-
Location? It's the Pfizer building on East 42nd St - I
don't know the number.
-
I can look that up for you ... just a moment ... yes, it's 234
East 42nd St.
-
And you are going to? JFK airport.
-
Which airline? British Airways.
-
Which flight number? I don't know the flight number, it is
the one going to London at 18.00.
-
I can look that up also ... just a moment ... yes, it's the
BA218.
-
And finally, I need a contact telephone number for you. I'm
staying at the Grand Hyatt on 42nd and Park Avenue. I don't know the
number.
-
I can look that up ... yes, its 212 XXX XXXX. And what is your
room number? 1634.
-
Thank you, that's all I need. Just a moment please ... Sorry,
sir, it seems that we have no cars available!
The point is that the system ought to have been able to capture the
information provided in the very first sentence and ascertain whether a car
was available first - and only then ask for all the further information. It
is not enough to put a new step into the script to check availability as
early as possible in the interaction. Rather, the operator should be able
to handle each call in any way that suits the customer or the particular
problem in hand.
The screen shown below is from a simple prototype that we produced to
demonstrate how designing a reservations system from naked objects might
address this issue.
The mock-up uses just six core business object classes and these are now
briefly explained.
The six classes used in the ECS prototype
Booking Knows the details of a customer's booking.
Knows how to check availability and confirm.
Customer Knows identification details, and object
instances frequently used by customer (e.g. Locations, Telephones). Knows
how to communicate with the customer.
City Knows frequently-used Locations in that city.
Knows how to look up today's weather and traffic conditions.
Location Knows the street address and a nickname (e.g.
'Head office'). Knows how to obtain driving directions.
Credit Card Knows the card details. Knows how to hide
the number, and how to obtain authorization for a given amount. (Other
Payment Methods such as Company Account to be added later).
Telephone Knows the number and nickname (e.g. 'My
office'). Knows how to place the call. (Email, Fax objects would be added
later, all sharing a common interface).
From this simple prototype we can illustrate three of the four benefits
of naked objects:
- Naked objects empower the user.
- Naked objects can better accommodate future changes to business
requirements.
- Naked objects improve communication between developers and
users.
First, we'll look at empowering the user. The prototype allows the
agent to construct a booking in several different ways, according to the
particular context or the customer's preference. Here are just three
possible scenarios:
- Right-click on the Bookings class and select
New Instance.... Then fill in the fields one by one (but in
any order that suits the customer or user). The Check
Availability method can be invoked at any point from the pop-up
menu. If all the necessary details are provided, this method will return
a firm yes or no. If not, it will give an indication of availability
during the day. The Booking object could also have methods to estimate
journey time and adjust the pick-up time accordingly, or arrange to
pick-up from a flight. (And because Flight would also be an object, it
could easily be designed to monitor the predicted arrival from the
appropriate airline's website).
- Go to the Customers class and retrieve the object
representing this repeat customer. Expand the list of the customer's
recent bookings and 'clone' the one desired, filling in only the new date
and time. Alternatively, drag the Customer onto the
Bookings class as a shortcut - this will pre-populate
the booking with the customer details.
- Right-click on the City where the journey is to be
made, which offers you the option of checking today's availability, and
also the weather forecast and traffic news (which the customer may want
to know in order to decide the time of travel). The City
can then be used to show the most frequent locations booked by all
customers within that city, including generalizations such as 'Downtown'
that can subsequently be made more specific.
Secondly, the prototype shows how it becomes easier to accommodate
future business change. Since the company often takes bookings for cars at
both ends of a flight, might it not in future also make the flight booking?
For an extra fee, why not add a concierge service to book theatre tickets
or dinner reservations? All of these could be accommodated by generating
new classes of business object that could be associated with a Booking as
needed. Or, as another example, currently the two methods of payment are
credit card and company account. Only one of these has been implemented on
the prototype as shown, but both are sub-types of PaymentMethod. Further
sub-types could easily be added to enable a gift certificate service, for
example.
The third major benefit, of providing a common language between
developer and user, is illustrated over the next few pages.
|