World at large is consumed by software. We are surrounded by websites and apps used by billions of users everyday. Layman feels infinitely empowered by the sheer amount of photos, jokes and brags he can share with his friends and colleagues – using Facebook, WhatsApp, LinkedIn, or iCloud. Layman never thinks of beating facebook, Youtube or Apple.
But what about a programmer? Deep down, what he / she feels can be described in one word: Envy.
Why didn’t it occur to me first?Competent Programmer with big dream
The good news is here:
Every big tech product is full of bugs nowadays. Despite its growth, or precisely because of it. It’s not that they grew large because of that bug. It’s the other way around.
And it’s neither about data breach, nor about stolen credit cards or infamous buyer/supplier disputes.
This is about their core software promise to the billions of its users.
Facebook has bugs, and truckloads of them:
Facebook mobile app has grown haywire in its updates past its user data breach. Since considerable part of its mobile app layout is web-delivered (via React) – the features are delivered without users having update their apps. This, combined with rapid feature development (marketplace, messenger ads, video monetization), has opened floodgates to countless unexpected behaviors:
- Availability of Share button is quite volatile. You could see it, or not see it. And this has nothing to do with post ownership, or group policies. You could see share button in a group in the morning, and cannot see it in the evening – in the same device, despite moderators vacationing on the beach.
- While you close a link page opened from within a facebook app post, if you are late enough, you won’t be able to see the source that got you to that link. It will be buried forever.
- What you saw on facebook is never accessible to you unless you save it. Only facebook owns it.
- Sometimes you could share as yourself, sometimes as a Page you created, and sometimes as both. This option too is quite volatile and has no correlation with the content or content ownership permissions.
- App and website behaves very differently for same posts, and website is often better.
- iOS and Android app has different behavior for same functionality despite being on the same release cycle.
- Groups are at the mercy of moderators, and idleness of moderators results in massively idle groups even if they contain millions of users.
- Messenger app shows crazy unread message badge for no reason whatsoever.
- Facebook app’s messenger notification icon also shows 1 unread message forever, just to attract an impression to messenger app. In fact, this later one is lying since ages in its top bar, and no developer / product manager even cares to look at how much disgust it has garnered over time.
Apple’s portals have bugs – huge ones:
Apple, the first 1 trillion megalith, mightier than 123 unicorns, never misses to boast about its security and data privacy. But in the race to go to that extra mile, it proves to be extraneously painful for its users.
- Many a times, it is almost impossible to sign out of your iCloud from iPhone. Sign out requires you to enter your password (!) – and even after entering one, you will be lucky to be successful.
- App discovery on app store is screwed forever – and on top of it, Apple is shameless about it.
- Direct title search for an unknown app results in clones, fakes and keyword thief entries – if ever it works.
- Apple’s own app submission workflow is too complex, is ever changing, and quite counter-intuitive to understand. Many programmers stopped being Apple developers precisely because of Provisioning Profile hell.
- In fact, Apple’s development portal is quite complex ecosystem, and it’s legally impossible to distribute apps for testing within your teams, contrary to Android where this is quite simple – just share the IPA file like you share your photos.
- This, in light of the fact that every Apple developer has to pay Apple at least $99/Year to be able to keep his / her on App store, against Google’s one time $25 for Android Play store.
- Beneath it’s white royal mansion of mainstream app store lies the dark underworld of enterprise app distribution – a place where every app submission guideline can be taken for a ride, and world knows about it now.
LinkedIn has bugs, but not quite noticeable ones:
Because of its unique positioning as a professional network, LinkedIn had relatively lesser share of users’ attention span. As a result, they are quite clean when it comes to fake news, fake profiles, and data privacy breaches. But they got their fair share of bugs:
- While navigating to and from the My connections page, number of connections is not always refreshed correctly. Recently added / removed connections fail to reflect on Number of connections.
- There is no defined path of accessing Follower count. Note that this is different from Connections. You reach your followers list through some random notification of a following / unfollowing, but not otherwise. Not directly.
- Notification about posts and articles often leads you to groups and profiles, but not to the content it cites i.e. post / article. This is against user expectation, and you don’t need to be a product manager to catch that.
Netflix and Youtube have bugs:
- Hailed for its recommendation system, Netflix really does poor job with content. Searches produce suggestions that don’t really exist in their streaming database. The classification stills clings to IMDB style drama, crime, horror and mystery categories – something so broad that even millennials have difficulty connecting to it.
- Netflix TV app search results do not show movie description. One has to go inside to watch it just to view the description. This kind of software simply tells the company is more focused on paying millions to studios for content rather than making a hundred dollar bug fixes into its apps.
- Youtube, though proportionally quite larger in terms of content, is worse. And we aren’t talking about streaming of violence. Less said is better.
But isn’t facebook too big to beat with such bugs?
Because while robustness isn’t valued enough today, there is absolute guarantee it will be valued tomorrow. If you care about obvious bugs within the program you write, you can dream of beating facebook one day. All you need is to hit their coolness quotient.
And building robust software is possible. Because it’s executed by machines, not humans. If only humans intend to write it.
Two decades ago, software used to be costly and time-consuming affair, but it used to be robust. With all perils of waterfall development model, Yahoo messenger never showed incorrect number of users in a chat room.
A Windows NT machine always showed correct number of clients connected. When it couldn’t, an ugly alert told us something was wrong, and it was time to restart things.
Through friction, it prompted user to evolve with its terminology, instead of making him dumber through frictionless (graceful?) exit.Software Oldies
There were & are bugs, yes. A Windows OS update takes 2 hours, but forever shows 10 minutes remaining. It’s a bug, but it is not something that affects the intention of the program – OS update. It rattles users, yes, but they will be OK if the update delivered features as intended.
Facebook was created for people to keep tab on people they cared about, and share exciting stuff. If its buttons are inconsistent, and activity data reported has loopholes, it fails to deliver it’s intended experience. It’s more serious than a bug, in fact.
Same holds true for Apple and LinkedIn – failure to manage and display state across various parts of your application is a treachery to the user. Grandma isn’t savvy enough to hit refresh. She probably wouldn’t even know how to kill an app and restart it on mobile device.
Huge software companies are worse than rookie programmers. They are responsible for producing buggy software – something they could fix, and they knew they could fix it, but didn’t choose to.
- They failed to manage state of their data.
- They failed to design their components on Single Responsibility principle.
- Their products rarely crash with millions of users. Not because they are smartly built, but because they are encased within yet another robust grid of decades old failsafe devops software – bought in with millions in licenses.
- They failed to detect bugs despite Agile meetings, TDD jargons and costly tools of project tracking.
- They failed despite their ivy league school programmers enjoying flextimes, gourmet meals and daily massages.
- Shame on them.
But how did it come to that in the first place?
An Irish study suggested evil effects of steroids on teens’ health. The story of software isn’t quite different.
Because their coolness quotient was so hard to ignore – not only by their exponential user growth but also by its developers enthusiasm – they grew on steroids. But still, they used to write better code and respond to user’s feedback.
Then, at some point, sudden spurt of billions of investment drew away programmers with integrity and high calibre. Or they were rendered insignificant. Fresh talent was brought in from ivy league colleges and geek interview sites – and they grabbed every piece of open source, untested, sometimes incompatible libraries from Github. So much so that it became assembly rather than development.
Human resources, Operations and Support were now departments instead of 3 people business. Bugs, despite being known by inner circle of devs, only made it to the release pipeline through lengthy, bureaucratic support channels, who happened to have million other things reported. Example: Apple’s radar.
What will happen with those bugs?
- Users know about it, but can’t do away with them because they are addicted.
- Their developers and product managers also know about it but they simply don’t care. Previously, they always said: “If ain’t broken, don’t fix it.” The newer proverb is: “If users aren’t moving away, why fix it?”
- Their stake owners know about it, but will only care if it makes a dent in their shareholdings.
As a programmer, when you or someone detects bug in your program, stop feeling guilty. Instead:
- Is it something that defeats the core function of the software? If not, make a sticky note on your desk. Design the solution in your head and fix it at leisure.
- Are you fooling the user somewhere in the workflow? If yes, fix it now.
- Is it likely that someone else can make a mess out of your currently robust code? Time to ponder it in your bathroom and fix it gradually.
- Feel great. You are better than those billion dollar factories that shrug it off as: “If they (users) are still coming in hoards, why fix it?”
Just know that if you go to sleep thinking about that mutating variable outside your knowledge – even for a single night, you have beaten those billionaire-owned life-changing unicorns.