My Journey To Tweetsville

by Ed on November 15, 2008

Now that Tweetsville is out there, I thought I’d reflect a bit about where it came from and how it came to be.

When the app store opened, I downloaded several Twitter clients. Each was interesting in their own right, but I couldn’t use any of them because of one reason: the scrolling performance. I didn’t get why everyone’s scrolling was not as smooth as any of the built-in iPhone applications. For me, it made the apps frustrating to use, to the point that I just never used them.

A Simple Proof

As an experiment, I wanted to prove that I could make something that scrolled as good as the Apple-made stuff. I had already done other samples using the Twitter API as part of Blueprint at Yahoo! as well as in a Widget for Konfabulator I worked on but never finished. So I figured it would be fairly quick to throw something together.

I wrote a simple web fetcher and then did a rudimentary list. Originally, it was completely a navigation based app. You’d get a list of items such as ‘With Friends’, ‘History’, etc. and click those and get the listing of 20 tweets (the default that you get with the API). It was at this point that I started messing with getting the scrolling fast. In the end, it was smooth as silk. But I also didn’t have features such as the current balloon look and clickable links and @names.

The clickable links took me quite a while to get to work. I spent much time working on line breaking and making sure it was as efficient as it could be, using Instruments to find and eliminate bottlenecks.

After that, I had something that could line break beautifully and yet it still scrolled incredibly fast. Implementing the balloon look however, did slow it down a bit, but again I spent a lot of time trying to cache and get things to the point that you see it today.

But even after all that, there was still tons to do. I mean, it was really just something to prove to myself I could do this. But at this point, I realized I was onto something real here and could really build something exciting. But there were plenty of competition out there. Why build another Twitter app? I wasn’t really sure, but I kept going anyway to see where it took me. By the time I got to the end, I knew I had something big on my hands.

Making It Real

For the next few weeks I worked pretty much 24/7 getting things to cache properly, push things off onto threads as much as possible, use a real database, etc. and make sure that things just worked correctly. Despite the simplicity of what Twitter is, making an application to really behave properly and ensure that things are always as you expect is pretty darn hard. Even something as ‘simple’ as clicking a tweet and then iterating your tweets with the up and down arrows in the upper right was interesting. Not because of the iteration of the items, but because you now have yet another view that needs to be aware of state changes in the application. For example, if you favorite something, I needed to make sure that if it was showing elsewhere in the UI the change was reflected. Good times.

I also rewrote certain sections more than once to get things right. The database for example, was originally just a plist, but the more complicated the UI became, the more necessary SQLite was. And that had to be threaded for even more fun. I had also originally started with MGTwitterEngine, but ended up writing my own engine for two reasons:

  1. design-wise, MGTwitterEngine didn’t fit with what I needed to to (it was too centralized, I needed many delegates, not just one).
  2. I decided to use JSON instead of XML to try to keep the data smaller and simpler to parse. XML really is a pain to deal with.

And since I didn’t find a JSON parser that seemed to be small enough and simple enough to integrate, I wrote one. Admittedly, it’s been something I’ve wanted to do for a while. I’m sure somewhere out there there’s a JSON parser that would have fit the bill, but I didn’t find it in my cursory search of the interweb tubes.

Details, Details

You know all those ‘standard’ form controls you see in all the Apple applications? Yeah, they ain’t standard. So a bit of time was put into creating my own version of those constructs and making them look and behave as closely to the Apple stuff as I could.

I also needed to handle image uploads and tweet compositions, loading followers so you can help address messages, doing the first run screen, etc. Lots of little things to make stuff right.

And even after I thought I had everything done, I ended up rewriting the messaging section to what you see today. It originally had inbox and sent like the web site, but one of my beta testers suggested a threaded view. At first I was like “man, that’s going to take forever”, but it only took me a day or two to get right. Most of my time in fact was spent drawing the stupid balloons to try and match the SMS app, only this time in delicious purple!

That was the making of 1.0. Right before I handed it over to Tapulous, I also added:

  • Flickr upload support
  • Re-tweet functionality
  • Ability to quit during writing a tweet and come back to where you left off the next time you launch.

I know there are several other thing that people want. I originally did envision adding things like multiple account support, etc. and I see that people also really want to have it save where you last were and not jump to the top when you load tweets. That one actually came up during development and there seemed to be strong arguments on both sides. So I left it as it was, but perhaps Tapulous can add that as an option.

People also have been asking for the ability to tap the status bar and have it jump to the top, but it already does that (the iPhone frameworks do it for you in fact). Perhaps there’s a bug in there that stops it from working sometimes.

So that’s my story, and I’m sticking to it. The best part for me has been seeing people’s comments on Twitter which echo exactly those attributes I held dear in its inception:

  • UI speed. It tries its best to not get ‘stuck’. It only now gets stuck when it’s loading the table for the first time. I hope.
  • Simplicity. It’s not glossy black. It’s just iPhone.
  • Power. You can do almost everything the Twitter API allows: follow friends, drill down in a user’s history or followers, search for your favorite terms, etc.


I want to thank everyone that helped me test the application and suggested features, etc. This includes Arlo Rose, Rob Marquardt, Karl Adam and Aaron Hurley. These people had much input into the end design. Arlo suggested the use of the Tab Bar over the nav-style interface. Karl caused me to go to threaded messages, Rob and Aaron both suggested many different enhancements to make things more user-friendly and do what you’d expect. You can blame Rob in particular for my adding Flickr upload.

Again, thank you all. It was a great project!

{ 10 comments… read them below or add one }

Z November 15, 2008 at 5:33 pm

I beta test for Tapulous. If you would like me to beta test for you I’d be glad to. just send me an email. Thanks!


j November 16, 2008 at 11:15 am

I bought it instantly after I saw the screen shots.

I just wanted smooth scrolling and a native iPhone look and feel. Any other feature is icing on the cake.



John Tokash November 16, 2008 at 11:50 am

Tweetsville is great! It would be nice, though, if the browser only took up part of the screen so you could continue reading tweets while an attached url is loading.


John Tokash November 16, 2008 at 11:51 am

To be clear: I mean that the tweets screen would allow you to scroll through more tweets. I’m not suggesting that only the current tweet be visible while you are looking at the attached web page.


Goobi November 16, 2008 at 2:55 pm

Excellent post and an excellent app. Now I hope Tapulous lives up to your hard work and puts in some more juice in there. Tweetsville is truly that ‘desktop class’ application that Steve was talking about at the Macworld 2007 expo.


Ed November 16, 2008 at 6:12 pm

If you want to beta test Tweetsville, I’d ask them directly at


Geoff Wilson November 17, 2008 at 1:42 am

Best Twitter iPhone app ever. It really feels like it is built by Apple. I thank you for putting it together and hope Tapulous looks after it.


Jodee Rich November 30, 2008 at 6:52 pm

Great Post.
We are shortly building an iphone app for
I think you are back at Apple now.
We may have interest in adapting your code
Can you contact me directly Cheers


Levi Figueira January 14, 2009 at 12:45 pm

I love Tweetsville but… is it dead??
There are a LOT of annoying bugs that need to get fixed ASAP…

It’ll be sad to see Tweetsville’s demise… It’s not even posted anywhere on Tapulous’ website… 🙁


Ed February 5, 2009 at 11:47 pm

I’ve just recently emailed the people at Tapulous and they’ve been apparently focusing more on their other products. I’m not thrilled about this. Certainly it’s no Tap Tap Revenge in terms of audience, but I was really hoping it would get more love than this.


Leave a Comment

Previous post:

Next post: