Thursday, February 22, 2018

Releasing a new mobile app version

It's the Go Live. You've finished all development, gone through all the QA processes, stakeholders approved the new app, marketing campaign is scheduled. Releasing a new app is always exciting. However, releasing a new version of an existing app implies some extra considerations, particularly if it's a major version with lots of differences from the previous version. With everyone receiving automatic updates from the stores and with in-app updates like OutSystems provides, you have to take special caution when releasing a new version. You'll automatically impact customers, disrupting their routines, changing their lives (for better or worse).

So, here are some topics to consider when updating an existing mobile application.

Don't change app identifiers: Imagine you have an app in the store called MyCarApp (with an identifier like Than you decide to release a new version of your app and you want to call it MySuperCarApp and change the identifier to This is no longer a new version of the previous app, even if you see it that way and want to deprecate the old one. With the identifier changing, it's a new app on the stores and, as a result, you lost all your customer base. You are now dependent on them explicitly moving to the new app. So, keep the identifier. Just an extra note here, don't use weird identifiers. Don't use weird, unrelated ids. Don't let external, consulting companies decide for you. Run away from things like com.ConsultingFirm.MySuperCarApp. This will pursue you for the rest of your app lifespan, you can't change it (unless you fall in the scenario stated above). To pick a good id, please read the Reverse Domain Name Notation info.

Don't remove features: Imagine buying a new car and the manufacturer decided to remove the side and inside mirrors because they wanted to quickly release the new car model and didn't had the time to develop the mirrors. What would be your reaction? "What? I was used to having mirrors!". The seller can reply: "you can drive without them, the engine runs perfectly good and you'll get to your destination, just... be more careful". Argh, don't do that, right? It's the same with new version of mobile apps. If you remove features that users like and are used to, you'll take a huge hit in stores. People will get mad and automatically say the previous version was better, even if the new is super fast with a unique look and feel. Yeah, the car is cool, but... it doesn't have mirrors!


What to do? Metrics. First and foremost, understand what your users really are using in the app. Are they really using feature "A"? How many times users enter screen "B"? Data driven decisions, decide with the proper info in your hands. You'll end up discovering interesting usage patterns. Hey, there are probably features no one ever used.

Don't do a big layout disruption: Although this sounds weird (disruption is good!), it's actually something you also need to consider. We're humans and we're used to some daily routines. Our brain is "trained" to not think about most of what we do on a daily basis, like breathing, walking, brushing teeth, closing doors (one of the best books ever - Thinking fast and slow, by Daniel Kahneman). Same goes for apps: if you are used to having a shortcut in a menu that takes you to the feature you regularly use and suddenly it's no longer there but in a place that requires 4 extra clicks to get to where you went before with 2 clicks, people won't like it.

Don't loose user data: You can't do it. No way. If the user was properly registered in version 1.0 of the app, you cannot force him to insert all info again in the new version. Migrate user data to the new app. It's a must do, otherwise, you will lose users. Some won't like it, others will have lost the password, others won't remember the user, some will have to register again when they are in the banking row... you get it. And there's no technical limitation you can invoke here, "the new app no longer stores info in file "x" of the device but uses local storage" or... no chance. Migrate user data, keep the transition seamless!

Users don't know the concept of MVP: In software development, we use a lot the concept of MVP (Minimum Viable Product). But most people don't know what this is. When you release a new version, people won't know if your planning to evolve the app nor understand release cycles, fast feedback, etc. They are using it now, not tomorrow. They expect everything to be there, not in the future. You can assume it's going to have bad reviews and you will improve it. It's up to you...

They will compare: It's human nature. We compare everything. "This new car is much better than the old one", "This restaurant has a faster service than the one we went yesterday", "This TV has a much better image than that one". There are actually lots of techniques used in different industries that take advantage of this effect, called Framing (read Make a Choice). So, expect users to compare the latest version with the previous one, for the good and the bad.

Do a phased rollout: Nowadays, stores have great mechanisms to proper release an app. Beta users and Test flight allow you to safely test your app in real world scenarios with users. Then, both Google Play and Apple Store allow phased rollouts (e.g.: 10% of the user base, then 20%, then more 20%...). This is great because it allows you to control usage of backend servers, get phased feedback from users and reduce risk by affecting only a subset of customer base with a the new version. OutSystems has a great in-app update that also allows feature flag, but for major versions, it's better to use store mechanisms.

Have a great release!


Saturday, February 3, 2018

Keep learning

There are things in life that only experience can teach you. No matter how many hours of training you have, nothing compares to that unique feeling of seeing a message like the one below in a production database:

Rows deleted

Particularly if you were expecting to delete just one or two rows. I've been there too, trying to recover the latest backup as fast as possible because the company was losing thousands of euros every minute. I learned the hard way that production databases are a sanctuary and no script can run without a transaction. This seems obvious today, but not when you just graduated and you’re under stress. No training can give you the adrenaline of hammering IIS 6 metabase in a live production front-end. Project management in real life with customers is far more funny than theory tells you, and MSProject is actually far more weird when used on a daily basis. All these wounds have healed and made me much better today, no doubt. And all were valuable lessons and great stories. However, you cannot discard the value of class training for two very important reasons.


Be the best: I graduated in Computer Science. After 4 years working, I started having Project Management tasks. It’s a common progress, from IT to management. However, I felt I needed more than just “be thrown to the sharks”. So, I grabbed 10k€ and went all in for Project Management (an entire year, I would go to work at 9a.m., out at 6p.m. and non-stop until 11p.m., not counting group work and all those things. Oh, and family, friends, life…). Next, I felt I still lacked negotiation skills (dealing with customers or even day-to-day negotiation is crucial), so, I spent another 3k to further understand important topics. Last year I felt I wanted to further enhance my leadership skills. So, another 3k and I went in search of some extra guidance. What I’m saying is: there’s a lot of things experience can’t teach you. Go for the extra mile. It was expensive, but fun. Your career, your responsibility. Why not?

Networking: This is something that amazed me. While graduating, everyone was looking into the same: computer science. When working in a consulting firm, the customers where from a limited scope: banking, insurance, telco. However, in these post-graduations, I got people that sold diamonds, insurance companies CIO’s, a guy that has an olive oil company, a CTO of a big pharmaceutical company, everything. People with civil engineering background, marketing… So, not only you get the official training, but all the connections and extra experiences. Priceless. By the way, that’s why I picked 3 different schools.

So, while experience will teach you the hard lessons, training is an investment in yourself, will boost your development and give you different perspectives.

Be a teacher, be a student.
(ignore the branding, the message is awesome)