State of modern day mobile client engineering - it's kinda broken
I have been developing mobile application at LinkedIn for half a year. Coming from a heavy Java infrastructure background, picking up Android development was a breeze. I am quite proud of what my team and I have been able to accomplish in relatively short period of time. (link).
I have a fairly idealized view of software engineering. I never thought of the art of creating software as simply a 'job' that plays rent. Mobile engineering, however, started to feel like a job, much to my surprise and annoyance. I could not quite verbalize my sentiment until I recently came across Geoff Schmidt's 'Javascript State of the Union'. His thesis can be summarized as - we are using the wrong model and tools of software development to create modern connected client applications. My takeaway is - we have been building mobile apps (a connected client) the wrong way!
A typical application at a tech company gets created in the following way: (1) buttloads of meetings about product market fit, (2) designers working their magic to create beautiful UI/UX experience, (3) teams of iOS and Android developer scatter about to mimic the designer templates in the respective platforms. I have a huge problem with step (3). Why in the world are we doing more or less the same exact engineering process twice (iOS+Android)?
Moreover, mobile development feels like re-inventing the wheel at every turn. I found myself chilling on stackoverflow and blogs all day to re-create the same thing over and over. Even mobile libraries are just higher level abstractions of re-creating the process in different environments (http calls, layout rendering, async processing, authentication, etc).
Just to add salt to the wound, every version of Android, and every version of iOS is just slightly different from the previous versions. A good developer will have a reservoir of these nuisances, and how to hack around them. This whole process feels like web development back in the '90s when we were hacking to create the same behavior in IE, Mozilla, Netscape, etc. And then jQuery came along, and the world of web dev was saved from the chaos (for the most part).
In today's mobile engineering environment, you find companies like Testin that help you run and test your mobile application on every physical device they can get their hands on. This is broken, Testin as a company should not exist (no offense). We should have better software tools that give us assurance when we test our applications. We should not need to worry about version behavior, cross-platform behaviors, etc.
I am based in the Silicon Valley, and as most entrepreneurs here know, it is nearly impossible to be a consumer technology company without investing heavily in the mobile space. Every metric in the world is showing mobile engagement overtaking desktop by the strides. And as Geoff Schmidt said in his state of the union, big tech giants are raising the bar for mobile app quality. Users will not keep crappy apps on their phone. Many startups make the tragic mistake of looking at signup metric rather than engagement metrics (i.e. WAU). This is making the consumer tech startup community increasingly difficult for new entrants. Startups finally started to seem cost-effective with the emergence of affordable cloud computing, and then mobile development cost comes and dump a big bucket of bills on entrepreneurs. Startups are struggling to hire the engineers who can build great apps, in term, they are struggling to get their products noticed by the public. All in all, consumer product development and discovery is becoming increasingly difficult, because everyone is busy re-inventing the wheel. Airbnb is not a great company because they have beautiful apps, they have an amazing insight about the hoteling marketspace. But airbnb they would not have survived without quality mobile applications built to interface with their users.
Here comes my prediction for the future: A cross-platform development solution is going to happen. The API's of different platforms will start to converge (as was the case with browsers). Mobile Operating Systems will be commoditized. A developer will not need to learn 3 different languages, struggle with a million small differences just to build a single product. React Native, Meteor, Cordova are all moving in this direction.
We are not there yet, though I am hopeful. Standardization of a single development framework will take tremendous time and effort. But from my experience hanging out with some of the brightest technologists in the world, I know that we will not settle until the world of mobile becomes a better place.