Android & iOS

I’ve been a long-time iOS user, and recently when my two-year old iPhone 5 fell down and broke its screen, I bought an interim Android device and used it for around two months. I took notes during these 2 months on what’s better about Android & what’s worse, and these are my impressions. I now own and use an iPhone 6 Plus.


  • The device I bought was the Micromax Unite 2 which costed me ₹7300. The device (iPhone 5) I compared it with costed me close to eight times that. This should be on the top of everybody’s head. Having said that, I tried to ignore device quirks and am mostly just commenting on the OS differences.
  • I had iOS 8 on the iPhone for around 2 weeks before I broke it. The Micromax device had Android 4.4.2, and not Lollipop, so I’m not comparing the latest versions. From what I’ve seen of Lollipop, it looks much nicer.
  • I’m a longtime Apple user. My first Apple device was a Mac Mini in 2006, and I’ve used only Macs since. My first iPhone was the iPhone 4, and I’ve only used iOS since. A lot of these impressions can be just because I’m used to the way Apple does things.

Having gotten that out of the way, let me start with the areas where I found Android was significantly better:

  • Widgets make the home screen look much nicer. I didn’t use many widgets, but I appreciated the ability to have them. I liked the Timely Alarm clock widget in particular.
  • Passwords are not asked so frequently for app installs, which is very nice. This was one of the constant irritants on iOS. Having Touch ID mitigates this a lot though, because it’s much easier to thumb than type in a complex password. The Google App install experience is way better, with detailed time remaining sliders in the notification centre and a lot more info.
  • Phone seems to shut down & start up way faster. While I don’t do this much, the difference is pretty amazing.
  • Contacts integration with Gmail contacts is much better & smoother, especially the option to find and consolidate duplicates. Somehow it doesn’t work as well on the iPhone.
  • The Dialer app is much better looking & far more functional, but seems a tad slower. Frankly, I hate how the iOS7+ Dialer looks like. Plus receiving location information (“Calling from Hyderabad”) for unknown calls is great & Truecaller integration makes this even better.
  • I installed the Google Now launcher & having Google Now on the home screen is very convenient. When traveling, glancing at how long it takes to reach home is nice. Google Now itself in India is at least 5x better than Siri. The offline voice recognition itself makes a ton of difference. Note that much of this functionality is available on iOS via the Google app, but somehow I never use that app much there. Having it front and centre makes it much more useful.
  • The Notification Centre is far better. Having icons in the Notification bar is super convenient. At a glance one can see if the notification must be read. And in addition, swiping to clear notifications & the super useful clear all button is nice to have. iOS also has actionable notifications now, but the Android implementation is far better, has more features and is much more refined.
  • Like the folders in the home screen better. While the iOS wiggling around animation is cute, the Android implementation feels faster & is more responsive and flexible to edit & reorganize.
  • Expandable storage is just 350 rupees for 8GB. The fact that Google seems to be encouraging Android to move away from external storage seems very weird to me. Maybe they can enforce or encourage class 10 SDs, but this is a major positive factor that I think Android shouldn’t give up. I understand the arguments in favour of inbuilt storage, but it seems like the tradeoff is worth it, especially for the user audience.
  • This came as a surprise, but the thing I missed most when I switched back to the iPhone was the back button. The muscle memory associated with the back button isn’t easy to forget :). While I think the Android navigation hierarchy is a mess (“Up caret anybody?”), having a dedicated back button is super convenient to navigate between apps. This is something that iOS hasn’t ever tackled.

Now some niggles:

  • When I first clicked on the Date widget accidentally, I was a very confused person. Android UIs vary a ton from app to app, and most of them hide the status bar too.
  • The stock keyboard is much, much worse than the iOS one. It’s uglier and doesn’t work as well. The cut-copy-paste experience is also worse. I installed Fleksy which improves the situation a little bit.
  • There seems to be no way to scroll to the top of the list. On iOS you just tap the header. This was very jarring.
  • GPS is far slower and less reliable than iOS. Am not sure if it’s even working. I’ve noticed this on many cheap Android phones. Seems ridiculous to ship a phone with a feature and not even ensure it’s working.
  • The Google Camera app is way slower. I’m not commenting on the photo quality, just how the app works.
  • Contacts search does not seem to search notes, company name etc. This was a big issue for me because I am a stickler for proper first names and last names in my contact list & I often only remember the company name of the person I’m supposed to be speaking to.
  • This is phone-specific, but the Phone/Internal/External memory separation on the Micromax Unite 2 is a big hassle, and I needed to figure out things like rooting just so that I can delete some apps and install new ones. Somehow, this particular phone didn’t allow me an option to install to the “Internal SD”. This can obviously be solved by buying a Nexus or an Android One device.
  • The lack of a silent button was very jarring and I had to ask somebody how to turn the phone silent from the lock screen (you long press the power button). It’s much more convenient on iPhone hardware though, and you can do it by feel.
  • There seems to be no standard emoji keyboard, and the one inbuilt looks crazy. WhatsApp has one inbuilt that looks nicer, but that’s not what it displayed on the keyboard.
  • Again phone-specific, but there were lots of random slowdowns & jitter when installing apps.
  • Most third-party apps still look much worse than they do on the iPhone. I almost stopped tweeting because Twitter for Android looks & works like a piece of shit. WhatsApp wasn’t much better, and even Facebook was slower. The iPhone apps are more refined, look much better and work much faster. The only apps which seem to be “okay” on Android were the ones from Google. I hope this will be solved by the Lollipop update & app makers switch over to the Material UI because I can never use an Android phone full-time for this reason. I need my apps to look consistent. Having said that, one app that I’m missing is MoneyView: a clever little app that read my SMS notifications from banks & compiled it into actionable finance information. Nothing like that is allowed on iOS.
  • The iOS animations in general seem much smoother and better. Apps also didn’t seem to use many animations and were pretty boring.
  • iOS 8 adds Continuity and that’s pretty much a killer feature set that Android doesn’t have right now. If you use a Mac too, it’s a bunch of useful stuff: picking up & making calls on my Mac (I use this a lot when working), SMS forwarding & App handoff. I tried a few Android solutions that require third-party additions and they don’t work as well or at all.

That’s it! I compiled these form notes that I jotted down every day. If you’ve used both Android & iOS, what do you think?

Cracking a Startup Interview

A Job at SV

(Photo by Ken Banks)

A startup job interview isn’t too different from that of a bigger company, so a lot of the tips you’ll find around the Internet apply without reservations. Startups however have a different culture, and focus on the combo of individual productivity and team fit a lot more than on processes and guidelines. Here’s a few pointers I’ve noted in candidates who have aced interviews at MobME:

Be comfortably dressed & not too formal. Inspired by the Google formula of “You don’t have to wear a suit to be serious”, most startups dress down. Wear a comfortable shirt, and perhaps put on some pants or a dress skirt, but even a jeans and T-Shirt is A-OK. This is not a license to come unwashed, unkempt or in mini-skirts though: most great startups ask their employees to look smart.

Open the conversation with smiles, be affable and open in your responses. Most good startups have a Don’t be an Asshole policy & tools to detect this early and often. When working in a close-knit team, it’s better to be around positive people who contribute than around energy drainers. Note that when I explain this to some people, they take it as an insult & a bias against introverts. Introverts are some of the best people on earth (and some of the greatest programmers), but you can be quiet and unassuming, and yet pleasant and positive.

Be confident. A better word would be assertive. Talk in short, brisk sentences. Communicate precisely. Try not to uhm and aah instead think a bit before speaking. Ask for clarifications when you don’t understand the question. When you don’t know stuff, just say that you don’t. Don’t ramble & distract the attention of the questioner away into areas that you have expertise in. If you have confidence in your skills, that really comes across, and it’s the biggest “gut factor” when I hire folks.

Brush up on what they seem to be looking for. This is a no-brainer, but most often even when you are good, you don’t get hired because it’s been a long while since you worked with the stack. It’s okay to explain that you’ll need a few weeks on the job to get up-to-speed, but it’s better to brush up before going in. Most startups hire immediately and don’t have scheduled yearly hiring rounds.

Stress that you are a generalist. Ideally, you should be. Startups value specialists when they are consultants. When you’re on the team, you are expected to pitch in everywhere required. A small team that follows an Agile development model like SCRUM always will have slack for non-core contributors to pitch in. Show them a broad spectrum of expertise.

Show them code that you’ve written. For a programming interview, this is a must. Ideally you have some uploaded to GitHub already.  If not, start contributing to open source today. It isn’t as hard as you think and there are events dedicated to lesser-represented groups.

Understand the question before answering. This is such a common problem that I’ve put it in a separate bullet point. Wait for the interviewer to complete the question before starting up. When needed, ask for clarifications, and make sure you understand the question properly. Don’t shoot from the hip.

Don’t appear too eager to get the job. Be interested and earnest but don’t compromise too much for e.g if you have a target salary.

Show an interest in their business. This is last, but this is perhaps the most overlooked and most important bit. Ask them questions about how the company is run, what the team size will be, ask if you can meet the team, et. al. Remember that an interview always goes both ways. At MobME, we’ve asked a few people who were interested but didn’t seem qualified enough to apply for an internship.

This was adapted from a mail I sent to a past colleague who is looking for a new job. Pitch in below if you have more tips!

Amateur Fiction at its Finest

Home Library

I picked up my reading habit from my mum. I read everything from Sheldon, Christie, King and the like to Yeats, Whitman, Neruda, Donne, Dickens, et. al. It sure helped that mum had a huge library of her favourites (yes, that’s the picture above) and I read most of them twice over before I left school.

It was also in school that I started to write myself. When you’re an amateur author at that age, you really like having somebody read your work. These other people more often that not turn out to be amateur authors themselves, and then of course there’s a quid pro quo. That’s how I started started to read unpublished writing, and while over the years I’ve lost the muse, I still read a ton.

When I say this to other readers, they often look at me mystified. Amateur writing, seriously? Is that like fan fiction? Where do I get to read them? Don’t most of them require a spell check & a good editor? To the last: well, yes. But amateur writing is in an electronic format, and that brings about with it some unusual advantages. Let’s banish the negatives from our mind, and take a look at the upside:

  • Let’s take length first. Who decided that a novel should be 40K words plus? How about a 500K mammoth saga? Or a 300 word scene? Some of these lengths bring about some wonderful stories & different ways to consume them.
  • Controversial & sidelined genres such as polyamory, serious examinations about bending legal age, or even religious & political writing find a place in amateur writing. There is nobody to judge.
  • Unusual genres, such as self-insertion, mind-control, time-travel, and gender-bending novellas are cool. Who doesn’t need more 70s SciFi?
  • Crossovers: because of copyright, this has been largely unexplored in a mainstream genre. But wouldn’t you, as an author like to build upon the worlds of Tolkein & Rowling? Perhaps combine them, mix and match?
  • Alternate timelines: just this: imagining redoing the travesty that is the Harry Potter finale.
  • Serial writing: just like TV shows, writing doesn’t have to be published all at a go. Amateur authors regularly publish a story a chapter at a time.

Having said that, the proof of the pudding is in the reading: these are five good stories written by unpublished authors that I’ve read over the years:

Delenda Est: a Harry Potter and Bellatrix Lestrange (!?) alternate timeline story, an incredible pairing that somehow Lord Silvere manages to turn into an amazing story. Lots of plucky Bella here. This could have the Bella all of you panted over.

The Book: a mind control story: what happens when a middle-aged guy picks up a book that has symbols in it that gives him the power to control other people’s minds? Blackie weaves a tale that has the usual vagaries that come with mind-control, but also a surprisingly intelligent & coherent story behind it.

The Adventures of Me and Martha Jane: probably one of the books that has influenced me the most with its ideas of love, longing and blurred relationships, SJR’s Martha will stay with me forever. Forget the warnings on the page and dig through the story, worth it.

HPMOR: who says Harry Potter has to be irrational? LONG, good Harry Potter fan-fiction.

Sennadar: this should have been published. It’s as good, or if not better than a lot of what goes for fantasy now. A classic coming-of-age fantasy novel, but with a were-cat twist.

And that’s just the tip of the iceberg. I’m both excited & worried about the future of amateur writing. Excited, because efforts such as Amazon’s Kindle platform have provided a level playing field for a lot of budding writers out there. And worried because while the platform is egalitarian, it’s also commercial, which means a ton of potential authors will write stories in genres that are more popular & more acceptable. Amateur fiction until now has never been about making money, it’s about an author slogging away at a computer somewhere writing something that just needs to be written. But maybe that’s just the old-man in me speaking. There has never been such a time where there’s been such a low distinction between a “published” author and an amateur one. That, in my books, can only be a good thing.

The Malayalam Movie Comeback


A big loss as a movie enthusiast was that when I was growing up, the Malayalam movie industry was in a formulaic rut. While local movies still used to bag critical awards, most “popular” & “commercial” films casted Mammooty, Mohanlal (please don’t click that link) or other A-list stars and had the usual Dhamaka Dishoom fare. The movie revolved around the actor, who always had labels that were prefixed with Super, Mega, Ultra & so on, and the films resembled caricatures of superhero movies.

It’s only much later & very recently, when Uma & her friends introduced me to an older generation of movies that I… simply lost my breath. Padmarajan & his colleagues’ movies were stunning in its breath & simplicity and casted real people who portrayed everyday situations but in a fashion that elevated the craft to art. These movies didn’t shy away from controversial topics: pre-marital sex, rape (not the dastardly erotic treatment of it that came later, but a serious examination), family trouble, relationships that didn’t have labels, what not. Even if you don’t understand Malayalam, I urge you if you are a movie enthusiast to watch subtitled versions of some of Padmarajan’s classics: perhaps Thoovanathumbikal (Dragonflies in the Rain), or Namukku Parkkan Munthiri Thoppukal (Vineyards for Us to Live). And this in the 80s! What happened to Malayalam cinema in the 90s, in contrast, can only be described by one word: tragedy.

What I see now, perhaps starting 2010, is a revival. Talented new directors have emerged who have broken the deadlock an older generation of actors had on the industry. Perhaps, more importantly, there have been several good movies, and dare I say, a few great ones. These directors are courageous as well, and have tackled contemporary topics head on: 22FK was the first movie that I saw in a Kerala theatre where a female lead received a standing ovation (regardless of its contentious conclusion, the movie can’t be faulted for not having courage); other movies such as Manjadikuru & Philips and the Monkey Pen give a serious treatment to a previously unexplored genre.

I’m cautiously optimistic about this “new wave” of Malayalam cinema, more so because unlike Padmarajan and his coterie, there seems to be a broader cross-section of directors, producers and artists this time around:

  • A lot of women in control: Ustad Hotel is written by Anjali Menon & the Monkey Pen is produced by Sandra Thomas, amongst others.
  • A ton of good actors: the new heartthrob Fahad, Malayalee’s serial kisser, who has made even baldness cool (beat that Bollywood!), a 50-something Lal who acts his age & who honestly has been a revelation for his portrayal of characters on screen, and good & refreshingly sexy female leads like Shwetha Menon, Rima Kallingal, Nazriya, et. al.
  • Some “counter-culture” movies, like Kili Poyi, or Idukki Gold, where the actors openly smoke up.
  • And the fact that this energy has infected the older actors as well and brought out their long dormant mettle, see Drishyam for a long awaited director’s movie starring Mohanlal, and Mammooty was brilliant in Pranchiyettan.

Instead of more reviews & critiques, let me leave you with a list of movies you can watch yourselves & decide. Here’s to a great future for Mallu cinema!

Download plain text Wikipedia links to these movies here.

[For people in Hindi-land who are reading this and becoming bewildered, yes, there’s a better movie industry outside Bollywood, and no, for a lot of us Indian cinema doesn’t revolve around SRKs, ABs, PCs and their tribe. This is your opportunity to upgrade to a better experience, take it!]

Only then do we sign our work


Yesterday at WWDC, Apple unveiled a mission statement that reads more like a poem. There’s a wonderful video as well, but just look at these words:

If everyone is busy making everything
how can anyone perfect anything?
we start to confuse convenience with joy
abundance with choice.
designing something requires
the first thing we ask is
what do we want people to feel?
then we begin to craft around our intention
it takes time…
there are a thousand no’s
for every yes.
we simplify
we perfect
we start over.
until every thing we touch
enhances each life it touches
only then do we sign our work:
Designed by Apple in California.

It’s a wonderful & sincere expression of why we need Apple to exist. And why I love this company so much. I’m beginning to think that the Apple under Jony Ive & Tim Cook might become far better than under Jobs.

VoiceTime, or a future in which Apple can take over VoIP

FaceTime. iMessage. VoiceTime?

Apple has FaceTime, and it has been very successful in introducing simple video calling to a ton of Apple users. That success—as Apple’s usually are—can be attributed to clear directed marketing and unparalleled ease of use. If the person on the other end of the line has an Apple device too, the only thing you need to do is press a FaceTime button and then seconds later, be talking to them via a video call.

I know a friend of mine who was super surprised when he pressed the button and it worked first time. He expected more of a setup process, perhaps creating an account or entering user credentials. Or heck, maybe being taken through a wizard. It’s the same user flow with their SMS counterpart—iMessage: you text a person and if the other end is an Apple device, the text is delivered via the iMessage IP network. It’s not just Apple who is doing this of course: a classic example is iMessage’s cross-platform and much more successful rival: Whatsapp. If you have anybody’s mobile number and if they have Whatsapp installed, you can text them. Works amazingly well!

So with FaceTime, Apple has video over IP. With iMessage, they have a simple texting solution over IP. What if Apple makes a dead-simple, works over the same mobile number, voice calling service?

First off: some historic background:

  • Apple first introduced the iPhone in June 2007. When it did so, it broke the stranglehold US carriers had over mobile phone vendors: AT&T controlled neither the production timelines of the device, its content, nor its software updates. It even bent over backward to refit its voicemail service to support Visual VoiceMail.
  • In July 2008, Apple introduced the App Store. The App Store further diluted the participation that carriers had over user mobile phone experience. Instead of subscribing to mobile VAS services, users could now download and experience much richer mobile apps: apps that could work offline, would work over the internet, and apps that didn’t add any extra charge to their mobile phone bill.
  • In June 2010, Apple introduced FaceTime, a seamless way for any iPhone user to make video calls, effectively destroying any plans that carriers had for charging premium for video calls over their network.
  • iMessage was introduced in June 2011, and is continuing to deliver 28,000 messages/second that would otherwise have been chargeable text messages.

In short, in a span of less than six years, Apple has steadily worked to decrease the control carriers had over mobile phone user experience. It has reduced the importance of core apps (text messaging), and provided a better experience for premium apps (video calling, mobile internet, apps, et. al.). What if the next milestone is to do to voice what it did to video and texting?

Let’s explore another tangent. Why is Apple best placed to do this first? Android for example looks on the surface like a much better candidate. Android is an open environment and there are tons of apps that provide deep hooks into the platform to provide free (or close to free) Voice over IP. Tango is a great example of such an app. There are several reasons:

  • Apple has always done what it thinks is best for its users. Android was conceived to build the best mobile phone operating system for carriers: it was unveiled alongside the now largely defunct Open Handset Alliance as a countermeasure to iOS popularity.
  • Android has always put carriers in control. Carriers control the content of the phone and they can customise Android to a large extent, and because of such customisation, Android updates are slower to roll out.
  • It’s a better operating system than Symbian, but the core philosophy is the same. Put carriers in control, give them a smartphone OS choice largely equivalent in feature-set to iOS, but with none of its Apple control.
  • Google has never developed a competing  phone number based video-calling or text messaging solution. Hangouts—which is their latest unification of text and voice—asks for & confirms your mobile number but then does nothing obvious with it.

What is the bare minimum experience that Apple needs to provide to make VoiceTime a success?

  1. First and foremost, it needs to be transparent to the user. If I dial a contact and I’m connected to the Internet via WiFi, 3G or LTE & the receiving device is an Apple device, the call should be routed via VoiceTime. No fuss, no setup.
  2. If I’m not connected to the Internet, the call should be routed via cellular with the same experience. Just like iMessage, the dialer can subtly indicate (via a change of colour perhaps) that I’m on a cellular connection instead of VoiceTime.
  3. Third, and another important one: transparent handoff between cellular and VoiceTime calls. That is to say: if I start a call on VoiceTime & my Internet disconnects, the call is handed over to a cellular MSC without a call drop.

The third is the most technically intractable problem. But like every open problem, somebody more intelligent has probably thought of solutions. In this case, IEEE 802.21, specifically describes this problem. And several workable solutions.

Why hasn’t anybody done this yet? Simply because mobile operators don’t want to lose the last bastion of money making they have. In India, despite have the lowest call rates in the world, voice calls contribute the most to subscriber ARPU. Nobody is looking for a blue ocean strategy when their existing business is doing just fine, thank you!

But why do you, as a subscriber want VoiceTime or an equivalent solution? There are so many reasons:

  1. It’s stupid to pay thrice: once for your data plan, once for your voice minutes, and again for your texting. The mobile world should be like your internet world. You pay once, for data.
  2. The Internet Protocol has proven to scale as much (or more) than any telecommunications network. The questions of reliability that led to the creation of dedicated protocols for voice telephony largely don’t exists any more. Indeed, the next generation of telephony networks (SIGTRAN and LTE) are based on IP. If the future is a data driven Internet, why are we still living in the past?
  3. The reality is that voice calls over cellular networks suck. Frequent call drops, cross connections, terrible voice quality and lack of any presence features is not what you would expect in 2013. Skype-like voice quality, a network more resistant to call drops and integration with the larger Internet & other devices is just an implementation away.

Would you be willing to pay Apple for such a technology? Let’s say Apple charged something like $10 a year for VoiceTime & let carriers have 70% of it (Voice is just another app of course), would you pay?

Literate Coffeescript is sweet. It’s a great implementation of something that I’ve always thought is fundamental to good programming: we write code for ourselves and other humans, not for a computer. We’re no longer dealing with slow-as-molasses computers that demand efficiency, but we have a lot of additional complexity to handle, a ton of language feature creep, concurrency nightmares and multiple service architectures. By making explanation the fundamental purpose of a programming language and giving it first-class status—and equally important—running indented code seemingly as an afterthought, Literate Coffeescript gives importance where it’s due. Think before you code, write down what your intent is. And make programming seem a lot more like crystal clear writing.


I think it’s popular now to criticise Apple, and particularly Macs, but there’s one simple reason that I switched to Macs and have been using them ever since:

I was tired of spending time on my computer working on my operating system instead of working on my projects.

Do read: 25 Years to Mac – How Ubuntu Pushed Me Away from the PC. I do go back to Ubuntu every now and then in Virtual Machines, but it doesn’t come close. And Windows is not *nix, so that’s never an option.

I think what Google should have done was build their own version of Linux, just like they built Android inspired from iOS. I bet lots and lots of folks would have paid money for a stable, usable, friendly & Googley Linux. And stuff like their Pixel laptop could’ve done more than just run a browser.

Delivering a Quick and Quality Software Product


There’s always a tradeoff between time, money and quality in software development. More often that not nowadays, product managers are asked to deliver excellent products on a tight schedule and on a budget. Agile processes and the trendy idea of the minimum viable product only confuse things further because they seem to prioritise quick iterative development and a tight rein on features. How does one build a good product on time and keeping startup thriftiness in mind? I have six clear steps for you to follow:

One: Before building anything, dig to the roots and find product goals. Ask your client (or yourself) “Why do you need this product built?”. Answers like “We need to run a twitter campaign” or “We want a CRM for our sales team” are not clear enough. “We need to run a twitter campaign to promote our new startup” & “We need a CRM that tracks and updates senior managers about daily sales” are better answers, but ideally what you’ll dig for and get is the true reason behind the product’s existence. For the twitter campaign, it could be “reaching out to potential customers who are likely to purchase our startup’s product”. For the CRM, it could be “improving sales performance and making our sales team more accountable”. You are digging for goals—the why—not features—the what—that comes later, and that’s less important.

What the Customer Wanted

Two: Minimum viable product is a great idea. But when choosing what to whet down, keep the goals in mind. I have little patience for managers who come back and tell me, “But isn’t this what we decided to build?”. If you can’t deliver what your clients need, then you aren’t doing a good job. Keep product goals in mind, and prioritise features that will provide the most bang for the buck. Only then will Agile and MVP work well for you.

Three: Find great developers. What’s more important than your process are people. Great developers can manage themselves, figure out their own deadlines and do a lot more than a mediocre developer. Give them great tools too: a good working space, the editor that they want, and their operating system of choice. It’s also much better when you have a good team to split work into spheres of responsibility rather than into discrete chunks where many developers work on the same piece of code. Adopt practices like pair programming & SCRUM and promote discussion within the group. If at all possible, guide every discussion to a consensus and make sure every developer is aware of potential tradeoffs.

Four: Try as much as possible to not build engineering debt. This is easier said than done, but few rules go a long way: adopt a good source control system and practices, a development, staging and production deployment for every product, a continuous integration and deployment server, and have a system in place to code-review every commit before it gets merged back into the main tree. Make your developers police each other.

Five: Have an independent team to do security audits & quality assurance. This is a “manual testing” team, and while they might use several different tools, their mandate is to make sure the product has the features necessary, doesn’t have bugs, and is secure from a security standpoint. This team can be external to the company as well, but it needs to build a good rapport with the engineering division so that they don’t work at odds.

Six: Have regular deployments or sprints. Nothing focuses a developer more than a predictable schedule of deployment. Divide chunks of work into sprints and have staging deployments between them. Make sure that developers are responsible for successful deployments and pour woe to the person who breaks the build.

Well, those are the rules. Sticking to them is hard, and at times impossible, but my experience is that any deviation has always resulted in a loss of quality. While that might be acceptable in the short-term, in the long-term, it always comes to bite you on your ass. However, being a product manager is one of the best jobs out there! Figuring out the nitty gritty details of product construction, overcoming obstacles, finding consensus within the team and outside, and finally, building a product that meets the requirement is a very rewarding job. I’ve done a few stints here at MobME building good products and I’ve loved every challenge.

Stanford Developing Apps for iPhone and iPad is Awesome

Update: I’ve started a Github repo that has completed assignments.

I’ve mentioned this before countless times to friends: the Stanford course on iOS Development is really mind-blowing. It’s the best way to learn iOS and Objective-C: Paul Hegarty is a wonderful teacher, the content & density of the slides is excellent and the complex Cocoa Touch framework and the Xcode 4 development environment is brought out very well through hands-on coding sessions.

MVC on iOS

Just to take one example, take a look at this slide above detailing MVC in iOS. I can point out dozens of developers who wouldn’t have this condensed understanding even after months with the ecosystem. In this small slide, you have:

  • Models, Views & Controllers with road lines between them depicting the fact that models and views never talk to each other (double-yellow line), controllers always talk to models and views (dotted white) and when models and views need to talk to controllers, they do so in very defined ways (solid white).
  • When views need to talk to controllers, they either fire an action arrow into a controller target, or delegate willshould, and did methods to the controller, or when they want data from the controller, set up a datasource and ask for data at & count methods.
  • When models need to talk to controllers, they set up a radio station and broadcast notifications that controllers then tune into.

And this is just one slide in the introductory lecture. It’s a wonderful time to be a self-taught app developer. The Stanford course is right now ongoing and lectures are being updated on iTunes U. There’s a Piazza discussion forum as well for the course.

Relief India Trust is a Scam NGO, Do not Donate!


So I recently got a bunch of calls from an NGO calling itself Relief India Trust. The calls themselves were a bit odd and over zealous with the volunteers flinging themselves at me and describing the plight of children in gory detail, but it was the frequency of the calls that first gave me a clue that something wasn’t right. Then, when I finally decide to put in some money, there’s a volunteer who calls me up, takes me through the donation process and then offers to stay on line until I give her a Transaction ID for the bank transfer.

I did up a Google search and found tons of consumer complaints about the organisation. And if you notice their NGO registration number in the link above, it’s just a plain four digit number: 3696. The Indian Government has an NGO search site where you can search for voluntary organisations by name or their unique registration ID. 3696 doesn’t turn up Relief India Trust. Neither does a search for their name. These are a bunch of scam artists.

Real NGOs probably needn’t be this aggressive. I donate every year to SOS Children’s Village India, which has been my charity of choice since forever. They have a unique take on bringing up disadvantaged children, a personal dialogue (if you wish it) between your kid and you, and I’ve visited their centre in Kerala too.

Update: I’ve receive a legal notice from Relief India Trust. Further developments in a new blog post: Relief India Trust, the Scam NGO, Files a Legal Notice Against my Blog Post for Defamation

Analysing IRCTC Traffic

So it needn’t be said that IRCTC is sluggish at the best of times and at the worst, darn unusable. Is it because of astronomical load? Bandwidth issues? Technology mismanagement? Resource exhaustion? Let’s take a look and try to guess.

This news article from July 2012 mentions that IRCTC did 4.47 lakh bookings in a day. Doubling that figure to get current estimates makes it 10 lakh bookings a day. To get the number of folks accessing the site trying to reserve tickets, let’s multiply that figure 10x. That makes it 100 lakh folks (i.e. 10 million) as a guesstimate who will try to reserve tickets using IRCTC in just a single day.

The first question to ask is are those many tickets available? The answer is an emphatic no. The Centre for Railway Information Systems that develop CONCERT, the backend engine behind web bookings only does around 2.2 million reservations a day. So there’s no way IRCTC can satisfy 10 million users. We don’t have that many seats to reserve.

The second: is 10 million visits a huge number? This is a tough question to answer because it depends quite a bit on what those folks are doing. On most days, the IRCTC website homepage is accessible and loads up reasonably quick, but when you try to login, search or book, it falls down flat. So most likely bandwidth exhaustion is not the root cause, because 10 million visits is just about 11 visits a second. That shouldn’t translate to a lot of bandwidth. Besides, even 100Mbps+ pipes are cost-effective for an organisation the size of IRCTC.

My theory is that the problem likely is the CONCERT backend. That’s not built to handle this kind of a consistent load, especially at peak Tatkal hours when traffic per second could be much more than what I’ve estimated above. And CONCERT was probably never built with online reservation in mind; it was built for a world where people queued up physically, talked to a railway official and booked tickets. And neither CRIS nor the Railways would want an immediate revamp. So what can IRCTC do about it?

There is a very simple solution: decouple the user experience from the backend booking system. I’ll explain what I mean in screenshots:

IRCTC Wait 1

Step 1: User goes to IRCTC website, logs in and is taken to a page that has a queue number and an approximate wait time on it. This queue number is the position in the queue and is alloted on a first-come first-serve basis and resembles a physical queue where folks wait to book tickets via CONCERT. The page auto-refreshes and updates this information periodically.

IRCTC Wait 2

Step 2: When the user reaches the front of the queue, he’s taken to the search & booking page. IRCTC perhaps takes up around 500 customers in a minute this way (or however much CONCERT can reliably handle) & booking proceeds as usual.


  • IRCTC booking is no longer a lottery. This is perhaps the biggest win.
  • Customers who log in bright and early get the first slots.
  • Late customers get a higher queue number and won’t get tickets, but IRCTC can always blame the other people ahead of them in the queue and not the faulty technology for it.
  • The queueing system is optional when traffic is low and below CONCERT’s reliability threshold.

As I see it, if there’s no way to work around limitations of older software, the only thing you can do is remove customer frustration. And it’s high time they did something to improve the Tatkal madness.

Hat-tip to Anoop for making me dig deeper into this.

OSX Encrypted Disks & Passwords

So if you’re like me and have a ton of different passwords to manage but don’t know how to securely store them, here’s a neat trick: first off, don’t use password managers that store your data in proprietary formats; god forbid if you ever someday need to change platforms or store something more than just “passwords”. Use a simple plain text file and pick Markdown to organize data. Here’s how mine looks:

Credentials File

Now, use a little known facility in OSX to create encrypted disks. Type ⌘+space & open Disk Utility. Now, File > New > Blank Disk Image. Under Encryption, choose 256-bit (why not?) and for image format, choose sparse disk image. Choose a place to save and you’ve got your own secure storage.

Encrypted Disk Image

Drag and drop your Credentials markdown file into your disk image and you’ve got your own secure password store. If you’ve got any backup tools like Time Machine or Backblaze installed, then it’ll pick up this file too so your passwords are backed up. Have fun!

The Adobe Turnaround

Three years ago, Adobe was a desktop publishing company heavily invested in proprietary tools. It had great desktop image publishing software with Photoshop, top-of-the-line rich content creation for the web with Flash and good and accessible document sharing for the desktop with Adobe Acrobat.

And then Steve Jobs decided to wage a war on Flash. And in a testament to how fast things can change in the IT world, Adobe suddenly looked to be in trouble: an aging software company that didn’t have a cloud solution, wasn’t doing anything for mobile media creation and didn’t have any out-of-the-box solutions for creating mobile apps. Everybody else seemed to be moving data to the cloud, writing mobile applications that were far more interactive than anything previously available and moving on from static web content on the desktop to richer desktop-like web applications.

For a while, Adobe seemed to flounder. Like any company faced with the innovator’s dilemma, it tried to double down on its roots and extend its older software in ways it had never been written to do. Around three years after Adobe promised to port Flash over to mobile devices, it finally had a version that worked “well enough”. But after harping on the “open” bandwagon for quite a bit (with partners who seemed to support it half-heartedly no less), somebody at Adobe finally took a long, hard look at the Steve Job’s letter in which he summarizes everything that’s wrong about Flash (and about Adobe).

And the new Adobe is awesome. It’s a company that has woken up to what it does best: create great tools for web (and mobile) developers. Dreamweaver 5.5 significantly improves HTML5 support, works with mobile browsers and supports jQuery out-of-the-box. Adobe picked up some nifty technologies along the way too: it acquired Nitobi, makers of the top-notch Phonegap application that gives it a great foothold in mobile webapp creation (which in a stroke of genius, it then promptly submitted to the Apache foundation and ensured proper stewardship and great continuity). A similar Typekit’s acquisition gave it a commanding position in the web type foundry world.

The turnaround point probably came with the announcement to ditch Flash for mobile devices. That took serious balls and it was from an Adobe coming to the realization that it had to give up the Flash empire. But John Nack puts it really well here:

“When the oak is felled the whole forest echoes with its fall, but a hundred acorns are sown in silence by an unnoticed breeze.”

And those acorns are starting to sprout. Adobe has great new HTML5 development tools in the works, a growing community around web standards, and software that’s looking great on the mobile, desktop and on the web.

But most importantly perhaps, with today’s Creative Cloud offering, Adobe has shrugged itself off its desktop software roots. A more accessible subscription model means that customers used to paying less than a buck for an app will find Adobe’s pricing much more palatable now. And it’s working to innovate on the cloud as well, offering a full suite of creation, storage, sharing and publishing tools.

Adobe is poised to do great stuff. Happy for them!