Thoughts on an open Twitter replacement: Concentrate on what’s done poorly

Twitter’s recent about face regarding their API gave me a lot to think about. It was definitely upsetting since I never saw this coming. I have always pooh-poohed the Facebook crowd and their constant worry about privacy and worn my Twitter username proud ( The geeky circles I move in, your Twitter id is fast becoming your real world identity), but suddenly Facebook felt less an oppressive regime. For a platform that clearly benefited from a huge developer community around it, a “you are not welcome here” message left a bad taste in my mouth.

My immediate reaction was the “I can do it over a weekend” developer instinct. But in this case it has been tried before and failed (see and the Twitter clones like Pownce that came out when Fail Whales were a regular feature of the platform). So this time instead of starting a new project that I would probably leave half done as I found the next shiny object I tried to analyze why Twitter succeeded and if it had indeed reached a tipping point where it just was important enough that it just could not be replaced.

I have had quite a few conversations around it as well. Tom Boutell and I shared some ideas (over Twitter, hah!) and he wrote an excellent proposal to replace Twitter. I agree with a lot of points there but have some rather different thoughts of my own,

1) How is Twitter different from WordPress
Theoretically it isn’t, and yet psychologically it is. My blog goes weeks (months?) without an update and yet I am extremely vocal on Twitter every day. I have often been tempted to just post my thought on my blog and forward it to Twitter (enough blogs and Tumblrs do that). But I feel Twitter is to WordPress like Instagram is to Flickr. They both capture transient thoughts that may have no value over a longer period. Occasionally interesting links are shared but thats it. I almost never go through my Twitter history. They are less formal and so immediate. I have a friend who composes blog posts for a couple of weeks since they seem so permanent that she doesn’t want to get it wrong, but Tweets are casual. I don’t think a simple install of WordPress would cut it.

2) We should do it because its Open / Federated
Unfortunately no-one cares about that, something that I am sure found out. Open is not enough reason for me to get off something that works, and is theoretically free. The only way an open system can succeed is if it brings new capabilities to the system. And open systems do that often. But a direct clone of Twitter is pretty useless.

3) Give me what Twitter gives
A Twitter federated and open replacement will have to:

  • Require no installation for the casual user and an easy installation for anyone wishing to be a node
  • Give me a permanent URL that I can share with my friends.
  • Allow me to discover new users and be discovered
  • Route messages to my “inbox”

4) Concentrate on what Twitter does poorly
Actually there is a lot here, and the only way a new system can succeed by fixing some of this:

  • Aggregate conversation around a shared item/link. Replies right now are a pain in the ass to track.
  • Be extendible. One of the things I see a lot of is the “vertical twitters” or “The Twitter for …(design / entrepreneurs / programmers, etc). So allow the data model that is a “tweet” to be extendible. For example, I should be able to add a poll as a Tweet or something like that.
  • Allow groups: Right now there is no way to create a quick group and send a message to 4-5 people without having to direct message them individually
  • Implement annotations: Twitter introduced this concept but has never executed on it. There is a lot of value here. For example, if I want to see what people are talking about the movie “Milk” I dont really want to see the dairy results. Similarly if I dont care for my friends’ FourSquare updates, I can only do a filter on a client like Tweetdeck using some String pattern (“checked in to”). But what if I am only interested in a friend’s tweets on programming but not his interest in photography. While hashtags could be used, most people don’t add them since it takes away from their 140 character limit.

Case study: BelugaPods
As an case study I’d like to talk about BelugaPods, a mobile app that I fell in love with and wish more apps were done so well. Beluga is a group messaging app that allows you to message multiple users and keep the conversations within a “pod”. Very handy when you are trying to organize group events. But the cool thing is that Beluga starts with the premise that your friends are not on the app. Messages to non Beluga users are sent as SMS but a clear value is shown by using the Beluga app (the conversation grouping). Thereby the application is usable when your friends aren’t in the system but excellent when they are.

I have a few ideas on implementation but they aren’t baked in enough yet to add to the post. Maybe I’ll follow up this one with those ideas…if I am not distracted by the next new thing ;).

Why Google was correct in Chrome dropping H.264

” This is crazy, why drop support for {propriety tech} that works and was pretty ubiquitous? ”

Now you can replace {propriety tech} with either H.264 or Flash. So why do we laud Apple dropping Flash but call Google’s recent action a blow to the open web.

It was always surprising to me that H.264 somehow became the standard for open video, even when the license terms have been mentioned so often. To the folks who are passionate about the open web, I say you aren’t trying hard enough. Open web is a hard goal to reach, h.264 seemed like an easy out, a solution to a problem we’d deal with later.

Ubiquitous support for a proprietary technology does not make it open, no matter how hard you may wish it to be.

So why did Google do it? One theory is to take a shot at Apple. But this announcement seems like a precursor to a very expensive exercise for Google itself: If Google is really serious about WebM, which this seems to indicate, they will have to transcode all their YouTube assets to the new format, and start building support for this into their other products, like Android. Seems too much like “Cutting off the nose to spite the face” kind of action.

The move makes perfect sense for Google. Google is not a company that thinks short term. If the current trends in online content continues, video will be a ridiculously huge part of the web. Its reasonable to imagine that advertising in that world will be pretty different. Current ad insertion strategies rely on pre / post roll ads and overlays controlled by the chrome of the video player. But the future could be very different, with things like dynamic ad insertion right into the media stream itself. For example, if the ad is embedded dynamically into the video stream, you could download the video and watch it offline, and still be guaranteed the ad was viewed, even if the video was “stolen”. Maybe such ads could even get more creative, something like embedding iAds into the video stream. [update] Also I imagine there will be a huge spurt in live video and video chat, now that more and more phones are coming out with front facing cameras. This makes relying on a licensed codec hard, especially on a scale like Google’s.

This is only one concept of the future of video advertising, but it underlies the fact that the video format could evolve to be very different from what we see today. It would be easier for Google to convince a group maintaining an open spec (that Google will definitely be a big part of) to add such capabilities than suggest it to a group that they don’t really influence and wait for them to decide to accept or reject.

Dropping H.264 support is a real blow for the short term but if enough investment is made in a truly open spec, I’d say it would be worth it.

The big question now is, will Microsoft accept WebM as well ?

One of the best comment on this was on reddit:

In the short term. This is a power play. The market is fragmented (e.g., no Flash on iPhones) and things will eventually coalesce, and Google doesn’t want them to coalesce into video tag/H264. They’re gambling that they can use their position (the most-used browser by techies, plus the most-used smartphone OS in the world) to force everyone to move off of H264 and onto open codecs.

Notes on Game Mechanics

The recent explosion of “game based” apps out has led me to read quite a bit about the topic. Here are some notes on books, articles and presentations I have been reading:

Some Rules for Game-Based Systems (from the book Game Based Marketing):

  • Favor long term loyalty not short term competitions
  • Dont offer direct prizes, offer virtual points. Real world value of virtual points can be tweaked at the time of redemption.
  • Virtual points can also be used for virtual goods. Virtual Goods Economy is 5.5 Billion Dollars
  • Does redemption matter? Huge number of points are almost never redeemed
  • Top 5% of airline customers generate 40% of the revenue
  • Create opportunities for elite members to show their eliteness (like lounges in Airports open only to elite members)
  • Create artificial scarcity and rewards around it.
  • First reward should be soon
  • Casino style *random* rewards create short cycle reinforcement
  • Need both long term goals (level ups) and short term (mini games/challenges)
  • All game based systems need:
    • Large community
    • Point System
    • Simple Communication platform

Types of Players (from the book Game Based Marketing):

Four Player types based on motivation:
Go to great lengths to get rewards
Dont care for winning in a vacuum: need an audience (leaderboards)
Need the Socializer
Want to build meaningful interactions
Often are more about helping others win rather than winning themselves
Need rich virtual worlds to explore
Love to share detailed accounts of their explorations
Long games with repeated actions bore them
Need simulated win & lose conditions
** The Naive Player **
Fairly unaware
Need to be made aware that a game is going on
  • Achievers
    • Go to great lengths to get rewards
    • Dont care for winning in a vacuum: need an audience (leaderboards)
    • Need the Socializer
  • Socializer:
    • Want to build meaningful interactions
    • Often are more about helping others win rather than winning themselves
  • Explorers:
    • Need rich virtual worlds to explore
    • Love to share detailed accounts of their explorations
    • Long games with repeated actions bore them
  • Killers:
    • Need simulated win & lose conditions
  • The Naive Player
    • Fairly unaware
    • Need to be made aware that a game is going on

A really awesome presentation on the shallow game design that seems to be creeping into web properties by Sebastian Deterding

“Yet when I look at most gamified applications today what they do is use game elements to tie us even more tightly into our worldly toils and schemes. They are glorified report cards that turn games into work rather than life into play, and users into pawns instead of players”

Pawned. Gamification and Its Discontents

The secret to Farmville’s popularity is neither gameplay nor aesthetics. Farmville is popular because in entangles users in a web of social obligations. When users log into Facebook, they are reminded that their neighbors have sent them gifts, posted bonuses on their walls, and helped with each others’ farms. In turn, they are obligated to return the courtesies.

  • Farmville is defined by obligation, routine, and responsibility;
  • Farmville encroaches and depends upon real life, and is never entirely separate from it;
  • Farmville is always certain in outcome, and involves neither chance nor skill;
  • Farmville is a productive activity, in that it adds to the social capital upon which Facebook and Zynga depend for their wealth;
  • Farmville is governed not by rules, but by habits, and simple cause-and-effect;
  • Farmville is not make-believe, in that it requires neither immersion nor suspension of disbelief

Other links:

On Ideas, implementation and iteration

I have way more ideas than I have the capacity to execute.

That seems not an uncommon issue among my friends, and unlike that saying about ideas, I actually dont think everyone has ideas. Or rather, not everyone is passionate about ideas or seeing them through to some kind of product/feature anyway (people often mistake opinions for ideas). But there are definitely a lot of idea people out there. And in today’s hyper connected world, this has enabled a slew of services ranging from idea gathering platforms like Uservoice, Kindling to complete “idea to product” services like Quirky to emerge. [Update: Wall Street Journal has a fantastic article on Ideas that you must read, also my friend Karl Martino has just published a post with 3 other links on ideas]

One thing I have come to agree with is the thought that ideas are merely multipliers of execution, i.e. ideas are great and everything but what really counts is the execution. Occasionally, when someone shares something interesting and someone dismisses it saying “Oh I had that idea a while back”, I wince. Its that kind of thinking that often leads to people posting stuff like this, feeling cheated of success that should have been theirs because they had the idea first.

Execution is everything.

Or is it? Yesterday I read a rather awesome post by Jeff Atwood on the growth of his company (Stack Overflow) and his continued belief in what he calls “Boyd’s Law of Iteration” based on the findings of USAF Colonel John Boyd:

Boyd decided that the primary determinant to winning dogfights was not observing, orienting, planning, or acting better. The primary determinant to winning dogfights was observing, orienting, planning, and acting faster. In other words, how quickly one could iterate.Speed of iteration, Boyd suggested, beats quality of iteration.

The same seems to be true of product development. Jeff references projects like Google’s Chrome and Android and how they are getting to be really successful because of their fast iteration cycles. The official Chromium blog recently published a post on the accelerated release schedules and further mention their three goals for the accelerated releases:

  • Shorten the release cycle and still get great features in front of users when they are ready
  • Make the schedule more predictable and easier to scope
  • Reduce the pressure on engineering to “make” a release

Over the last few years, I have released quite a few projects including:

  • FlexAmp: An online mp3 player that plays audio from an online storage system like (now broken)
  • DiggGraphr: A treemap visualizer for Digg stories (now broken)
  • EspressoReader: A desktop client for Google Reader

A huge personal milestone for me was EspressoReader’s second feature release. I realized that of all my projects (not including open source libraries like OpenPyro of course), Espresso was the only project that ever had a second iteration that actually evolved the app (my other projects have had maybe one or two minor updates for bugfixes). The funny thing is, I have a lot of personal notes on features for v2 of all of  them.

So here is why I think a lot of my projects never have a significant version 2:

  • The developer itch is gone: I started a project because I was interested in a platform or an API and the part I was curious about is gone.
  • The last 10% sucks: I realize that there are so many edge cases to consider. The app is very demoable but isnt at a point where anyone can actually use it for long without hitting a bug
  • The damn codebase is a mess: To get to the part where the app proves the concept, I have taken shortcuts that have compounded on each other. So now there is a lot of work involved to get the app to a state where it has the same functionality as before but I don’t groan every time I open the project’s source.
  • There is a shiny new toy to play with: These days its iOS and Android, both platforms I am interested in and spend enough time between 9-5 on to be able to take on a project involving em (well more iOS than Android as of now). Its really hard to stay focussed on a platform that is not the shiny new thing.

I hope as I mature as a programmer, I can curb my tendencies to jump off of projects for the above reasons. All I can tell you right now is that there is definitely at least a third version of EspressoReader coming out in the next few days :).

Rethinking GUI Programming Paradigms

I have to say the current state of programming and application development do bother me. I feel after so many years of programming, making things like desktop applications and web applications should be a lot easier.  Over the last few years I have done a lot of application development in a bunch of technologies like Java, SWT, Flash, HTML/JS and more recently Objective C. And yet our development environments (or IDEs) are pretty much the same as 20 years ago with vi or emacs. I have a lot of friends who have really good ideas and yet they are pretty daunted by the idea that they could build their applications themselves, and I dont blame them. Most of the advice programmers give them is to read a couple of books and download Textmate.

Their have been a lot of “GUI builder” applications over the years and pretty much all of them have been panned by “real” developers. The usual (and often justified) reason has been that they generate crappy code. Its shocking to me why GUI development remains such an afterthought in todays world.

Did Flash get it right?

Like it or hate it, Flash was probably one of the first tools that got it somewhat right. Its success and now the reason it gets panned, is because it made it very approachable for someone who was not a programmer to get something in their mind out on the internet. The ability to draw a shape and then attach some behavior to it in code was huge.

This was my path to it too. I came to the US persuing my graduate degree in VLSI Engineering (chip design). Somehow I got a job at a University Learning Center with a very loose mandate: the director of the center had a lot of ideas on e-learning with video and had just seen some Flash video sites and was fascinated (remember Flash video only came around in version 6 of Flash). My role was to “make something cool for e-learning and video”. I had never programmed before but had some experience with Flash animation, mostly making small animated movies hoping to get on Atom Films someday.

In about 6 months I had gotten really addicted to Flash since for the first time, my animations could respond to the user. Because of Flash, I quit VLSI and moved to Software Engineering, with my final thesis in creating cross language bridges between GUI and non GUI parts of an applicaiton (using Flash and Java). The approachability of Flash back then was my gateway drug to programming. Flash has since “matured” to a real programming language but I feel at the cost of the approachability the earlier versions had.

Ugh Java

Moving to the Software Engineering team was a bizarre experience. The Graduate School was a Java school and I got started working in Swing. It was crazy! I could do any kind of UI in Flash in a heartbeat but getting Java to render a custom designed button was virtually impossible (so we always stuck to the default lookAndFeel). Actually back in the day, I don’t think there was even a Java IDE like Netbeans that we used. Everything was written in VI and then compiled by using the command line.

Interface Builder: A good idea that was never completed ?

Working with Interface Builder, the tool used to develop User Interfaces for Mac apps,  for a while, I see the thought process that must have been going on when it was being developed. The concept of laying out the UI and tying it to the application logic components is a good one. But IB feels like the team was disbanded halfway into the project. The tool as it stands right now is such a pain to understand that most new developers who get into Objective C programming try to avoid it as much as they can.

The 280 Atlas IDE for Cappuccino seems to have taken the IB concept and extended it to the web. I like this better than IB if for nothing else than gathering all application windows in one. The floating canvases on IB get annoying really fast.

Drag and drop application development:

I love this video. I am sure to scale this to “real” GUI development would be a significant amount of work, but that would be the holy grail (at least for me)

3d physics simulation with Wiimote from Balazs Serenyi on Vimeo.

The same idea is also echoed in MIT’s Scratch project. Scratch declares its mandate as making it easy to “create your own interactive stories, animations, games, music, and art”. While the focus seems to be towards animation and getting kids to learn programming concepts, can it be extended to real world projects ?

Another interesting project that surfaced recently was Sikuli. Check the video on that below. My favorite part of this was that the “script” actually references the images that behavior is assigned to. You dont need to understand variables at this point (You may need to to write business logic if you have to, but thats a bridge you can cross later)

Human-readable “code” with Ruby and Cucumber:

Just getting started with the Ruby programming language, I have been really impressed by its focus on readable code. An open source project called Cucumber is also fascinating. I haven’t done any work with it but have attended a few sessions on it in different user group meetings. Cucumber takes the readability of code even further with a goal of having non technical folk be able to define a site’s functionality very granularly.

Final thoughts: Enough with the text editor already

Using a pure fast text editor for developing applications seems to be the badge of a real developer. But writing lines of  text to express ideas in my head seems to be a paradigm that should have evolved a while back but hasn’t. Am I overly simplifying the problem? Possibly. But after so many decades since the inception of programming there is very little to justify the high barrier to entry it presents to most newbies. To me the current state of programming feels like the state of mobile phones before the iphone and the ipad. Whatever anyone’s feeling on Apple are, its hard to deny how much they humanized computing.

Its time to do that for programming too don’t you think?

Some other related interesting stuff

  • The Adobe design team recently posted some thoughts on improving the programming experience in Flash.
  • Some good thoughts on XCode UI enhancements