SlideShare a Scribd company logo
1 of 138
Download to read offline
Twittex:
   From Idea To Live in 7 Days
                                   Stuart Herbert
                                  Technical Manager
                                  www.gradwell.com

                           stuart.herbert@gradwell.net
                            stuart@stuartherbert.com

Welcome to my talk for the PHPNW 08 conference.
Let me introduce myself. My name is Stuart Herbert. You have probably come across my blog,
which is syndicated on Planet PHP.
I’ve been a professional software engineer since 1994, and I’ve been working almost exclusively on
web-based projects since 1993. My career has given me the opportunity to gain a lot of real-world
experience with UK household names over the years, and I’ve also been an active contributor to
open-source software since the early 1990’s.
I am currently the Technical Manager for Gradwell, a role I started in April 2008. We are what is
fashionably called a Unified Communications company. We do premium quality broadband, email,
hosting, and Voice-over-IP (VoIP). VoIP is the majority of our business in 2008, and we are the UK’s
third largest VoIP provider, with an annual turnover in excess of two million GBP. Celebrating our
10th anniversary this year, the company was founded, and is run by Peter Gradwell, who has been
very active in the UK internet scene for the past decade.
One of the services we offer, and the subject of this talk, is Twittex (http://twittex.com). Twittex
allows you to receive SMS messages from your Twitter feed.
All you have to do is to register your twitter account and your mobile phone with Twittex.
Decide which friends you want to watch, and when they post a status update to Twitter, you will
receive an SMS containing their status update.

Twittex is a very simple, and very straight forward service.
Twittex.com Team
Twittex was built from scratch in a seven day sprint by a team from Gradwell.

From left to right, back row: me (project management, queue servers, queue management,
provisioning), Ben Cole (Twittex.com website), Daniel Leech (Gradwell symfony components), Matt
Park (Twittex logo).

From left to right, front row: Ben Smithurst (SMS integration), Paul Thomas (server provisioning,
server monitoring), Tim Douglas (Twittex.com website).
Objectives

            1. How We Built Twittex In Just Seven Days
            2. What We Got Wrong
            3. What We’d Do Differently Next Time




In this talk, I want to share with you our experience of building Twittex.com. I’ll start off by
explaining the key factors that allowed us to build this service from scratch in just seven days.
Objectives

           1. How We Built Twittex In Just Seven Days
           2. What We Got Wrong
           3. What We’d Do Differently Next Time




Although we think it was a great achievement to build Twittex in just seven days, with hindsight we
made a few mistakes along the way. Some of them were obvious, and should have been avoidable,
but not all of them were, and I’d like to share those with you too.
Objectives

           1. How We Built Twittex In Just Seven Days
           2. What We Got Wrong
           3. What We’d Do Differently Next Time




Finally, if we could go back in time and do it all over again, what would we change?
Questions Welcome!



Please feel free to ask any questions you have at any point during the talk. There will also be time
at the end of the talk for questions.
Background

           1. Introducing Twitter
           2. Twitter and SMS
           3. The Opportunity
           4. The Competition




Not everyone has heard of Twitter - surprising as that seems - so let’s start by introducing Twitter
and explaining what it does.
Twitter is a microblogging service hosted at http://twitter.com. Anyone can signup for free.
Once you’ve logged in, you can post short messages to the Twitter website (known as the public
timeline). It’s a great way to broadcast to the world what you are currently up to.
Each user on twitter gets their own “feed” - a list of messages from people that you choose to
follow. Here’s a screenshot from my Twitter feed. Your feed is also available via the Twitter API.
As well as keeping in touch with your friends without having to keep up with the latest blog posts,
Twitter is also proving to be very useful for creating online communities. One example can be
found on the PHPNW 08 conference website, where all posts tagged with #phpnw automatically
appear in the right sidebar.
Background

           1. Introducing Twitter
           2. Twitter and SMS
           3. The Opportunity
           4. The Competition




So that’s what Twitter is. But where does SMS come into it?
Twitter allows you to register your mobile phone in the Devices tab.
Once you have registered a device, you simply navigate to a Twitter user that you’re following, and
click where it says “Device Updates OFF”. Twitter will then send you an SMS every time that Twitter
user posts a status update. And, best of all, these SMS messages are free.
Once you have registered a device, you simply navigate to a Twitter user that you’re following, and
click where it says “Device Updates OFF”. Twitter will then send you an SMS every time that Twitter
user posts a status update. And, best of all, these SMS messages are free.
This is a great service, and at Gradwell we’ve recently integrated it into our customer information
feeds. Our customers have long been keen on getting SMS alerts about service-related problems,
so we decided to achieve this by publishing our status information through Twitter.
Background

           1. Introducing Twitter
           2. Twitter and SMS
           3. The Opportunity
           4. The Competition




A couple of weeks after we’d relaunched our GradwellStatus service, Twitter made some changes to
their service. These changes left us with a bit of a problem, but also with an opportunity to launch
a new service of our own.
On Wed 13th August, Twitter decided that it could no longer afford to provide free SMS alerts for
several countries, including the UK where Gradwell operates. If memory services, I believe these
SMS alerts were costing Twitter 1,000 USD per Twitter user per year. That’s a lot of money for a
firm with no revenue model!
The story was quickly picked up by TechCrunch (if you work on the web, and you don’t read
TechCrunch, you should), and from there spread like wildfire around the ’net.
Background

           1. Introducing Twitter
           2. Twitter and SMS
           3. The Opportunity
           4. The Competition




Twitter’s withdrawal of free SMS alerts suddenly created a new market, one that possibly had real
potential. Gradwell wasn’t the only company to recognise this by any means.
First to decide that they were going to launch a service was tweetSMS. They got the word out very
quickly and very successfully.
tweetSMS was quickly followed by Zygo, which is run by former colleagues of mine from the old
New Media department at Orange.
By 22nd of August - just nine days after Twitter withdrew their service - no less than eight rival
services were competing in this new market. That’s a lot of competition!
We Can Do Better!
             (Or Have Fun Trying :)



At Gradwell, we decided that we wanted to compete in this market too. As we were the only telco
launching a service (all our competitors are new media companies), we believed that we could
provide a better service. And even if we failed, it would be a lot of fun to try, and it would also be a
great way for me to learn a lot about my staff.
Timeline #1:
                           Actual Events



Let’s start by looking at a timeline of what actually happened, and when. This timeline was
compiled using BeeDocs, and at the PHPNW 08 conference, it was presented as an animated
timeline.
I’ve split the timeline up into two streams. Along the top is what was happening out on the web,
and we start with Twitter withdrawing their SMS service on the 13th August.
TechCrunch picked up the story on the same day, and began to spread the word far and wide.
On the very next day, TweetSMS announced their plans on Mashable (another website you should
add to your Google Reader feed if you don’t have it already).
Zygo announced their service on the following day ...
... by the 22nd of August, there were eight competing services analysed by the
OnlineJournalismBlog.
The second stream in the timeline looks at what we did at Gradwell. Our story starts on the 14th of
August, when I came across the TechCrunch story in my Google Reader lists. I immediately thought
that we could plug the gap created by Twitter, and that it was something we should do.
By the middle of the afternoon, Ben Smithurst and I had sketched out the architecture we wanted to
build for the service, and felt confident with our underlying design.
By 7pm on the 14th, I phoned Peter up, and left him a voice mail asking for his approval to build
what would become Twittex.
As Peter was camping out in the wilds of Scotland, we had to wait until he drove to the nearest town
for some milk before he had a phone signal. This didn’t happen until the following morning.
With approval secured, we settled down to getting on with the work. Ben Cole immediately set to
work on building the website.
We spent a few hours coming up with a name for the service, finally settling on twittex. As soon as
I approved the name, we registered the domain to make sure no-one else came up with the same
name :)
Shortly after, we had ourselves a logo. Although Gradwell doesn’t have a graphic designer in-
house, we’re very lucky that one of our staff can turn his hand to this sort of work, and that he was
very happy to make the time to do so.

How long would it take you to get a new logo for a service that you wanted to launch? Days?
Weeks? Longer? In a show of hands at the PHPNW 08 conference, many of the audience said that it
would take weeks or longer to get a logo designed.
We carried on working into the evening, and by 7pm we had the ability to send SMS messages out
to mobile phones.
By 9:30pm, we’d finished provisioning the servers to run the queues on (more on the queues later
on), and had finished compiling and installing MySQL onto the servers.

So to recap: on the Wednesday, Twittex announced that it was withdrawing the SMS service. By the
end of the Friday, we had our servers, our domain, our logo, and the ability to send out SMS
messages.
The team continued to work throughout the weekend. Whilst work was continuing on the web site,
we spent Saturday and Sunday writing the queue management code.
We also sorted out billing and payments on the Saturday.
On Sunday, we adopted the 960 grid system by Nathan Smith, and began using it to prototype the
user-visible parts of the website.
On the Monday morning, whilst work on the website was continuing, we put the server monitoring
in place.
And, on the Tuesday, we’d finished the website, and opened it up to staff for internal testing. We
were kept very busy finding and fixing corner cases in our code that day!
With all the obvious bugs squashed, on the Wednesday, we were ready to launch. We contacted
TechCrunch to announce our service ...
... we also contacted Twitter’s own PR people ...
... but heard nothing back from them at all. At the same time, we sorted out an introductory offer
price ...
... and put the service live.
Shortly after, Ben and I had to jump in the car and drive up from Bath to Sheffield for an important
meeting the following day. Unfortunately, there was a serious accident which closed the M5 for
four hours, giving us plenty of time to do even more bug fixing whilst we waited for the road to re-
open. Laptops and mobile broadband are essential tools for any developer who travels!
So, we launched our service just 7 days after Twitter announced they had withdrawn theirs, and
what’s more we were the first folks to have a working service live. Were we swamped by demand?
No. One of the reasons was that our initial pricing was badly wrong. We had to reduce our pricing
from 10p per SMS message to 5p per SMS message, and we had to do it quickly.
With our meeting in Sheffield out the way, we headed our separate ways (Ben back up north, me
back to South Wales), doing more bug fixing on the way. We improved the log messages that
Twittex writes, to help us diagnose problems quicker.
We also created a new Twitter account just for testing twittex with. Up til now, we’d all be using our
personal Twitter accounts, which put a bit of a limit on the type of test messages we wanted to
send.
Our friends at PlusNet kindly mentioned us on their blog - our very first bit of publicity!
As we still hadn’t heard anything from TechCrunch or Twitter at all, and hadn’t been mentioned by
them either, we decided to widen the net by contacting The Register and Mashable. Sadly, neither
website wrote anything about us :(
On the following Monday, Jemima Kiss wrote a piece for the Guardian’s website about Twitter and
SMS messages. We dropped her a quick email about our service. Jemima was kind enough to write
back - the only one who did out of all the organisations we contacted - letting us know that we’d
basically missed the boat.

By keeping below the radar until we had a service to launch, we’d completely missed the news cycle.
But Twittex Really
               Started Months Ago!



So that’s how we built Twittex in just seven days. Except - it’s not the whole story. Work on Twittex
had actually started *years* before.
Huh?



Years before? What do I mean by that?
Twitter.com




                                            Twittex.com




           Netsuite                           Gradwell                           SecPay




Let’s start by looking at the architecture for Twittex.com. We have the Twittex.com website, built in
just seven days.
Twitter.com




                                       Twittex.com




           Netsuite                     Gradwell     SecPay




It pulls feeds down from Twitter ...
Twitter.com




                                             Twittex.com




           Netsuite                            Gradwell          SecPay




... and then re-uses Gradwell’s existing telco infrastructure.
Twitter.com




                                           Twittex.com




           Netsuite                          Gradwell                          SecPay




An important part of this infrastructure is our ERP/CRM system, Netsuite. As a company with a
multi-million pound turnover, Gradwell has to produce audited accounts every year. A company of
our size simply cannot create a new service, hook it up to a PayPal shopping cart, and leave it at
that.
Twitter.com




                                           Twittex.com




           Netsuite                         Gradwell                           SecPay




For payments, we use SecPay, because it’s the only payment gateway in the UK that’s certified to
work with Netsuite at this time.
Software
                           Software
                      Load-balancers
                        Load-balancers




                        PHP Servers                            MySQL Server
                         PHP Servers




                                          Queue Servers
                                            PHP Servers




That’s the architecture for Twittex. If we look inside the Twittex.com box, we’ll find a pair of PHP
servers.
Software
                           Software
                      Load-balancers
                        Load-balancers




                        PHP Servers                      MySQL Server
                         PHP Servers




                                         Queue Servers
                                           PHP Servers




These servers sit behind a pair of load-balancers.
Software
                          Software
                     Load-balancers
                       Load-balancers




                       PHP Servers                      MySQL Server
                        PHP Servers




                                        Queue Servers
                                          PHP Servers




Twittex uses MySQL to hold subscriber information.
Software
                           Software
                      Load-balancers
                        Load-balancers




                       PHP Servers                          MySQL Server
                        PHP Servers




                                         Queue Servers
                                           PHP Servers




And finally we have a set of queue servers which manage the job of polling Twitter for new
messages.
At the heart of our infrastructure is VMWare ESX, which we adopted late 2007. ESX gives Gradwell
the ability to provision new servers extremely quickly. We don’t have to wait for new hardware to
arrive, and we don’t have to have someone physically installing kit into racks in a data centre.
We’ve been using symfony for over a year now as our framework of choice. We chose symfony
because we felt it had a more responsive and more supportive community that its competitors.
As I mentioned, we use MySQL for our databases. I can’t imagine there’s anyone reading this who
hasn’t heard of MySQL, but I’ve included it for completeness :)
We adopted the 960 grid system for our prototyping, and our live Twittex.com site also uses 960
gs. If you haven’t come across it before, check it out. We found it extremely useful. Using pure
CSS, you can create pages that are 960 pixels wide, cut up into 12 or 16 columns. These columns
can then be merged to form the final layout. The only change we’d love to see Nathan make to his
system would be to add a 20 column version, to allow for even more precise layouts.
For the queues, we used the Q4M storage engine for MySQL 5.1.
Q4M allows you to create first-in, first-out queues that can be accessed via SQL SELECT statements.
The really nice thing about using Q4M is that our own code doesn’t have to handle any sort of
locking at all. We can have multiple processes emptying the queues, and Q4M ensures that any one
piece of data from the queues isn’t presented to more than one of these processes.

I came across Q4M when it was selected for the architecture of a Japanese rival to Twitter.
Why Queues?



But why use queues at all? Let’s take a look at that.
Twittex User
                     1 Min Queue



                     2 Min Queue                 Twitter Message :)



                     3 Min Queue



                     4 Min Queue                No Twitter Message :(



                     5 Min Queue




We start off with an individual Twittex user.
1 Min Queue



                     2 Min Queue                                 Twitter Message :)



                     3 Min Queue



                     4 Min Queue                               No Twitter Message :(



                     5 Min Queue




We put the data about this user into a queue. We check all data in this queue every minute.
1 Min Queue



                     2 Min Queue                                    Twitter Message :)



                     3 Min Queue



                     4 Min Queue                                   No Twitter Message :(



                     5 Min Queue




Eventually, our Twittex user makes it to the front of the queue.
1 Min Queue



                     2 Min Queue                                 Twitter Message :)



                     3 Min Queue



                     4 Min Queue                               No Twitter Message :(



                     5 Min Queue




We go and check Twitter, to see if there any new messages for this user. If there are new
messages ...
SMS Sent

                    1 Min Queue



                    2 Min Queue                                 Twitter Message :)



                    3 Min Queue



                    4 Min Queue                               No Twitter Message :(



                    5 Min Queue




... we send out the messages as SMS’s, and put the user’s record back onto the end of the queue.
1 Min Queue



                     2 Min Queue                                  Twitter Message :)



                     3 Min Queue



                     4 Min Queue                                No Twitter Message :(



                     5 Min Queue




Eventually, the user once again makes it to the front of the queue.
1 Min Queue



                    2 Min Queue                                Twitter Message :)



                    3 Min Queue



                    4 Min Queue                              No Twitter Message :(



                    5 Min Queue




What happens where there are no new Twitter messages? Well, we won’t want to poll Twitter every
minute for every user. That’s a lot of wasted effort.
1 Min Queue



                     2 Min Queue                                 Twitter Message :)



                     3 Min Queue



                     4 Min Queue                               No Twitter Message :(



                     5 Min Queue




Instead, we have additional queues, which are checked less and less frequently.
1 Min Queue



                     2 Min Queue                                 Twitter Message :)



                     3 Min Queue



                     4 Min Queue                               No Twitter Message :(



                     5 Min Queue




The user’s record works its way through these queues, until eventually it hits our 5 minute queue.
1 Min Queue



                     2 Min Queue                                   Twitter Message :)



                     3 Min Queue



                     4 Min Queue                                 No Twitter Message :(



                     5 Min Queue




If there are still no Twitter messages for the user, the user’s record stays in the five minute queue.
We used to have 10 minute and 15 minute queues too, but during internal testing we decided that
they made for a poor user experience.
1 Min Queue



                     2 Min Queue                         Twitter Message :)



                     3 Min Queue



                     4 Min Queue                        No Twitter Message :(



                     5 Min Queue




If there are any messages for the user on Twitter ...
1 Min Queue



                    2 Min Queue                                 Twitter Message :)



                    3 Min Queue



                    4 Min Queue                               No Twitter Message :(



                    5 Min Queue




... we move them straight back into the 1 minute queue. This makes Twittex very responsive if you
strike up a conversation through Twitter. The user’s record will then work its way back down the
queues as before until there’s another message on Twitter for the user.
Timeline #2:
                           Groundwork



Our architecture and our infrastructure re-uses technology that we adapted long before we had the
idea to create Twittex. Without this re-use, we could not have built Twittex in just 7 days.
Here’s another timeline, this time looking at all the things we did in the past that made Twittex
possible.
We’ve been using AQL for sending and receiving SMS messages since at least October 2003. AQL
provide a very easy to use RESTful API, and we’ve had a lot of practice with it over the years.

Do excuse this rant, but if you’re going to build an API for any sort of service, do make it RESTful.
SOAP APIs should never be the only API you offer. For a start, PHP’s SOAP client is a toy, and
currently does not implement enough of the SOAP standard to make it inter-operate with real
enterprise SOAP APIs. Secondly, too many SOAP API authors need to learn that WSDL is not
documentation - it is specification. And finally, SOAP APIs also suffer from poor design, because
they focus on exposing objects rather than business services. So, please please please, stick with
simple but effective RESTful APIs :)
We adopted Netsuite for ERP and billing in May 2007. As a company, we already have an
established platform to handle new products, and the financial accounting that goes with them.
We’ve been using symfony since June 2007, and in that time we’ve built many re-usable
components for it. We’re also very lucky that we have an internal champion for symfony, who not
only advocates for its use but also that it’s used in the proper manner. This keeps our code lean,
clean, and very easy to reuse.
We made ESX our main platform earlier this year. ESX gives us flexibility that we couldn’t afford if
we were still working solely with physical hardware. How would you launch a new service in just 7
days if you had to wait for new hardware to be delivered first?
The Twitter APIs are very easy to use, being REST based, but nonetheless we’d already had
experience working with them. We’d used them in July to integrate our GradwellStatus.com website
with Twitter.
Twittex was the first time we’d used Q4M at Gradwell, but it wasn’t something we had to go out and
find on the day. A big part of my job as Technical Manager (CTO/CIO in US language) is to have a
wide knowledge of what’s available in the open source community and beyond just in case we ever
have a need to introduce something new to our established technology stack. I rely heavily on
Google Reader to help me keep on top of hundreds of RSS feeds from around the net, as well as
attending conferences, trade shows, and talking to my peers.
What Made It Possible

           1. We Were Prepared
           2. We Were Up For It
           3. An Extension Of What We Already Do




So, to recap the elements that made Twittex possible. First and most importantly, we were well
prepared. We have been consistent over the years in adopting technology that is simple to use and
that gives us increased flexibility.
What Made It Possible

           1. We Were Prepared
           2. We Were Up For It
           3. An Extension Of What We Already Do




It had already been an extremely hectic week, but with no prior notice, my team willingly gave up
their evenings and the weekend to work on this project. Do you think we would have been able to
build this with a 9-5 mentality? We would have been too late to market, and the project would
probably have failed, because we would not have managed to maintain the momentum in the first
place.

In questions after the talk, I was asked why my guys were up for it. I think it comes down to two
key things: they thought it was an interesting project to do, and to them programming isn’t a job,
it’s a vocation. It’s what they love to do.
What Made It Possible

            1. We Were Prepared
            2. We Were Up For It
            3. An Extension Of What We Already Do




Finally, we believe that a critical factor was the nature of the work. Gradwell is an established and
successful telco, and is already used to handling this sort of messaging. We’re not a New Media
company suddenly trying to get our head around a different paradigm. This is stuff we know how
to do, so we can just get on and do it.
What We Got Right

           1. Recognised Opportunity
           2. Authority To Proceed
           3. Technology
           4. Delivery Of Working Solution




What did we get right? First of all, we very quickly recognised that there was an opportunity to be
tackled. We needed to do something, because we had been relying on Twitter for SMS updates to
our customers. We didn’t um and ah about it, we got our heads down straight away on solving the
problem.
What We Got Right

           1. Recognised Opportunity
           2. Authority To Proceed
           3. Technology
           4. Delivery Of Working Solution




Despite the amusing story of how long it took to reach Peter for approval, I’m actually very pleased
about how quickly we had authority to proceed with the project. We had the green light just 24
hours after coming up with the idea.

In my own experience, most companies are utterly crap at making decisive decisions, especially in
such a short period of time. The feedback I had after the talk was that many companies couldn’t
make decisions this quickly.
What We Got Right

           1. Recognised Opportunity
           2. Authority To Proceed
           3. Technology
           4. Delivery Of Working Solution




I’m very happy indeed with our choice of technology. From ESX through to Q4M, from symfony
through to the 960 grid system, everything we used made the job much easier - not much harder.
At no point were we having to fight with the technology. We were able to just get on with creating
the service.
What We Got Right

            1. Recognised Opportunity
            2. Authority To Proceed
            3. Technology
            4. Delivery Of Working Solution




Let’s not forget - we actually launched a working service. It works very well.

But unfortunately, it wasn’t successful in attracting a large user base ...
What We Would Change

           1. Marketing
           2. Pricing
           3. Project Management




The first thing we got wrong was our marketing. We got this badly wrong. We deliberately kept off
the radar until we had a working service. We hadn’t done a sprint like this before, so we weren’t
certain how long it would take us to build a launch service. By the time we wanted to tell the world
about our marvellous creation, the world was no longer interested. The news cycle had moved on,
and we had missed the boat. Those behind the news cycle, it turns out, have neither the time nor
the attention span to care about working services :)

In my mind, tweetSMS did exactly the right thing. They put up a ‘sign up now - coming soon’ page,
and they put it up very quickly. This got them coverage, and no doubt it allowed them to hoover up
many of the early adopters that Twittex was also aimed at.
What We Would Change

           1. Marketing
           2. Pricing
           3. Project Management




Boy, did we get this wrong too :) My initial pricing, at 10p a message, was designed to cover our
costs. That was a mistake. We had to drop our prices after the first day, once we realised that our
competitors were planning on launching services that were around the 5p a message mark.

Instead, I should have made the price as low as possible, and used pricing and our existing bulk
discount to gain the largest market share over our competitors.

As it turns out, the market for paid SMS messages from Twitter in the UK appears to be tiny. No-
one has made a killing on this at all. The wholesale price for SMS messages is just too expensive.
I’m extremely interested in making Twittex a free service supported by advertising. If there’s
anyone out there who’d be interested in making this possible, do get in touch :)
What We Would Change

           1. Marketing
           2. Pricing
           3. Project Management




I made some obvious mistakes with the project management too. The main one was that we only
started prototyping the web pages themselves three days into the work on the website. What I
should have done was had a bit more balls, and committed extra resources on the Thursday (before
we had approval to proceed) to create the prototypes up front.
Timeline #3:
                    A Better Timeline



If I could go back in time and do this project all over again, knowing what I know now, what would
be different?
Twitter would still have stopped sending SMS updates out on the 13th ...
... and TechCrunch would still have spread the word on the same day.
TweetSMS would still have been first to get the word out that they were launching a replacement
service.
But if I could do this all over again, we would have gotten the word out to anyone and everyone as
quickly as possible too. The earliest we could have done this would have been the 15th, after the
approval to proceed.
Would Zygo (and all the other competitors) have announced too, if we had made our intentions
known? That’s impossible to speculate on.
... but I can’t help but wonder whether we’d have ended up with a two horse race instead of an
eight-way finish.
Inside Gradwell, some things would stay the same. I’m very happy with how early we recognised
the opportunity.
Sketching out the architecture up front is a necessary step, and I don’t think we could have achieved
it any sooner than we did.
But one thing I would change would be to prototype the website up front too - even before having
approval to proceed.
I don’t think we could have made the project request any sooner. We needed to have confidence
that we could build the service first.
We got approval to proceed very quickly.
If we had had the prototypes up front, the website would have been built even quicker. We would
probably have taken a day out of the timeline.
We should have created the twitter test account up front, so that we could do a wider range of
testing during development. Whether or not this would have allowed us to launch earlier is hard to
say, but it would have perhaps reduced the amount of bug fixing we did post launch.
I’m very happy with how quickly we came up with a name and purchased the domain.
We should have paid more attention to the commercials up front. We should have had a clearer
idea about them, so that we got our launch pricing right first time.
I’m very happy with how quickly we had the logo done for the site.
Our integration with AQL was done very quickly, and I’m very happy with how that went.
I’m also extremely happy with how quickly we had working servers to deploy code onto. In the
past, I worked with organisations who rely on third parties such as Rackspace to provision new
servers. The lead times are often 20 working days or longer, because new hardware must be
provided.
We probably couldn’t have built the queue management code any quicker ...
... and we probably couldn’t have had the billing arrangements in place much quicker.
I’m happy with the time it took to get the server monitoring in place. This couldn’t have been done
earlier, as we needed to provision the servers first before hooking them up to our monitoring
system.
If we’d had the prototypes up front, the site would probably have been ready for internal testing a
day earlier.
... and we would have been able to launch the site at least one day earlier. Who knows? Just maybe
we might have been able to launch on the Monday :)
I doubt we would have been able to avoid being stuck in the traffic jam on the M5.
We would have been able to avoid having to reduce our prices, if we’d got the commercials right up
front.
I’m comfortable with having had to improve our log messages after the service had launched. I
think it made sense to focus on getting the customer-visible side of the service working first, and
then going back and polishing up things behind the scenes to reduce the support burden.
I’d like to think that our friends at PlusNet would still have mentioned us when they did.
Your Thoughts?



That’s what we think would have happened had we done a few things differently. What do you
think?

Thank you for viewing this presentation. I hope you’ve found it interesting and that you’ve learned
something from it. We certainly learned a lot from doing this project. If you have any questions or
feedback, please get in touch with me stuart.herbert@gradwell.net.

More Related Content

Viewers also liked

Faster PHP apps using Queues and Workers
Faster PHP apps using Queues and WorkersFaster PHP apps using Queues and Workers
Faster PHP apps using Queues and WorkersRichard Baker
 
More Than Websites: PHP And The Firehose @DataSift (2013)
More Than Websites: PHP And The Firehose @DataSift (2013)More Than Websites: PHP And The Firehose @DataSift (2013)
More Than Websites: PHP And The Firehose @DataSift (2013)Stuart Herbert
 

Viewers also liked (6)

Php 5 3 Adoption
Php 5 3 AdoptionPhp 5 3 Adoption
Php 5 3 Adoption
 
Storyplayer
StoryplayerStoryplayer
Storyplayer
 
Faster PHP apps using Queues and Workers
Faster PHP apps using Queues and WorkersFaster PHP apps using Queues and Workers
Faster PHP apps using Queues and Workers
 
More Than Websites: PHP And The Firehose @DataSift (2013)
More Than Websites: PHP And The Firehose @DataSift (2013)More Than Websites: PHP And The Firehose @DataSift (2013)
More Than Websites: PHP And The Firehose @DataSift (2013)
 
Aperture 3 workflow
Aperture 3 workflowAperture 3 workflow
Aperture 3 workflow
 
The Continuous PHP Pipeline
The Continuous PHP PipelineThe Continuous PHP Pipeline
The Continuous PHP Pipeline
 

Similar to Twittex - From Idea To Live in Seven Days

Twitter Ppt Presenation
Twitter Ppt PresenationTwitter Ppt Presenation
Twitter Ppt Presenationshane_aib
 
Twitter Q3 2015 Conference Call With Analysts of Cctober 27, 2015
Twitter Q3 2015 Conference Call With Analysts of Cctober 27, 2015Twitter Q3 2015 Conference Call With Analysts of Cctober 27, 2015
Twitter Q3 2015 Conference Call With Analysts of Cctober 27, 2015Tommy Toy
 
Intergen Smarts 24 (2010)
Intergen Smarts 24 (2010)Intergen Smarts 24 (2010)
Intergen Smarts 24 (2010)Intergen
 
Twitter new updates 2022.
Twitter new updates 2022.Twitter new updates 2022.
Twitter new updates 2022.KailashDaya
 
Threads twitter Difference- How far mark-musk war will last
Threads twitter Difference- How far mark-musk war will lastThreads twitter Difference- How far mark-musk war will last
Threads twitter Difference- How far mark-musk war will lastdeorwine infotech
 
Twitter For Marketing
Twitter For MarketingTwitter For Marketing
Twitter For MarketingVino Thomas
 
Pioneering Chat Bots, Intelligent Agents and AI Interactions on the Web
Pioneering Chat Bots, Intelligent Agents and AI Interactions on the WebPioneering Chat Bots, Intelligent Agents and AI Interactions on the Web
Pioneering Chat Bots, Intelligent Agents and AI Interactions on the WebFlorin Muresan
 
Intro Course Online Sales & Marketing - Part2
Intro Course Online Sales & Marketing - Part2Intro Course Online Sales & Marketing - Part2
Intro Course Online Sales & Marketing - Part2rregter
 
Kopi time with Taimur Baig podcast E41
Kopi time with Taimur Baig podcast E41Kopi time with Taimur Baig podcast E41
Kopi time with Taimur Baig podcast E41Varun Mittal
 
Twitter For Marketers - Mojave Interactive
Twitter For Marketers - Mojave InteractiveTwitter For Marketers - Mojave Interactive
Twitter For Marketers - Mojave InteractiveMojave
 
CloudChannel – Behind the Front
CloudChannel – Behind the FrontCloudChannel – Behind the Front
CloudChannel – Behind the FrontDominic Hawes
 
Ketchum ISG Twitter 101
Ketchum ISG Twitter 101Ketchum ISG Twitter 101
Ketchum ISG Twitter 101KetchumISG
 
Business online tools
Business online toolsBusiness online tools
Business online toolschiragaegis
 
Intergen Smarts 20 (2009)
Intergen Smarts 20 (2009)Intergen Smarts 20 (2009)
Intergen Smarts 20 (2009)Intergen
 
London Twitter Developer community meet up - Sept 2016
London Twitter Developer community meet up - Sept 2016London Twitter Developer community meet up - Sept 2016
London Twitter Developer community meet up - Sept 2016Angus Fox
 

Similar to Twittex - From Idea To Live in Seven Days (20)

Twitter Ppt Presenation
Twitter Ppt PresenationTwitter Ppt Presenation
Twitter Ppt Presenation
 
Twitter Q3 2015 Conference Call With Analysts of Cctober 27, 2015
Twitter Q3 2015 Conference Call With Analysts of Cctober 27, 2015Twitter Q3 2015 Conference Call With Analysts of Cctober 27, 2015
Twitter Q3 2015 Conference Call With Analysts of Cctober 27, 2015
 
Intergen Smarts 24 (2010)
Intergen Smarts 24 (2010)Intergen Smarts 24 (2010)
Intergen Smarts 24 (2010)
 
Twitter new updates 2022.
Twitter new updates 2022.Twitter new updates 2022.
Twitter new updates 2022.
 
Threads twitter Difference- How far mark-musk war will last
Threads twitter Difference- How far mark-musk war will lastThreads twitter Difference- How far mark-musk war will last
Threads twitter Difference- How far mark-musk war will last
 
Twitter Success guide
Twitter Success guideTwitter Success guide
Twitter Success guide
 
082508 Kzero Metanomics Transcript
082508 Kzero Metanomics Transcript082508 Kzero Metanomics Transcript
082508 Kzero Metanomics Transcript
 
Twitter For Marketing
Twitter For MarketingTwitter For Marketing
Twitter For Marketing
 
Pioneering Chat Bots, Intelligent Agents and AI Interactions on the Web
Pioneering Chat Bots, Intelligent Agents and AI Interactions on the WebPioneering Chat Bots, Intelligent Agents and AI Interactions on the Web
Pioneering Chat Bots, Intelligent Agents and AI Interactions on the Web
 
Jordan Kay's Twitter API tour
Jordan Kay's Twitter API tourJordan Kay's Twitter API tour
Jordan Kay's Twitter API tour
 
Intro Course Online Sales & Marketing - Part2
Intro Course Online Sales & Marketing - Part2Intro Course Online Sales & Marketing - Part2
Intro Course Online Sales & Marketing - Part2
 
Telomiova Friday Talk Club
Telomiova Friday Talk ClubTelomiova Friday Talk Club
Telomiova Friday Talk Club
 
Kopi time with Taimur Baig podcast E41
Kopi time with Taimur Baig podcast E41Kopi time with Taimur Baig podcast E41
Kopi time with Taimur Baig podcast E41
 
Twitter For Marketers - Mojave Interactive
Twitter For Marketers - Mojave InteractiveTwitter For Marketers - Mojave Interactive
Twitter For Marketers - Mojave Interactive
 
CloudChannel – Behind the Front
CloudChannel – Behind the FrontCloudChannel – Behind the Front
CloudChannel – Behind the Front
 
Ketchum ISG Twitter 101
Ketchum ISG Twitter 101Ketchum ISG Twitter 101
Ketchum ISG Twitter 101
 
Business online tools
Business online toolsBusiness online tools
Business online tools
 
CTO Straight Talk Issue 1
CTO Straight Talk Issue 1CTO Straight Talk Issue 1
CTO Straight Talk Issue 1
 
Intergen Smarts 20 (2009)
Intergen Smarts 20 (2009)Intergen Smarts 20 (2009)
Intergen Smarts 20 (2009)
 
London Twitter Developer community meet up - Sept 2016
London Twitter Developer community meet up - Sept 2016London Twitter Developer community meet up - Sept 2016
London Twitter Developer community meet up - Sept 2016
 

Recently uploaded

BAILMENT & PLEDGE business law notes.pptx
BAILMENT & PLEDGE business law notes.pptxBAILMENT & PLEDGE business law notes.pptx
BAILMENT & PLEDGE business law notes.pptxran17april2001
 
Cybersecurity Awareness Training Presentation v2024.03
Cybersecurity Awareness Training Presentation v2024.03Cybersecurity Awareness Training Presentation v2024.03
Cybersecurity Awareness Training Presentation v2024.03DallasHaselhorst
 
business environment micro environment macro environment.pptx
business environment micro environment macro environment.pptxbusiness environment micro environment macro environment.pptx
business environment micro environment macro environment.pptxShruti Mittal
 
The-Ethical-issues-ghhhhhhhhjof-Byjus.pptx
The-Ethical-issues-ghhhhhhhhjof-Byjus.pptxThe-Ethical-issues-ghhhhhhhhjof-Byjus.pptx
The-Ethical-issues-ghhhhhhhhjof-Byjus.pptxmbikashkanyari
 
20200128 Ethical by Design - Whitepaper.pdf
20200128 Ethical by Design - Whitepaper.pdf20200128 Ethical by Design - Whitepaper.pdf
20200128 Ethical by Design - Whitepaper.pdfChris Skinner
 
NAB Show Exhibitor List 2024 - Exhibitors Data
NAB Show Exhibitor List 2024 - Exhibitors DataNAB Show Exhibitor List 2024 - Exhibitors Data
NAB Show Exhibitor List 2024 - Exhibitors DataExhibitors Data
 
Traction part 2 - EOS Model JAX Bridges.
Traction part 2 - EOS Model JAX Bridges.Traction part 2 - EOS Model JAX Bridges.
Traction part 2 - EOS Model JAX Bridges.Anamaria Contreras
 
Driving Business Impact for PMs with Jon Harmer
Driving Business Impact for PMs with Jon HarmerDriving Business Impact for PMs with Jon Harmer
Driving Business Impact for PMs with Jon HarmerAggregage
 
Guide Complete Set of Residential Architectural Drawings PDF
Guide Complete Set of Residential Architectural Drawings PDFGuide Complete Set of Residential Architectural Drawings PDF
Guide Complete Set of Residential Architectural Drawings PDFChandresh Chudasama
 
Fordham -How effective decision-making is within the IT department - Analysis...
Fordham -How effective decision-making is within the IT department - Analysis...Fordham -How effective decision-making is within the IT department - Analysis...
Fordham -How effective decision-making is within the IT department - Analysis...Peter Ward
 
APRIL2024_UKRAINE_xml_0000000000000 .pdf
APRIL2024_UKRAINE_xml_0000000000000 .pdfAPRIL2024_UKRAINE_xml_0000000000000 .pdf
APRIL2024_UKRAINE_xml_0000000000000 .pdfRbc Rbcua
 
The McKinsey 7S Framework: A Holistic Approach to Harmonizing All Parts of th...
The McKinsey 7S Framework: A Holistic Approach to Harmonizing All Parts of th...The McKinsey 7S Framework: A Holistic Approach to Harmonizing All Parts of th...
The McKinsey 7S Framework: A Holistic Approach to Harmonizing All Parts of th...Operational Excellence Consulting
 
Introducing the Analogic framework for business planning applications
Introducing the Analogic framework for business planning applicationsIntroducing the Analogic framework for business planning applications
Introducing the Analogic framework for business planning applicationsKnowledgeSeed
 
Planetary and Vedic Yagyas Bring Positive Impacts in Life
Planetary and Vedic Yagyas Bring Positive Impacts in LifePlanetary and Vedic Yagyas Bring Positive Impacts in Life
Planetary and Vedic Yagyas Bring Positive Impacts in LifeBhavana Pujan Kendra
 
20220816-EthicsGrade_Scorecard-JP_Morgan_Chase-Q2-63_57.pdf
20220816-EthicsGrade_Scorecard-JP_Morgan_Chase-Q2-63_57.pdf20220816-EthicsGrade_Scorecard-JP_Morgan_Chase-Q2-63_57.pdf
20220816-EthicsGrade_Scorecard-JP_Morgan_Chase-Q2-63_57.pdfChris Skinner
 
WSMM Media and Entertainment Feb_March_Final.pdf
WSMM Media and Entertainment Feb_March_Final.pdfWSMM Media and Entertainment Feb_March_Final.pdf
WSMM Media and Entertainment Feb_March_Final.pdfJamesConcepcion7
 
Welding Electrode Making Machine By Deccan Dynamics
Welding Electrode Making Machine By Deccan DynamicsWelding Electrode Making Machine By Deccan Dynamics
Welding Electrode Making Machine By Deccan DynamicsIndiaMART InterMESH Limited
 
PSCC - Capability Statement Presentation
PSCC - Capability Statement PresentationPSCC - Capability Statement Presentation
PSCC - Capability Statement PresentationAnamaria Contreras
 
Go for Rakhi Bazaar and Pick the Latest Bhaiya Bhabhi Rakhi.pptx
Go for Rakhi Bazaar and Pick the Latest Bhaiya Bhabhi Rakhi.pptxGo for Rakhi Bazaar and Pick the Latest Bhaiya Bhabhi Rakhi.pptx
Go for Rakhi Bazaar and Pick the Latest Bhaiya Bhabhi Rakhi.pptxRakhi Bazaar
 
Jewish Resources in the Family Resource Centre
Jewish Resources in the Family Resource CentreJewish Resources in the Family Resource Centre
Jewish Resources in the Family Resource CentreNZSG
 

Recently uploaded (20)

BAILMENT & PLEDGE business law notes.pptx
BAILMENT & PLEDGE business law notes.pptxBAILMENT & PLEDGE business law notes.pptx
BAILMENT & PLEDGE business law notes.pptx
 
Cybersecurity Awareness Training Presentation v2024.03
Cybersecurity Awareness Training Presentation v2024.03Cybersecurity Awareness Training Presentation v2024.03
Cybersecurity Awareness Training Presentation v2024.03
 
business environment micro environment macro environment.pptx
business environment micro environment macro environment.pptxbusiness environment micro environment macro environment.pptx
business environment micro environment macro environment.pptx
 
The-Ethical-issues-ghhhhhhhhjof-Byjus.pptx
The-Ethical-issues-ghhhhhhhhjof-Byjus.pptxThe-Ethical-issues-ghhhhhhhhjof-Byjus.pptx
The-Ethical-issues-ghhhhhhhhjof-Byjus.pptx
 
20200128 Ethical by Design - Whitepaper.pdf
20200128 Ethical by Design - Whitepaper.pdf20200128 Ethical by Design - Whitepaper.pdf
20200128 Ethical by Design - Whitepaper.pdf
 
NAB Show Exhibitor List 2024 - Exhibitors Data
NAB Show Exhibitor List 2024 - Exhibitors DataNAB Show Exhibitor List 2024 - Exhibitors Data
NAB Show Exhibitor List 2024 - Exhibitors Data
 
Traction part 2 - EOS Model JAX Bridges.
Traction part 2 - EOS Model JAX Bridges.Traction part 2 - EOS Model JAX Bridges.
Traction part 2 - EOS Model JAX Bridges.
 
Driving Business Impact for PMs with Jon Harmer
Driving Business Impact for PMs with Jon HarmerDriving Business Impact for PMs with Jon Harmer
Driving Business Impact for PMs with Jon Harmer
 
Guide Complete Set of Residential Architectural Drawings PDF
Guide Complete Set of Residential Architectural Drawings PDFGuide Complete Set of Residential Architectural Drawings PDF
Guide Complete Set of Residential Architectural Drawings PDF
 
Fordham -How effective decision-making is within the IT department - Analysis...
Fordham -How effective decision-making is within the IT department - Analysis...Fordham -How effective decision-making is within the IT department - Analysis...
Fordham -How effective decision-making is within the IT department - Analysis...
 
APRIL2024_UKRAINE_xml_0000000000000 .pdf
APRIL2024_UKRAINE_xml_0000000000000 .pdfAPRIL2024_UKRAINE_xml_0000000000000 .pdf
APRIL2024_UKRAINE_xml_0000000000000 .pdf
 
The McKinsey 7S Framework: A Holistic Approach to Harmonizing All Parts of th...
The McKinsey 7S Framework: A Holistic Approach to Harmonizing All Parts of th...The McKinsey 7S Framework: A Holistic Approach to Harmonizing All Parts of th...
The McKinsey 7S Framework: A Holistic Approach to Harmonizing All Parts of th...
 
Introducing the Analogic framework for business planning applications
Introducing the Analogic framework for business planning applicationsIntroducing the Analogic framework for business planning applications
Introducing the Analogic framework for business planning applications
 
Planetary and Vedic Yagyas Bring Positive Impacts in Life
Planetary and Vedic Yagyas Bring Positive Impacts in LifePlanetary and Vedic Yagyas Bring Positive Impacts in Life
Planetary and Vedic Yagyas Bring Positive Impacts in Life
 
20220816-EthicsGrade_Scorecard-JP_Morgan_Chase-Q2-63_57.pdf
20220816-EthicsGrade_Scorecard-JP_Morgan_Chase-Q2-63_57.pdf20220816-EthicsGrade_Scorecard-JP_Morgan_Chase-Q2-63_57.pdf
20220816-EthicsGrade_Scorecard-JP_Morgan_Chase-Q2-63_57.pdf
 
WSMM Media and Entertainment Feb_March_Final.pdf
WSMM Media and Entertainment Feb_March_Final.pdfWSMM Media and Entertainment Feb_March_Final.pdf
WSMM Media and Entertainment Feb_March_Final.pdf
 
Welding Electrode Making Machine By Deccan Dynamics
Welding Electrode Making Machine By Deccan DynamicsWelding Electrode Making Machine By Deccan Dynamics
Welding Electrode Making Machine By Deccan Dynamics
 
PSCC - Capability Statement Presentation
PSCC - Capability Statement PresentationPSCC - Capability Statement Presentation
PSCC - Capability Statement Presentation
 
Go for Rakhi Bazaar and Pick the Latest Bhaiya Bhabhi Rakhi.pptx
Go for Rakhi Bazaar and Pick the Latest Bhaiya Bhabhi Rakhi.pptxGo for Rakhi Bazaar and Pick the Latest Bhaiya Bhabhi Rakhi.pptx
Go for Rakhi Bazaar and Pick the Latest Bhaiya Bhabhi Rakhi.pptx
 
Jewish Resources in the Family Resource Centre
Jewish Resources in the Family Resource CentreJewish Resources in the Family Resource Centre
Jewish Resources in the Family Resource Centre
 

Twittex - From Idea To Live in Seven Days

  • 1. Twittex: From Idea To Live in 7 Days Stuart Herbert Technical Manager www.gradwell.com stuart.herbert@gradwell.net stuart@stuartherbert.com Welcome to my talk for the PHPNW 08 conference.
  • 2. Let me introduce myself. My name is Stuart Herbert. You have probably come across my blog, which is syndicated on Planet PHP.
  • 3. I’ve been a professional software engineer since 1994, and I’ve been working almost exclusively on web-based projects since 1993. My career has given me the opportunity to gain a lot of real-world experience with UK household names over the years, and I’ve also been an active contributor to open-source software since the early 1990’s.
  • 4. I am currently the Technical Manager for Gradwell, a role I started in April 2008. We are what is fashionably called a Unified Communications company. We do premium quality broadband, email, hosting, and Voice-over-IP (VoIP). VoIP is the majority of our business in 2008, and we are the UK’s third largest VoIP provider, with an annual turnover in excess of two million GBP. Celebrating our 10th anniversary this year, the company was founded, and is run by Peter Gradwell, who has been very active in the UK internet scene for the past decade.
  • 5. One of the services we offer, and the subject of this talk, is Twittex (http://twittex.com). Twittex allows you to receive SMS messages from your Twitter feed.
  • 6. All you have to do is to register your twitter account and your mobile phone with Twittex.
  • 7. Decide which friends you want to watch, and when they post a status update to Twitter, you will receive an SMS containing their status update. Twittex is a very simple, and very straight forward service.
  • 8. Twittex.com Team Twittex was built from scratch in a seven day sprint by a team from Gradwell. From left to right, back row: me (project management, queue servers, queue management, provisioning), Ben Cole (Twittex.com website), Daniel Leech (Gradwell symfony components), Matt Park (Twittex logo). From left to right, front row: Ben Smithurst (SMS integration), Paul Thomas (server provisioning, server monitoring), Tim Douglas (Twittex.com website).
  • 9. Objectives 1. How We Built Twittex In Just Seven Days 2. What We Got Wrong 3. What We’d Do Differently Next Time In this talk, I want to share with you our experience of building Twittex.com. I’ll start off by explaining the key factors that allowed us to build this service from scratch in just seven days.
  • 10. Objectives 1. How We Built Twittex In Just Seven Days 2. What We Got Wrong 3. What We’d Do Differently Next Time Although we think it was a great achievement to build Twittex in just seven days, with hindsight we made a few mistakes along the way. Some of them were obvious, and should have been avoidable, but not all of them were, and I’d like to share those with you too.
  • 11. Objectives 1. How We Built Twittex In Just Seven Days 2. What We Got Wrong 3. What We’d Do Differently Next Time Finally, if we could go back in time and do it all over again, what would we change?
  • 12. Questions Welcome! Please feel free to ask any questions you have at any point during the talk. There will also be time at the end of the talk for questions.
  • 13. Background 1. Introducing Twitter 2. Twitter and SMS 3. The Opportunity 4. The Competition Not everyone has heard of Twitter - surprising as that seems - so let’s start by introducing Twitter and explaining what it does.
  • 14. Twitter is a microblogging service hosted at http://twitter.com. Anyone can signup for free.
  • 15. Once you’ve logged in, you can post short messages to the Twitter website (known as the public timeline). It’s a great way to broadcast to the world what you are currently up to.
  • 16. Each user on twitter gets their own “feed” - a list of messages from people that you choose to follow. Here’s a screenshot from my Twitter feed. Your feed is also available via the Twitter API.
  • 17. As well as keeping in touch with your friends without having to keep up with the latest blog posts, Twitter is also proving to be very useful for creating online communities. One example can be found on the PHPNW 08 conference website, where all posts tagged with #phpnw automatically appear in the right sidebar.
  • 18. Background 1. Introducing Twitter 2. Twitter and SMS 3. The Opportunity 4. The Competition So that’s what Twitter is. But where does SMS come into it?
  • 19. Twitter allows you to register your mobile phone in the Devices tab.
  • 20. Once you have registered a device, you simply navigate to a Twitter user that you’re following, and click where it says “Device Updates OFF”. Twitter will then send you an SMS every time that Twitter user posts a status update. And, best of all, these SMS messages are free.
  • 21. Once you have registered a device, you simply navigate to a Twitter user that you’re following, and click where it says “Device Updates OFF”. Twitter will then send you an SMS every time that Twitter user posts a status update. And, best of all, these SMS messages are free.
  • 22. This is a great service, and at Gradwell we’ve recently integrated it into our customer information feeds. Our customers have long been keen on getting SMS alerts about service-related problems, so we decided to achieve this by publishing our status information through Twitter.
  • 23. Background 1. Introducing Twitter 2. Twitter and SMS 3. The Opportunity 4. The Competition A couple of weeks after we’d relaunched our GradwellStatus service, Twitter made some changes to their service. These changes left us with a bit of a problem, but also with an opportunity to launch a new service of our own.
  • 24. On Wed 13th August, Twitter decided that it could no longer afford to provide free SMS alerts for several countries, including the UK where Gradwell operates. If memory services, I believe these SMS alerts were costing Twitter 1,000 USD per Twitter user per year. That’s a lot of money for a firm with no revenue model!
  • 25. The story was quickly picked up by TechCrunch (if you work on the web, and you don’t read TechCrunch, you should), and from there spread like wildfire around the ’net.
  • 26. Background 1. Introducing Twitter 2. Twitter and SMS 3. The Opportunity 4. The Competition Twitter’s withdrawal of free SMS alerts suddenly created a new market, one that possibly had real potential. Gradwell wasn’t the only company to recognise this by any means.
  • 27. First to decide that they were going to launch a service was tweetSMS. They got the word out very quickly and very successfully.
  • 28. tweetSMS was quickly followed by Zygo, which is run by former colleagues of mine from the old New Media department at Orange.
  • 29. By 22nd of August - just nine days after Twitter withdrew their service - no less than eight rival services were competing in this new market. That’s a lot of competition!
  • 30. We Can Do Better! (Or Have Fun Trying :) At Gradwell, we decided that we wanted to compete in this market too. As we were the only telco launching a service (all our competitors are new media companies), we believed that we could provide a better service. And even if we failed, it would be a lot of fun to try, and it would also be a great way for me to learn a lot about my staff.
  • 31. Timeline #1: Actual Events Let’s start by looking at a timeline of what actually happened, and when. This timeline was compiled using BeeDocs, and at the PHPNW 08 conference, it was presented as an animated timeline.
  • 32. I’ve split the timeline up into two streams. Along the top is what was happening out on the web, and we start with Twitter withdrawing their SMS service on the 13th August.
  • 33. TechCrunch picked up the story on the same day, and began to spread the word far and wide.
  • 34. On the very next day, TweetSMS announced their plans on Mashable (another website you should add to your Google Reader feed if you don’t have it already).
  • 35. Zygo announced their service on the following day ...
  • 36. ... by the 22nd of August, there were eight competing services analysed by the OnlineJournalismBlog.
  • 37. The second stream in the timeline looks at what we did at Gradwell. Our story starts on the 14th of August, when I came across the TechCrunch story in my Google Reader lists. I immediately thought that we could plug the gap created by Twitter, and that it was something we should do.
  • 38. By the middle of the afternoon, Ben Smithurst and I had sketched out the architecture we wanted to build for the service, and felt confident with our underlying design.
  • 39. By 7pm on the 14th, I phoned Peter up, and left him a voice mail asking for his approval to build what would become Twittex.
  • 40. As Peter was camping out in the wilds of Scotland, we had to wait until he drove to the nearest town for some milk before he had a phone signal. This didn’t happen until the following morning.
  • 41. With approval secured, we settled down to getting on with the work. Ben Cole immediately set to work on building the website.
  • 42. We spent a few hours coming up with a name for the service, finally settling on twittex. As soon as I approved the name, we registered the domain to make sure no-one else came up with the same name :)
  • 43. Shortly after, we had ourselves a logo. Although Gradwell doesn’t have a graphic designer in- house, we’re very lucky that one of our staff can turn his hand to this sort of work, and that he was very happy to make the time to do so. How long would it take you to get a new logo for a service that you wanted to launch? Days? Weeks? Longer? In a show of hands at the PHPNW 08 conference, many of the audience said that it would take weeks or longer to get a logo designed.
  • 44. We carried on working into the evening, and by 7pm we had the ability to send SMS messages out to mobile phones.
  • 45. By 9:30pm, we’d finished provisioning the servers to run the queues on (more on the queues later on), and had finished compiling and installing MySQL onto the servers. So to recap: on the Wednesday, Twittex announced that it was withdrawing the SMS service. By the end of the Friday, we had our servers, our domain, our logo, and the ability to send out SMS messages.
  • 46. The team continued to work throughout the weekend. Whilst work was continuing on the web site, we spent Saturday and Sunday writing the queue management code.
  • 47. We also sorted out billing and payments on the Saturday.
  • 48. On Sunday, we adopted the 960 grid system by Nathan Smith, and began using it to prototype the user-visible parts of the website.
  • 49. On the Monday morning, whilst work on the website was continuing, we put the server monitoring in place.
  • 50. And, on the Tuesday, we’d finished the website, and opened it up to staff for internal testing. We were kept very busy finding and fixing corner cases in our code that day!
  • 51. With all the obvious bugs squashed, on the Wednesday, we were ready to launch. We contacted TechCrunch to announce our service ...
  • 52. ... we also contacted Twitter’s own PR people ...
  • 53. ... but heard nothing back from them at all. At the same time, we sorted out an introductory offer price ...
  • 54. ... and put the service live.
  • 55. Shortly after, Ben and I had to jump in the car and drive up from Bath to Sheffield for an important meeting the following day. Unfortunately, there was a serious accident which closed the M5 for four hours, giving us plenty of time to do even more bug fixing whilst we waited for the road to re- open. Laptops and mobile broadband are essential tools for any developer who travels!
  • 56. So, we launched our service just 7 days after Twitter announced they had withdrawn theirs, and what’s more we were the first folks to have a working service live. Were we swamped by demand? No. One of the reasons was that our initial pricing was badly wrong. We had to reduce our pricing from 10p per SMS message to 5p per SMS message, and we had to do it quickly.
  • 57. With our meeting in Sheffield out the way, we headed our separate ways (Ben back up north, me back to South Wales), doing more bug fixing on the way. We improved the log messages that Twittex writes, to help us diagnose problems quicker.
  • 58. We also created a new Twitter account just for testing twittex with. Up til now, we’d all be using our personal Twitter accounts, which put a bit of a limit on the type of test messages we wanted to send.
  • 59. Our friends at PlusNet kindly mentioned us on their blog - our very first bit of publicity!
  • 60. As we still hadn’t heard anything from TechCrunch or Twitter at all, and hadn’t been mentioned by them either, we decided to widen the net by contacting The Register and Mashable. Sadly, neither website wrote anything about us :(
  • 61. On the following Monday, Jemima Kiss wrote a piece for the Guardian’s website about Twitter and SMS messages. We dropped her a quick email about our service. Jemima was kind enough to write back - the only one who did out of all the organisations we contacted - letting us know that we’d basically missed the boat. By keeping below the radar until we had a service to launch, we’d completely missed the news cycle.
  • 62. But Twittex Really Started Months Ago! So that’s how we built Twittex in just seven days. Except - it’s not the whole story. Work on Twittex had actually started *years* before.
  • 63. Huh? Years before? What do I mean by that?
  • 64. Twitter.com Twittex.com Netsuite Gradwell SecPay Let’s start by looking at the architecture for Twittex.com. We have the Twittex.com website, built in just seven days.
  • 65. Twitter.com Twittex.com Netsuite Gradwell SecPay It pulls feeds down from Twitter ...
  • 66. Twitter.com Twittex.com Netsuite Gradwell SecPay ... and then re-uses Gradwell’s existing telco infrastructure.
  • 67. Twitter.com Twittex.com Netsuite Gradwell SecPay An important part of this infrastructure is our ERP/CRM system, Netsuite. As a company with a multi-million pound turnover, Gradwell has to produce audited accounts every year. A company of our size simply cannot create a new service, hook it up to a PayPal shopping cart, and leave it at that.
  • 68. Twitter.com Twittex.com Netsuite Gradwell SecPay For payments, we use SecPay, because it’s the only payment gateway in the UK that’s certified to work with Netsuite at this time.
  • 69. Software Software Load-balancers Load-balancers PHP Servers MySQL Server PHP Servers Queue Servers PHP Servers That’s the architecture for Twittex. If we look inside the Twittex.com box, we’ll find a pair of PHP servers.
  • 70. Software Software Load-balancers Load-balancers PHP Servers MySQL Server PHP Servers Queue Servers PHP Servers These servers sit behind a pair of load-balancers.
  • 71. Software Software Load-balancers Load-balancers PHP Servers MySQL Server PHP Servers Queue Servers PHP Servers Twittex uses MySQL to hold subscriber information.
  • 72. Software Software Load-balancers Load-balancers PHP Servers MySQL Server PHP Servers Queue Servers PHP Servers And finally we have a set of queue servers which manage the job of polling Twitter for new messages.
  • 73. At the heart of our infrastructure is VMWare ESX, which we adopted late 2007. ESX gives Gradwell the ability to provision new servers extremely quickly. We don’t have to wait for new hardware to arrive, and we don’t have to have someone physically installing kit into racks in a data centre.
  • 74. We’ve been using symfony for over a year now as our framework of choice. We chose symfony because we felt it had a more responsive and more supportive community that its competitors.
  • 75. As I mentioned, we use MySQL for our databases. I can’t imagine there’s anyone reading this who hasn’t heard of MySQL, but I’ve included it for completeness :)
  • 76. We adopted the 960 grid system for our prototyping, and our live Twittex.com site also uses 960 gs. If you haven’t come across it before, check it out. We found it extremely useful. Using pure CSS, you can create pages that are 960 pixels wide, cut up into 12 or 16 columns. These columns can then be merged to form the final layout. The only change we’d love to see Nathan make to his system would be to add a 20 column version, to allow for even more precise layouts.
  • 77. For the queues, we used the Q4M storage engine for MySQL 5.1.
  • 78. Q4M allows you to create first-in, first-out queues that can be accessed via SQL SELECT statements. The really nice thing about using Q4M is that our own code doesn’t have to handle any sort of locking at all. We can have multiple processes emptying the queues, and Q4M ensures that any one piece of data from the queues isn’t presented to more than one of these processes. I came across Q4M when it was selected for the architecture of a Japanese rival to Twitter.
  • 79. Why Queues? But why use queues at all? Let’s take a look at that.
  • 80. Twittex User 1 Min Queue 2 Min Queue Twitter Message :) 3 Min Queue 4 Min Queue No Twitter Message :( 5 Min Queue We start off with an individual Twittex user.
  • 81. 1 Min Queue 2 Min Queue Twitter Message :) 3 Min Queue 4 Min Queue No Twitter Message :( 5 Min Queue We put the data about this user into a queue. We check all data in this queue every minute.
  • 82. 1 Min Queue 2 Min Queue Twitter Message :) 3 Min Queue 4 Min Queue No Twitter Message :( 5 Min Queue Eventually, our Twittex user makes it to the front of the queue.
  • 83. 1 Min Queue 2 Min Queue Twitter Message :) 3 Min Queue 4 Min Queue No Twitter Message :( 5 Min Queue We go and check Twitter, to see if there any new messages for this user. If there are new messages ...
  • 84. SMS Sent 1 Min Queue 2 Min Queue Twitter Message :) 3 Min Queue 4 Min Queue No Twitter Message :( 5 Min Queue ... we send out the messages as SMS’s, and put the user’s record back onto the end of the queue.
  • 85. 1 Min Queue 2 Min Queue Twitter Message :) 3 Min Queue 4 Min Queue No Twitter Message :( 5 Min Queue Eventually, the user once again makes it to the front of the queue.
  • 86. 1 Min Queue 2 Min Queue Twitter Message :) 3 Min Queue 4 Min Queue No Twitter Message :( 5 Min Queue What happens where there are no new Twitter messages? Well, we won’t want to poll Twitter every minute for every user. That’s a lot of wasted effort.
  • 87. 1 Min Queue 2 Min Queue Twitter Message :) 3 Min Queue 4 Min Queue No Twitter Message :( 5 Min Queue Instead, we have additional queues, which are checked less and less frequently.
  • 88. 1 Min Queue 2 Min Queue Twitter Message :) 3 Min Queue 4 Min Queue No Twitter Message :( 5 Min Queue The user’s record works its way through these queues, until eventually it hits our 5 minute queue.
  • 89. 1 Min Queue 2 Min Queue Twitter Message :) 3 Min Queue 4 Min Queue No Twitter Message :( 5 Min Queue If there are still no Twitter messages for the user, the user’s record stays in the five minute queue. We used to have 10 minute and 15 minute queues too, but during internal testing we decided that they made for a poor user experience.
  • 90. 1 Min Queue 2 Min Queue Twitter Message :) 3 Min Queue 4 Min Queue No Twitter Message :( 5 Min Queue If there are any messages for the user on Twitter ...
  • 91. 1 Min Queue 2 Min Queue Twitter Message :) 3 Min Queue 4 Min Queue No Twitter Message :( 5 Min Queue ... we move them straight back into the 1 minute queue. This makes Twittex very responsive if you strike up a conversation through Twitter. The user’s record will then work its way back down the queues as before until there’s another message on Twitter for the user.
  • 92. Timeline #2: Groundwork Our architecture and our infrastructure re-uses technology that we adapted long before we had the idea to create Twittex. Without this re-use, we could not have built Twittex in just 7 days.
  • 93. Here’s another timeline, this time looking at all the things we did in the past that made Twittex possible.
  • 94. We’ve been using AQL for sending and receiving SMS messages since at least October 2003. AQL provide a very easy to use RESTful API, and we’ve had a lot of practice with it over the years. Do excuse this rant, but if you’re going to build an API for any sort of service, do make it RESTful. SOAP APIs should never be the only API you offer. For a start, PHP’s SOAP client is a toy, and currently does not implement enough of the SOAP standard to make it inter-operate with real enterprise SOAP APIs. Secondly, too many SOAP API authors need to learn that WSDL is not documentation - it is specification. And finally, SOAP APIs also suffer from poor design, because they focus on exposing objects rather than business services. So, please please please, stick with simple but effective RESTful APIs :)
  • 95. We adopted Netsuite for ERP and billing in May 2007. As a company, we already have an established platform to handle new products, and the financial accounting that goes with them.
  • 96. We’ve been using symfony since June 2007, and in that time we’ve built many re-usable components for it. We’re also very lucky that we have an internal champion for symfony, who not only advocates for its use but also that it’s used in the proper manner. This keeps our code lean, clean, and very easy to reuse.
  • 97. We made ESX our main platform earlier this year. ESX gives us flexibility that we couldn’t afford if we were still working solely with physical hardware. How would you launch a new service in just 7 days if you had to wait for new hardware to be delivered first?
  • 98. The Twitter APIs are very easy to use, being REST based, but nonetheless we’d already had experience working with them. We’d used them in July to integrate our GradwellStatus.com website with Twitter.
  • 99. Twittex was the first time we’d used Q4M at Gradwell, but it wasn’t something we had to go out and find on the day. A big part of my job as Technical Manager (CTO/CIO in US language) is to have a wide knowledge of what’s available in the open source community and beyond just in case we ever have a need to introduce something new to our established technology stack. I rely heavily on Google Reader to help me keep on top of hundreds of RSS feeds from around the net, as well as attending conferences, trade shows, and talking to my peers.
  • 100. What Made It Possible 1. We Were Prepared 2. We Were Up For It 3. An Extension Of What We Already Do So, to recap the elements that made Twittex possible. First and most importantly, we were well prepared. We have been consistent over the years in adopting technology that is simple to use and that gives us increased flexibility.
  • 101. What Made It Possible 1. We Were Prepared 2. We Were Up For It 3. An Extension Of What We Already Do It had already been an extremely hectic week, but with no prior notice, my team willingly gave up their evenings and the weekend to work on this project. Do you think we would have been able to build this with a 9-5 mentality? We would have been too late to market, and the project would probably have failed, because we would not have managed to maintain the momentum in the first place. In questions after the talk, I was asked why my guys were up for it. I think it comes down to two key things: they thought it was an interesting project to do, and to them programming isn’t a job, it’s a vocation. It’s what they love to do.
  • 102. What Made It Possible 1. We Were Prepared 2. We Were Up For It 3. An Extension Of What We Already Do Finally, we believe that a critical factor was the nature of the work. Gradwell is an established and successful telco, and is already used to handling this sort of messaging. We’re not a New Media company suddenly trying to get our head around a different paradigm. This is stuff we know how to do, so we can just get on and do it.
  • 103. What We Got Right 1. Recognised Opportunity 2. Authority To Proceed 3. Technology 4. Delivery Of Working Solution What did we get right? First of all, we very quickly recognised that there was an opportunity to be tackled. We needed to do something, because we had been relying on Twitter for SMS updates to our customers. We didn’t um and ah about it, we got our heads down straight away on solving the problem.
  • 104. What We Got Right 1. Recognised Opportunity 2. Authority To Proceed 3. Technology 4. Delivery Of Working Solution Despite the amusing story of how long it took to reach Peter for approval, I’m actually very pleased about how quickly we had authority to proceed with the project. We had the green light just 24 hours after coming up with the idea. In my own experience, most companies are utterly crap at making decisive decisions, especially in such a short period of time. The feedback I had after the talk was that many companies couldn’t make decisions this quickly.
  • 105. What We Got Right 1. Recognised Opportunity 2. Authority To Proceed 3. Technology 4. Delivery Of Working Solution I’m very happy indeed with our choice of technology. From ESX through to Q4M, from symfony through to the 960 grid system, everything we used made the job much easier - not much harder. At no point were we having to fight with the technology. We were able to just get on with creating the service.
  • 106. What We Got Right 1. Recognised Opportunity 2. Authority To Proceed 3. Technology 4. Delivery Of Working Solution Let’s not forget - we actually launched a working service. It works very well. But unfortunately, it wasn’t successful in attracting a large user base ...
  • 107. What We Would Change 1. Marketing 2. Pricing 3. Project Management The first thing we got wrong was our marketing. We got this badly wrong. We deliberately kept off the radar until we had a working service. We hadn’t done a sprint like this before, so we weren’t certain how long it would take us to build a launch service. By the time we wanted to tell the world about our marvellous creation, the world was no longer interested. The news cycle had moved on, and we had missed the boat. Those behind the news cycle, it turns out, have neither the time nor the attention span to care about working services :) In my mind, tweetSMS did exactly the right thing. They put up a ‘sign up now - coming soon’ page, and they put it up very quickly. This got them coverage, and no doubt it allowed them to hoover up many of the early adopters that Twittex was also aimed at.
  • 108. What We Would Change 1. Marketing 2. Pricing 3. Project Management Boy, did we get this wrong too :) My initial pricing, at 10p a message, was designed to cover our costs. That was a mistake. We had to drop our prices after the first day, once we realised that our competitors were planning on launching services that were around the 5p a message mark. Instead, I should have made the price as low as possible, and used pricing and our existing bulk discount to gain the largest market share over our competitors. As it turns out, the market for paid SMS messages from Twitter in the UK appears to be tiny. No- one has made a killing on this at all. The wholesale price for SMS messages is just too expensive. I’m extremely interested in making Twittex a free service supported by advertising. If there’s anyone out there who’d be interested in making this possible, do get in touch :)
  • 109. What We Would Change 1. Marketing 2. Pricing 3. Project Management I made some obvious mistakes with the project management too. The main one was that we only started prototyping the web pages themselves three days into the work on the website. What I should have done was had a bit more balls, and committed extra resources on the Thursday (before we had approval to proceed) to create the prototypes up front.
  • 110. Timeline #3: A Better Timeline If I could go back in time and do this project all over again, knowing what I know now, what would be different?
  • 111. Twitter would still have stopped sending SMS updates out on the 13th ...
  • 112. ... and TechCrunch would still have spread the word on the same day.
  • 113. TweetSMS would still have been first to get the word out that they were launching a replacement service.
  • 114. But if I could do this all over again, we would have gotten the word out to anyone and everyone as quickly as possible too. The earliest we could have done this would have been the 15th, after the approval to proceed.
  • 115. Would Zygo (and all the other competitors) have announced too, if we had made our intentions known? That’s impossible to speculate on.
  • 116. ... but I can’t help but wonder whether we’d have ended up with a two horse race instead of an eight-way finish.
  • 117. Inside Gradwell, some things would stay the same. I’m very happy with how early we recognised the opportunity.
  • 118. Sketching out the architecture up front is a necessary step, and I don’t think we could have achieved it any sooner than we did.
  • 119. But one thing I would change would be to prototype the website up front too - even before having approval to proceed.
  • 120. I don’t think we could have made the project request any sooner. We needed to have confidence that we could build the service first.
  • 121. We got approval to proceed very quickly.
  • 122. If we had had the prototypes up front, the website would have been built even quicker. We would probably have taken a day out of the timeline.
  • 123. We should have created the twitter test account up front, so that we could do a wider range of testing during development. Whether or not this would have allowed us to launch earlier is hard to say, but it would have perhaps reduced the amount of bug fixing we did post launch.
  • 124. I’m very happy with how quickly we came up with a name and purchased the domain.
  • 125. We should have paid more attention to the commercials up front. We should have had a clearer idea about them, so that we got our launch pricing right first time.
  • 126. I’m very happy with how quickly we had the logo done for the site.
  • 127. Our integration with AQL was done very quickly, and I’m very happy with how that went.
  • 128. I’m also extremely happy with how quickly we had working servers to deploy code onto. In the past, I worked with organisations who rely on third parties such as Rackspace to provision new servers. The lead times are often 20 working days or longer, because new hardware must be provided.
  • 129. We probably couldn’t have built the queue management code any quicker ...
  • 130. ... and we probably couldn’t have had the billing arrangements in place much quicker.
  • 131. I’m happy with the time it took to get the server monitoring in place. This couldn’t have been done earlier, as we needed to provision the servers first before hooking them up to our monitoring system.
  • 132. If we’d had the prototypes up front, the site would probably have been ready for internal testing a day earlier.
  • 133. ... and we would have been able to launch the site at least one day earlier. Who knows? Just maybe we might have been able to launch on the Monday :)
  • 134. I doubt we would have been able to avoid being stuck in the traffic jam on the M5.
  • 135. We would have been able to avoid having to reduce our prices, if we’d got the commercials right up front.
  • 136. I’m comfortable with having had to improve our log messages after the service had launched. I think it made sense to focus on getting the customer-visible side of the service working first, and then going back and polishing up things behind the scenes to reduce the support burden.
  • 137. I’d like to think that our friends at PlusNet would still have mentioned us when they did.
  • 138. Your Thoughts? That’s what we think would have happened had we done a few things differently. What do you think? Thank you for viewing this presentation. I hope you’ve found it interesting and that you’ve learned something from it. We certainly learned a lot from doing this project. If you have any questions or feedback, please get in touch with me stuart.herbert@gradwell.net.