Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Mobile Era Conf: Tips & Tricks for Release Engi...

Mobile Era Conf: Tips & Tricks for Release Engineering

A few tips and tricks about how I shape the offshore teams, what release engineering strategy to use, and how Dark launching and feature toggling are implemented to overcome some of the challenges when developing cross-platform mobile apps.

Presented at Mobile Era, Oslo, Norway.

Kosala (Nuwan) Perera

October 01, 2017
Tweet

More Decks by Kosala (Nuwan) Perera

Other Decks in Technology

Transcript

  1. 99X Technology Sri Lanka Product Engineering company 150+ engineers 20+

    ISV and enterprise partners Mostly in Scandinavia 3.5h - 4.5h ahead Compello Group is the 3rd biggest partner
  2. 99X Technology Sri Lanka Compello Germany Compello Sweden Compello Norway

    Compello Hungary 3 distinct product suites 90+ employees 7000+ customers 20+ countries 100K users everyday Microsoft savvy
  3. Desktop Browser Platform Backend Web / Frontend Administration Rules engine

    Invoice approval Metadata … Mobile Platform Cross-platform / Heavy JS Feature vs. Platform Ends up naturally as platform teams!
  4. Product Specialists Backend Web / Frontend Cross-platform / Heavy JS

    Administration Rules engine Invoice approval Metadata Product Specialists Cross-platform / Heavy JS Backend Web / Frontend Feature Teams Transformation is costly but worth it. Still work in progress!
  5. master branch represents the current version | unstable but good

    for internal use bug bug feature feature feature bug release branch release branch stabilise and promote | rename/tag once shipped Git Simple flow. Uses visualstudio.com.
  6. master branch represents the current version | unstable but good

    for internal use monthly milestone release branch stabilise and promote | rename/tag once shipped critical issues Monthly Builds Monthly or at the end of each milestone. Uses visualstudio.com to automate. build: code-push web components binary build: only and only if required build: code-push promote
  7. Binary releases Manually uploaded Backend API release Manually triggered Beta

    Testflight Google Play Beta Shipping Apps Rollout cross-platform apps; both binaries and web components. Still not fully-automated. Appstore Review 2 Stable 4 Code-push releases Manually triggered Beta 1 1 1 Latest Appstore Google Play 3 3 Latest 3
  8. Shake-To-Report Easy way to capture screenshots and report any issues.

    • Testers can shake the phone to report any bugs found during smoke testing • Capture screenshot and bundles the device details, app state and few more details for further investigation • Available for all users to provide feedback and we can turn it off any time we wish
  9. Eureka Service Server-side Discovery to figure out which environment /

    backend services to connect. Still a work-in-progress! debug-mode 2 Beta Latest Stable Internal Eureka Service 1 release-mode user | version | device | platform | ... Stable Latest Beta Eureka Service 1 Backend 2
  10. /// Eureka API: Search for features (C#). /// Payload: {

    debug, version, device, platform, user, ... } /// Returns: JSON /// Altered for bravery :-) JObject defaults; JObject slots; JObject manifest = new JObject(); slots = GetSlotOrDefault(version: ver, debug: debug, json: slots); manifest.Merge(slots, new JsonMergeSettings { MergeArrayHandling = MergeArrayHandling.Union }); var res = req.CreateResponse(HttpStatusCode.OK); res.Content = new StringContent (manifest.ToString(), System.Text.Encoding.UTF8, "application/json"); return res; Dark Launching Look for related API and Configuration. Eureka Service is an Azure Function.
  11. /// Return-Type: JSON /// Altered for bravery :-) "apiendpoint": "http://192.186.22.65/

    rest.lucid.no", "telemetry": { "enabled": false, "tracker": “XX-XXXXXXXX-X", "level": "all" }, "notifications": { "enabled": true, "level": "push", "push": { "apiendpoint": "https://XXX.azure- mobile.net", "key": "XXXXXXXXX" } }, "feedback": { "shaketoreport": true, "template": "summary" }, "disposeifempty": true, "canselfdestruct": true, "canleave": true, "candelegaterights": true, "confirmapproval": false, "canreapprove": false, Sample Manifest JSON JSON configuration returned by the Eureka Service which is required for the app to boot. Eureka Service is an Azure Function.
  12. Feature Toggling Toggling features till it’s safe to use on

    both apps and backend APIs. /// App: Delete account (C#). /// Altered for bravery :-) <div ng-show="vm.options.canleave || vm.options.canselfdestruct" class="list area-divider"> <span class="area-heading-text">ACCOUNT SETTINGS</span> <div ng-show="vm.options.canselfdestruct" class="list"> <a class="item item-assertive" ui- sref="tab.account-delete"> Delete Account<i class="icon ion-ios- arrow-right tap-action-icon"></i> </a> </div> </div> ds.DeactivateUser(context, id); bool delegateRights = (bool)data.candelegaterights.Value; if (delegateRights) { ds.MarkAdministratorIfNotFound(context, context.ClientId); } bool deleteIfEmpty = (bool)data.disposeifempty.Value; if (deleteIfEmpty) { ds.DeactivateClientIfEmpty(context, context.ClientId); } return Ok();
  13. Ship Write code Build Test Contact Kosala Nuwan Perera Technical

    Coach / Architect e: [email protected] tw: @kosalanuwan gh: github.com/kosalanuwan