Skip to main content

Posts

Showing posts from 2019

Facebook is building an operating system so it can ditch Android

Facebook doesn’t want its hardware like Oculus or its augmented reality glasses to be at the mercy of Google because they rely on its Android operating system. That’s why Facebook has tasked Mark Lucovsky, a co-author of Microsoft’s Windows NT, with building the social network an operating system from scratch, according to The Information’s Alex Heath. To be clear, Facebook’s smartphone apps will remain available on Android. “We really want to make sure the next generation has space for us,” says Facebook’s VP of Hardware, Andrew ‘Boz’ Bosworth. “We don’t think we can trust the marketplace or competitors to ensure that’s the case. And so we’re gonna do it ourselves.” TechCrunch

Great Teams Are About Personalities, Not Just Skills

The scientific evidence indicates quite clearly that individuals’ personalities play a significant role in determining team performance. In particular, personality affects: What role you have within the team How you interact with the rest of the team Whether your values (core beliefs) align with the team’s In our own work we found that psychological team roles are largely a product of people’s personalities. For example, consider team members who are: Results-oriented. Team members who naturally organize work and take charge tend to be socially self-confident, competitive, and energetic. Relationship-focused. Team members who naturally focus on relationships, are attuned to others' feelings, and are good at building cohesion tend to be warm, diplomatic, and approachable. Process and rule followers. Team members who pay attention to details, processes, and rules tend to be reliable, organized, and conscientious. Innovative and disruptive thinkers. Team members who n

Amazon Builders' Library

How Amazon builds and operates software There’s no question the world will be a better place if everyone can innovate more quickly and efficiently. And if stuff just works better. For that reason, I’m excited that we are sharing what we’ve learned with you in The Amazon Builders’ Library. -Charlie Bell, SVP, Amazon Web Services Available so far: Avoiding insurmountable queue backlogs Challenges with distributed systems Going faster with continuous delivery Ensuring rollback safety during deployments Static stability using availability zones Avoiding fallback in distributed systems Caching challenges and strategies Leader election in distributed systems Timeouts, retries and backoff with jitter Using load shedding to avoid overload Implementing health checks Workload isolation using shuffle-sharding Instrumenting distributed systems for operational visibility Amazon

A KPIs Guide for Google Play Apps and Games: Intro to Metrics

Daily Revenue DAU New Installs Organic Deep Link Returning Users Dx Retention Install cohort size ARPDAU Daily Conversion New Buyer Conversion Repeat Buyer Conversion ARPPU Average Tx Value #Tx/Buyer Nice two-way tree with detailed explanation: App user growth and retention versus revenue per user. Google Play @Medium.com Part 2: Acquiring and Keeping New Users “What does the early engagement activity of my new users tell me about their likelihood to return?” “What can I test in order to increase conversion on my store page?” Google Play @Medium.com “What is the core action that I want my new users to perform to drive strong retention?” “What are some tips for reactivating lapsed users?”

Organisational Dysfunctions Mirrored as Architectural Complexity

Within this broad space, one sub-topic that frequently captures my attention is the relationship between organisational dysfunctions and their influence on software architecture. One pattern I’ve observed in large and smaller organisations is The Accountability Protection Buffer. This pattern arises when a team needs to shield themselves from problems inherited through services they depend on owned by other teams. Nick Tune @ Medium.com

Why Dropbox sunsetted its universal C++ mobile project and AirBnB its React Native implementation

Dropbox:  The (not so) hidden cost of sharing code between iOS and Android By writing code in a non-standard fashion, we took on overhead that we would have not had to worry about had we stayed with the widely used platform defaults. This overhead ended up being more expensive than just writing the code twice. The overhead of custom frameworks and libraries The overhead of a custom development environment The overhead of addressing differences between the platforms The overhead of training, hiring, and retaining developers Although writing code once sounds like a great bargain, the associated overhead made the cost of this approach outweigh the benefits (which turned out to be smaller than expected anyway) Dropbox Blog Airbnb: Sunsetting React Native [..] As a result, moving forward, we are sunsetting React Native at Airbnb and reinvesting all of our efforts back into native. React Native at Airbnb @Medium.com

Firebase realtime database stability - and monitoring

Firebase SLA Firebase will use commercially reasonable efforts to make Firebase available with a Monthly Uptime Percentage (defined below) of at least 99.95%, in each case during any monthly billing cycle (the "Service Commitment"). Firebase SLA Service Level Agreement for Hosting and Realtime Database Firebase Status Page Why Firebase sucks In the 3 years since starting to use Firebase we’ve suffered from so many outages I’ve literally lost count. @ Medium.com Status History Overview Statusgator Does anyone has real-life experience with the stability of Firebase or Firestore? Please leave a comment! We heared that Firestore is much more stable than Firebase which usage for new project is discouraged...

Animations with Lotti for SVG-like Animations created by After Effects for iOS, Android and React Native by AirBnB

Lottie AirBnB: Behind the scenes of our new open-source animation tool. Lottie is an iOS, Android, and React Native library that renders After Effects animations in real time, and allows native apps to use animations as easily as they use static assets. Lottie uses animation data exported as JSON files from an open-source After Effects extension called Bodymovin. The extension is bundled with a JavaScript player that can render the animations on the web. Lottie also has several features built into its API to make it more versatile and efficient. It supports loading JSON files over the network, which is useful for A/B testing. It also has an optional caching mechanism, so frequently used animations, such as a wish-list heart, can load a cached copy each time. Lottie animations can be driven by gestures using the animated progress feature, and animation speed can be manipulated by changing a simple value. iOS even supports adding additional native UI to an animation at

Microservice Micro-Feature architecture for mobile Apps

RIBs is the cross-platform architecture framework behind many mobile apps at Uber. The name RIBs is short for Router, Interactor and Builder, which are core components of this architecture. This framework is designed for mobile apps with a large number of engineers and nested states. The RIBs architecture provides: Shared architecture across iOS and Android. Build cross-platform apps that have similar architecture, enabling iOS and Android teams to cross-review business logic code. Testability and Isolation. Classes must be easy to unit test and reason about in isolation. Individual RIB classes have distinct responsibilities like: routing, business, view logic, creation. Plus, most RIB logic is decoupled from child RIB logic. This makes RIB classes easy to test and reason about independently. Tooling for developer productivity. RIBs come with IDE tooling around code generation, memory leak detection, static analysis and runtime integrations - all which improve developer product

Mobile Development: Native, Hybrid or Web?

When starting a new app from scratch you are faced with a lot of technical choices based on your own targets and considerations. Kiran Shinde has a nice overview and pro and contras. Choices Native Approach Kotlin Swift Web Approach PWA Cordova Cross-Platform Approach Flutter React Native Xamarin Considerations Required Platform Support Application Functional Specs Goto Market Time Budget Current Expertise Check details here: Pathways to Mobile Development @Medium.com Kiran Shinde

Destroying Backends - Serverless Backends for Mobile Apps iOS or Android

Destroying Backends with Serverless Destroying Backends with Amplify Destroying Backends Amplified Mobile App Development with React Native and AWS Amplify Introducing the AWS Amplify GraphQL Client AWS Amplify API Docs Amplify GraphQL client The Amplify GraphQL client is a lighter weight option if you’re looking for a simple way to leverage GraphQL features and do not need the offline capabilities or caching of the Apollo client. If you need those features, choose the AWS AppSync SDK. AWS AppSync SDK The AWS AppSync SDK enables you to integrate your app with the AWS AppSync service and integrates with the Apollo client found here. The SDK supports multiple authorization models, handles subscription handshake protocols for real-time updates to data, and has built-in capabilities for offline support that makes it easy to integrate into your app.

Automatic Semantic Versioning via fastlane

Boss: “Can you release a new version of Android Alpha?” Developer: “ Yeah, sure. Hmm 🤔. Hey boss, how should I do that?” Boss: “Just run fastlane android alpha.” Developer: “Yeah, but what about version? Shouldn’t I update it in those Gradle files?” Boss: “No. Just run fastlane android alpha.” Developer: “And build number? We use it as a version code on google play.” Boss: “Just run fastlane android alpha and let’s have a coffee. ☕ I’ll tell you how it works.” UseJournal.com

iOS App modularization to reduce compiling time

Modularize an iOS application By default, you only have one target for your app, and possibly other targets for unit testing, and UI testing. But if your app is developed on one single target, when you change one line of your code, Xcode will eventually rebuild the whole app... You can manage to not only build, but also run a module by creating a sample app that import only the framework concerned, and using the features contained in the module. Therefore, when you are changing the code of a framework, only this framework will be rebuilt at the next compilation, because other frameworks and targets haven’t changed. This is where a precious time is saved. Medium.com Common problems when modularizing an iOS application In this post I am going to present most common problems I went through when I was modularizing an existing big iOS app, and what I did to solve or to avoid the problems. Medium.com Rayane Kurrimboccus

Tips for working with Firebase Remote Config

Caching As long as we're talking about loading strategies, let me hit on a related topic; caching. It sometimes confuses developers that values from remote config are cached for 12 hours instead of being grabbed immediately every time you call fetch(). And while you can reduce this cache time somewhat, if you start making network calls too frequently, your app might start getting throttled, either by the client, or the Remote Config service. Obviously, while you're developing and testing your Remote Config implementation, this can be inconvenient, which is why you can override the local throttling behavior by turning on developer mode . Force Update of Remote Config With Firebase Cloud Messaging, you can send a data-only notification to all of your devices, letting them know that there's an urgent update pending. Your apps can respond to this incoming notification by storing some kind of flag locally. The next time your user starts up your app, it can look for thi

Google Play Store now open for Progressive Web Apps

Chrome 72 for Android shipped the long-awaited Trusted Web Activity (TWA) feature, which means we can now distribute PWAs in the Google Play Store! Is TWA a Hybrid framework, similar to Cordova? No. With Cordova or other hybrid solutions, you are typically shipping your web resources (HTML, JS, CSS, etc.) within your APK package. Also, the engine is different and isolated from the users’ browser, so no session or cache sharing. With Trusted Web Activity you don’t need to package any resource file from your PWA (only native components, in case you want them); all your resources will be downloaded and updated on the fly from your Service Worker. Your PWA will still be rendered with the installed Chrome version, sharing all storage, cache, and sessions with the browser. Therefore, if your user has a session on your website opened when the user installs the app from the Play Store, she will still be logged in. The user is just installing a shortcut to Chrome using a special mode. How

Clean Swift - an alternate to VIPER on iOS

I would like to talk about the alternative to VIPER — Clean Swift. At first glance, Clean Swift is similar to VIPER; however, the differences become visible after looking at the way the modules interact. The interaction between them happens in cycles. Data transmission is based on protocols (again, similar to VIPER), which allows for replacing one of the components of the system with another one. Generally the interaction process looks like this: the user clicks on a button, the View Controller creates an object with a description and sends it to the Interactor. Interactor, in turn, launches a specific scenario following its business logic, then produces a result object and transfers it to Presenter. Presenter generates an object with the data formatted for presenting it to the user and sends it to the View Controller. Clean Swift (as opposed to VIPER) has a unidirectional flow of data processing and decision making . There is always only one cycle — View Controller— Interactor — 

TestFlight: Invite testers per public link

Apple launched Testflight public beta invite links as announced in last WWDC: You can invite up to 10,000 testers using just their email address or a public invitation link. Link will be valid for 90 days and after that it will expire. Please find here a step-by-step tutorial: Medium.com Would be nice add-on for fastlane . Take a look also at fastlane boarding .

Starting with iOS 11 Cookies are NOT shared any longer between Safari and Safari View Controller

This year, Apple announced that starting with iOS 11, all instances of Safari will no longer share the same cookie space. This means that cookies set in the main Safari browser app are no longer readable from an instance of Safari within another app that could be created within a native app via the SFSafariViewController. Branch.io

Changing Android ID on a device for test purposes for Android <=7

Setting a customId: adb shell content insert --uri content://settings/secure --bind name:s:android_id --bind value:s:customId Checking the current androidId: adb shell content query --uri content://settings/secure --where "name=\'android_id\'" Resetting the androidId: adb shell content delete --uri content://settings/secure --where "name=\'android_id\'" Hint: Works for Android <= 7 only since with Android 8 the Android ID is created differently.