Farewell, PhoneGap: Reflections on my Hybrid App Development Journey
Tags: webdev, ionic, mobile, javascript
Published: 2020-08-13 12:13:56

Adobe has officially announced the shutdown of [PhoneGap and PhoneGap Build](https://blog.phonegap.com/update-for-customers-using-phonegap-and-phonegap-build-cc701c77502c).

In the context of the hybrid app development world, this is the end of an era. It's certainly the case for me: it sped up my transition from .NET to web development, and ultimately led to me landing a wonderful role at Ionic. A heartfelt thanks to the team(s) at Adobe and those in the community who supported me along the way! 

PhoneGap has had such a positive impact on my career. Here's my hybrid app development journey.

## From .NET to Android Development

It was 2010, and I had just bought my first smartphone - a clunky Android device. I was .NET developer building tools and WinForm desktop apps for a SaaS company. That was fun, but my work was only used by a handful of corporate clients. This Android phone had potential - I could build an "app" and reach anyone in the world via the app marketplaces? Sign me up!

I learned Java in college, so Android development was the obvious choice to learn. I bought a beginner Android book, "Hello, Android", and got to work. The dev experience was brutal to say the least. Between confusing Eclipse IDE errors and trying to understand the ins and outs of mobile development, I almost gave up multiple times.

I pushed through, and in February 2011 released the app. Frustrated that Netflix movies would expire and be removed from my instant queue without notice, I explored my options. I discovered that Netflix had an open API, and while not used on the site, every movie was assigned a "movie availability" (expiration) date! 

**FixMyQ** was born: it displayed each movie in your Instant Queue along with its expiration date. Optionally, with one button tap, you could rearrange your entire queue by the movies expiring next. In practice, after deciding to watch something on Netflix, you could pull up my app first then pick based on what was expiring soonest:

![FixMyQ - Queue](https://dev-to-uploads.s3.amazonaws.com/i/dtb91gsndvx8z7ok57pj.png)

Despite being super ugly (ha), the app worked quite well and was decently popular. 

## What About iOS?

The app was doing well, but I was missing out on a huge audience: iOS users. I quickly realized that targeting iOS meant that I had to completely rewrite the app - yikes! Fortunately, there was another way: PhoneGap.

Through my day job work and attending developer conferences, I noticed this thing called "JavaScript" was skyrocketing in popularity. I began to actively seek out opportunities at work to use it - landing on ASP.NET MVC, jQuery, and Knockout.js. I don't remember exactly how I found PhoneGap, but I loved the idea of "write once, run everywhere": targeting web, iOS, and Android with one code base.

Additionally, their [beliefs, goals, and philosophy](https://phonegap.com/blog/2012/05/09/phonegap-beliefs-goals-and-philosophy/) really struck a chord. The team recognized that the web **was not** a first class development platform, but they fully believed it could be, laying out a strong vision for its future.

What really stood out at the time (and still does) was this line:

> "The ultimate purpose of PhoneGap is to cease to exist."

To this day, I've yet to see another project put that front and center! It made sense, though: they were committed to the "standardization of the web as a platform."

I was convinced and started building FixMyQ for iOS using PhoneGap 1.2.0. Unfortunately, I didn't get very far: Netflix deprecated then eventually shut down their open API - effectively killing the app. It was a great first mobile app project though and made for a [fun retrospective](https://www.netkow.com/fixmyq-android-app-post-mortem/).

> (Not so) hilariously, in 2020 Netflix still acts like movies don't expire. C'mon, Netflix!

## Hooked on Hybrid

Despite shutting down my first app, I was excited by PhoneGap's potential and got to work right away on a new app idea. Work had just bought everyone a Fitbit device. I was also in the WeightWatchers program, so I wondered what it would take to integrate them together. A few months later, **Fitwatchr** was born and thanks to PhoneGap, I created iOS, Android, and Windows Phone apps all from one code base:

![Fitwatchr - Activity](https://dev-to-uploads.s3.amazonaws.com/i/6szyrjomn2s4rvfpvw5t.png)

Besides improving my web development skills, Fitwatchr was my first foray into becoming somewhat of an  entrepreneur: in order to improve app sales, I learned so much about marketing, sales, and product development, ultimately earning thousands of dollars over a ~5 year timespan. As the app started making waves, I partnered with my good friend [David Lapekas](http://davidlapekas.com/) for design and marketing help - he was absolutely critical to my apps' success.

You might say I was "hooked on hybrid!" 

My next app scratched another itch. I love craft beer and had gotten really into tracking beer tastings with Untappd (another PhoneGap/Cordova - and later, Ionic Framework - app!). Their app was great, but didn't work well in offline scenarios (such as beer festivals or inside crowded brewery tasting rooms) where cell service was weak or wifi non-existent. With **BeerSwift**, you can queue up the beers you're drinking, rate them, then check them all into Untappd with one button tap (once you're back online):

![BeerSwift - Queue](https://dev-to-uploads.s3.amazonaws.com/i/vufmt2fn8kuwkb4gyba6.png)

These apps were so much fun to build. I worked on them during the days of Angular 1, but was honestly scared off by how complex it seemed. So instead, I opted for a simpler stack: Vanilla HTML/CSS/JavaScript paired with jQuery, KendoUI Mobile for UI components, and Knockout.js for declarative bindings and automatic UI refresh.

As you can tell from those screenshots, the apps look much better than my original Android app, but the UI still has some rough edges. Someday I'll rewrite them using [Ionic Framework](https://ionicframework.com/docs/components) UI components...

## Enter PhoneGap Build

While PhoneGap makes it easy to create an app that runs on all platforms, in practice managing each platform is challenging, especially as a solo developer. There are nuances to each one as well as headaches with security profiles and certificates (*cough cough* iOS!). Enter Adobe's PhoneGap Build service, which let you build your PhoneGap-based Android, iOS, and Windows Phone apps in the cloud. It was incredibly successful as one of the early attempts at Mobile CI/CD since you could avoid wrestling with the challenges of native IDEs and tooling. Everyone in the PhoneGap community embraced it: solo devs, teams, and large companies.

After gaining lots of experience with the service, I began sharing various [tips and tricks](https://www.netkow.com/categories/phonegap/) on my personal blog. I'm particularly proud of the ["Cut Your PhoneGap Build App Size In Half With This One Weird Trick!"](https://www.netkow.com/cut-your-phonegap-build-app-size-in-half-with-this-one-weird-trick/) post - one of my first attempts at "marketing." 😂

## Conference Talk and PhoneGap Build Pluralsight Course

It was rewarding to share what I'd learned with the community. I kept plugging away on both app development and blogging. From there, I decided to give public speaking a try, presenting a talk on hybrid app development at [That Conference 2014](https://old.thatconference.com/sessions/Session/1171).

By 2015, hybrid app development had become far less niche and I had built up a lot of experience with several successful apps under my belt. I looked for my next challenge and settled on creating a video course on PhoneGap Build. With only a small blog audience, I turned to Pluralsight. I was a long-time fan - they are known for their high quality courses and popular authors. After a brief audition, I was in! You can read about that *2 year journey* (yeah) [here](https://www.netkow.com/pluralsight-course-retrospective/). It was incredibly challenging with lots of ups and downs, but in the end, I pulled it off.

<blockquote class="instagram-media" data-instgrm-captioned data-instgrm-permalink="https://www.instagram.com/p/BWbqB8njmXD/" data-instgrm-version="8" style=" background:#FFF; border:0; border-radius:3px; box-shadow:0 0 1px 0 rgba(0,0,0,0.5),0 1px 10px 0 rgba(0,0,0,0.15); margin: 1px; max-width:658px; padding:0; width:99.375%; width:-webkit-calc(100% - 2px); width:calc(100% - 2px);"><div style="padding:8px;"> <div style=" background:#F8F8F8; line-height:0; margin-top:40px; padding:38.51851851851852% 0; text-align:center; width:100%;"> <div style=" background:url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACwAAAAsCAMAAAApWqozAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAAAMUExURczMzPf399fX1+bm5mzY9AMAAADiSURBVDjLvZXbEsMgCES5/P8/t9FuRVCRmU73JWlzosgSIIZURCjo/ad+EQJJB4Hv8BFt+IDpQoCx1wjOSBFhh2XssxEIYn3ulI/6MNReE07UIWJEv8UEOWDS88LY97kqyTliJKKtuYBbruAyVh5wOHiXmpi5we58Ek028czwyuQdLKPG1Bkb4NnM+VeAnfHqn1k4+GPT6uGQcvu2h2OVuIf/gWUFyy8OWEpdyZSa3aVCqpVoVvzZZ2VTnn2wU8qzVjDDetO90GSy9mVLqtgYSy231MxrY6I2gGqjrTY0L8fxCxfCBbhWrsYYAAAAAElFTkSuQmCC); display:block; height:44px; margin:0 auto -44px; position:relative; top:-22px; width:44px;"></div></div> <p style=" margin:8px 0 0 0; padding:0 4px;"> <a href="https://www.instagram.com/p/BWbqB8njmXD/" style=" color:#000; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px; text-decoration:none; word-wrap:break-word;" target="_blank">So unbelievably stoked! A long journey comes to an end. My @pluralsight course has been released! Cheers to a wonderful editorial team and @nursingaround &#39;s support. #PhoneGap #Cordova #MobileDev</a></p> <p style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; line-height:17px; margin-bottom:0; margin-top:8px; overflow:hidden; padding:8px 0 7px; text-align:center; text-overflow:ellipsis; white-space:nowrap;">A post shared by <a href="https://www.instagram.com/dotnetkow/" style=" color:#c9c8cd; font-family:Arial,sans-serif; font-size:14px; font-style:normal; font-weight:normal; line-height:17px;" target="_blank"> Matt Netkow</a> (@dotnetkow) on <time style=" font-family:Arial,sans-serif; font-size:14px; line-height:17px;" datetime="2017-07-12T03:53:41+00:00">Jul 11, 2017 at 8:53pm PDT</time></p></div></blockquote> <script async defer src="//platform.instagram.com/en_US/embeds.js"></script>

The Pluralsight course was not a major hit by any means, but it was definitely a personal success: I learned basic video editing and production, and improved my writing and speaking skills along the way - all skills I would eventually use regularly in my DevRel role at Ionic.

## A Hint of the Future

At some point during the development of my PhoneGap apps, I became frustrated trying to create the variety of icons and splash screens. Besides the act of creating them (I'm certainly no designer!), generating them for each platform and dimension was tedious. I'm not entirely sure, but I believe this was the first time I learned about Ionic: I stumbled upon [a blog post of theirs](https://ionicframework.com/blog/automating-icons-and-splash-screens/) on automating icon/splash screen generation.

I created an Ionic account just to generate those images for free with the Ionic CLI (they were originally built in the cloud). Thanks, Ionic! 😬

Little did I know where I'd end up someday...

## Writing for the PhoneGap Blog

As part of the efforts to promote my PhoneGap Build Pluralsight course, I reached out to the PhoneGap team and asked about writing a post for the official blog. They graciously accepted, no doubt largely due to my course and personal PhoneGap blog posts, so I wrote ["Hybrid Mobile Apps are Overtaking Native."](https://blog.phonegap.com/hybrid-mobile-apps-are-overtaking-native-951a3aacacd1) This was a fun one: I covered the most popular concerns about hybrid app development from a *fresh 2017 perspective*: performance, design, frameworks, and tooling. 

By then, I was a regular reader of the Ionic blog and used (borrowed?) an image of theirs for the post (Thanks again, Ionic!). It was well received and led to a bunch of native developers leaving many "spirited" comments. Ha!

Later, after the iPhone X was released, I struggled to update my PhoneGap apps to support the infamous "notch." I eventually figured out a general solution then wrote another guest post for the PhoneGap blog. To date, ["Displaying a PhoneGap App Correctly on the iPhone X"](https://blog.phonegap.com/displaying-a-phonegap-app-correctly-on-the-iphone-x-c4a85664c493) is my highest viewed piece of writing ever with over 223,000 views (the notch still confuses developers to this day!).

My final post for the PhoneGap blog, ["PhoneGap Devs: It’s Time to Embrace a UI Framework"](https://blog.phonegap.com/phonegap-devs-its-time-to-embrace-a-ui-framework-42e69a20ae) was a clear call to action to the community: pick a UI framework so that you can focus on building your app instead of dealing with various mobile issues (like the iPhone notch!). By that time, I was working for Ionic so naturally the article focused on the Ionic Framework.

Huge thanks to the PhoneGap team for allowing me to guest on the blog!

## Finding my Dream Job at Ionic

By the time 2018 rolled around, I was even deeper into web development, working regularly with Angular 2 and .NET Core at my day job. Angular, while initially challenging to learn, was a breathe of fresh air compared to my now-aging "PhoneGap stack." 

One night, I saw a tweet from the Ionic team:

<blockquote class="twitter-tweet" data-lang="en"><p lang="en" dir="ltr">Calling all product champions! Do you have a technical background, but enjoy being the face and voice of the product, rather than sitting behind the scenes? Ionic is looking for a Senior Product Evangelist to join the team! Position can be remote! <a href="https://t.co/lHQo6OHrcJ">https://t.co/lHQo6OHrcJ</a></p>&mdash; ionic (@Ionicframework) <a href="https://twitter.com/Ionicframework/status/986327763115302914?ref_src=twsrc%5Etfw">April 17, 2018</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

The timing was simply incredible: at that moment I was taking a break from packing up my apartment. I planned to move back to Madison, Wisconsin that Summer, where Ionic headquarters is located. Leveraging my PhoneGap guest blog posts, Pluralsight course, and hybrid app experience, I landed the role as a Product Evangelist/Developer Advocate. See the full story [here.](https://www.netkow.com/celebrating-one-year-at-ionic/)

When I started building PhoneGap apps, I had no idea what it would lead to. Hybrid app development has been such an incredibly rewarding career path. After years of hard work, some luck along the way, and support from an amazing community, I'm grateful to work on hybrid app development fulltime now, and for such an awesome company as Ionic.

## PhoneGap's Legacy

So as you can see, PhoneGap changed my life for the better. I owe a lot of my career to this amazing technology and the people that built it. But enough about me. 😀 

Did PhoneGap succeed in its mission to make the web platform a first-class citizen?

> "We believe in a web open to everyone to participate however they will. No locked doors. No walls." 

Broadly speaking, PhoneGap absolutely succeeded: as pioneers of hybrid app development, they "solved" cross-platform app development challenge while also being incredibly influential in making the web a first-class development platform.

In the time since it was created - over 12 years ago - we've seen the web platform explode in popularity: the vast majority of developers are web developers and many folks new to software development learn web dev first since it's so accessible and open.

Sure, the web platform isn't perfect, but it's come a long way and will continue to evolve. It has matured a lot over the past few years, from modern JavaScript (ES6 and beyond) to package managers like npm, to built-in cross-platform browser APIs that provide rich user experiences, to the rise of Progressive Web Apps (PWAs) that fill the "gap" in "PhoneGap."

Now, all of us at [Ionic](https://ionic.io) are ready to carry the torch as the modern leader of cross-platform hybrid app development. Our native runtime tool [Capacitor](https://capacitorjs.com), as a spiritual successor to PhoneGap, offers a modern, web-first approach to hybrid and is [backward compatible](https://capacitorjs.com/docs/cordova) with PhoneGap.

Thank you to Adobe and the PhoneGap team for their hard work over the years and helping so many developers embrace web development. Long live the web platform!