I think ... - tipshttps://blog.kmonsoor.com/2020-08-22T12:12:00+06:00What I learned managing weekly release of a 50M+ users’ app2020-08-22T12:12:00+06:002020-08-22T12:12:00+06:00Khaled Monsoortag:blog.kmonsoor.com,2020-08-22:/some-tips-on-managing-apps-release/<p>In any war, game, or enterprise resource management, the last thing you want is to underestimate your opponent(s). In release management, the opponent is “chaos”. The last thing a release manager should expect is that everything, from bug-free features to timely completion of production builds will be done as per the cadence&nbsp;schedule.</p><p><em>Disclaimer: Everything here are my personal observations, experiences, commentary, or “wisdom”. My past, present, or future employers shouldn’t be held responsible for it. Also, take in or apply the stuff below “with a grain of&nbsp;salt”.</em></p> <blockquote> <p>In any war, game, or enterprise resource management, the last thing you want is to underestimate your opponent(s). In release management, the opponent is&nbsp;“chaos”.</p> </blockquote> <p><img alt="releases" class="noZoom" src="https://i.imgur.com/BE87UxPl.jpg"></p> <p>The last thing a release manager should expect is that everything, from bug-free features to timely completion of production builds will be done as per the cadence&nbsp;schedule.</p> <p>Here is something that I had to learn over time. It might help someone,&nbsp;somewhere.</p> <h3 id="is-the-release-cadence-effective">Is the “release cadence” effective?<a class="headerlink" href="#is-the-release-cadence-effective" title="Permanent link">&para;</a></h3> <p>Not all apps are created equal, neither for the exact same consumer base nor with the same feature set. So, <span class="caps">THE</span> perfect release cadence or frequency doesn’t exist. Every app needs to find it’s own pace. The frequency might be feature-based, the target market base, fixed calendar-based, and/or mix of&nbsp;those.</p> <p>Though I can’t go in detail for each of them, I emphasize going through the process of identifying the right frequency. While for the passenger app of Grab, due to the sheer number of features (or change of features) and bug fixes, it makes sense to roll out a new version every week, it might make no sense for your app that gets new features once in a month or two that has a limited number of enterprise customers and your user-support team has to train them in&nbsp;sessions.</p> <p>Ask the questions across the company who are involved or have a vested interest in the release&nbsp;process.</p> <ul> <li>Who are the primary users? And, who can be considered&nbsp;secondary?</li> <li>Are the primary audience tech-savvy enough to be excited to navigate the new changes, or will they be pissed about the frequent&nbsp;changes?</li> <li>How frequently may the product teams push out new&nbsp;features?</li> <li>How resilient the quality assurance team is to exhaustively verify the new features and look out for new bugs that are going to break the old, stable&nbsp;features?</li> <li>How much automation is in place to support a more frequent build, release, and&nbsp;rollout?</li> </ul> <p>Particularly, if your <span class="caps">QA</span>/testing team isn’t well-distributed as per the app scopes, to provide the final sign-off on that specific scope, avoid intense weekly releases. Having a shiny process, just for the sake of having it, is an easy recipe for&nbsp;disaster.</p> <h3 id="is-the-process-well-documented-communicated">Is the process well-documented <span class="amp">&amp;</span> communicated?<a class="headerlink" href="#is-the-process-well-documented-communicated" title="Permanent link">&para;</a></h3> <p>Well-accepted process documents should work as the org-wide “release” manifesto, well discussed among the contributing teams and agreed by the&nbsp;stakeholders. </p> <p>Once the process and agreed upon process timeline is there, in case of confusion or conflict between the teams, the release team will have two clear paths to move&nbsp;forward.</p> <ul> <li>It’s already in the doc, point to&nbsp;it.</li> <li>If it’s not in the doc or not clear enough, an opportunity to&nbsp;improve</li> </ul> <p>If there is an exception, foreseeable disruption, or any upcoming change in the process, <em>communicate early</em>, and <em>communicate frequently</em>.</p> <h3 id="is-some-automation-possible">Is some automation possible?<a class="headerlink" href="#is-some-automation-possible" title="Permanent link">&para;</a></h3> <p>Identify the opportunities to automate. As a release manager, if you need something to do more than twice a day, start there. Have you been asked the same question twice? Include the answer in a <span class="caps">FAQ</span>&nbsp;doc.</p> <p>Document the need, identify the tool required. It can be as simple as a <span class="caps">SQL</span> query, a Python script, or a much more complex&nbsp;system. </p> <p>Before jumping headfirst into the thing, identify the matrix to monitor the improvement, and get approval (at least, verbally) from the&nbsp;stakeholders.</p> <p>Some example automation tool I&nbsp;use:</p> <ul> <li><a href="https://www.google.com/script/start/">Google script</a> to monitor changes on Google&nbsp;Sheet</li> <li><a href="https://slack.com/help/articles/202026038-An-introduction-to-Slackbot">Slack bot response</a> for selected&nbsp;keywords</li> <li>Python scripts for compiling custom <span class="caps">JIRA</span> reports. <a href="https://gist.github.com/kmonsoor/62ed1bc6cd3084648245073744182227">An&nbsp;example</a></li> <li><a href="https://slack.com/intl/en-sg/help/articles/206819278-Send-emails-to-Slack">Email forwarding to Slack <span class="caps">DM</span></a></li> </ul> <p>Automation paves the path to sustainable scalability. The release manager might be able to ping (aka “pull info or update”) three persons, but definitely shouldn’t try for thirty. So, establish some “push notification” mechanism as much as possible. E.g., comment on the Google <em>Sheet</em> or more frequent status update on the <span class="caps">JIRA</span> ticket,&nbsp;etc.</p> <h3 id="is-proper-divide-conquer-in-place">Is proper “Divide <span class="amp">&amp;</span> Conquer” in place?<a class="headerlink" href="#is-proper-divide-conquer-in-place" title="Permanent link">&para;</a></h3> <p>This <span class="caps">DC</span> method/mechanism/scheme (as a fan of the Marvel universe, I don’t mind the name mixup though :P ) is a controversial term. However, the “division of labor” is a well-established example. Regardless of the name and the flavor, it’s essential for the successful execution of any high-frequency release&nbsp;cycle. </p> <ul> <li>Design the process and its breakdown based on the roles, not the actual persons or their&nbsp;skillset</li> <li>Minimize switching between roles for individual persons in a single release cycle. e.g., if someone, in the <span class="caps">QA</span> team, is writing test cases, let them do that for at least the period. If someone is testing individual features at the beginning of the week, let her continue it until the end of the release. \ <em>Well-designed repetition is key to reaching&nbsp;excellence.</em></li> <li>Keep only integrated test (staging, then production) dependency for release rollout. For individual features, the developing team(s) should take care of it, before “signing off” it ready for shipping. The “not ready to be shipped” features must be isolated from the production scope, excluding it from the ongoing release&nbsp;cycle.</li> <li>Imagine the shipment process of a newer version as a concept like a train and different teams as different product pipelines. Products come to the train station only when it’s packed and ready to be shipped. I believe it&rsquo;s an agile concept, as&nbsp;well.</li> <li>Like a public train, the release “train” should depart as per schedule. If any feature is delayed due to unforeseen reasons or a recently discovered severe bug, the release-train should not wait for it. Instead, once the feature is stabilized later, it should wait for the next <em>train</em>.</li> <li>Adopting the concept of a train and its scheduled departure and well-documented checkpoints (i.e., phases) enables a large organization to expect and likewise communicate what to expect&nbsp;when.</li> </ul> <h3 id="are-you-deploying-on-a-wrong-moon-phase">Are you deploying on a wrong moon-phase?<a class="headerlink" href="#are-you-deploying-on-a-wrong-moon-phase" title="Permanent link">&para;</a></h3> <p>Probably, it should be a piece of common knowledge. Be it a backend deployment or app rollout on app stores; please avoid changing anything with the “production” tag, before a weekend or a multi-day&nbsp;holiday. </p> <p>Like the <a href="https://twitter.com/System32Comics/status/1266100094853476352/photo/1">printer meme</a>, the universe likes to throw unique, unforeseen issues after weekend deployments. It’s a mystery of the world, I&nbsp;guess.</p> <h3 id="is-there-a-provision-for-backup">Is there a provision for backup?<a class="headerlink" href="#is-there-a-provision-for-backup" title="Permanent link">&para;</a></h3> <p>Plan capacity with some&nbsp;slack. </p> <p>I’d suggest going for the 80/20 rule, meaning the weekly release should go out, even in the unavailability of 20% human&nbsp;resources. </p> <p>Unlike machines, people will be sick, go out for vacation, emergency travel plans, unexpectedly resign, etc. anything can happen. So, like any other robust system design, plan for&nbsp;“disaster”. </p> <h3 id="is-proper-continuous-integrationdeployment-cicd-in-place">Is proper Continuous Integration/Deployment (<span class="caps">CI</span>/<span class="caps">CD</span>) in place?<a class="headerlink" href="#is-proper-continuous-integrationdeployment-cicd-in-place" title="Permanent link">&para;</a></h3> <p>To have an efficient release process, automated and well-documented <span class="caps">CI</span>/<span class="caps">CD</span> pipeline is almost a&nbsp;prerequisite.</p> <ul> <li>Developers across the board should be able to build, test, merge their code, and build the binary from the latest stable and/or release&nbsp;checkpoints.</li> <li>Once their change, be it a feature or a bugfix, is ready to be merged with the release branch, a complete suite of automated tests should run on the resultant binary to detect any regression bug due to the change; with no dependency on the release&nbsp;team.</li> <li><span class="caps">QA</span>, while testing for a particular release, should be able to receive regression or production build without any manual effort from the release&nbsp;team.</li> </ul> <h3 id="is-there-continuous-feedback-established">Is there continuous feedback established?<a class="headerlink" href="#is-there-continuous-feedback-established" title="Permanent link">&para;</a></h3> <p>An efficient release process is an intensive process. And, no process can be perfect from the&nbsp;beginning. </p> <p>Every organization has, as its fingerprint, has different priorities, deliverables, audience, resources, and of course, budget. So, while the release cycle can start with an agile blueprint, down the line it needs to be well fit on its organizational&nbsp;body. </p> <p>Here comes the necessity for continuous feedback from the participants, stakeholders, and even the release&nbsp;team-members.</p> <h3 id="stay-on-the-good-book-of-the-app-stores">Stay on the “good book” of the app stores ;)<a class="headerlink" href="#stay-on-the-good-book-of-the-app-stores" title="Permanent link">&para;</a></h3> <p>If the app is in the center of revenue of your company, keep a close eye on the regular comm from the app stores, i.e., Google Play and Apple Appstore. It’s very easy to miss these communications, among other day-to-day&nbsp;stuff.</p> <p>Regardless of how ridiculous your company feels about some policies on the app stores, please read between the lines. In case of confusion, read again. Especially if you’re one of the big fishes.<br> If a particular app store weren’t strictly monitoring or enforcing some policies last month, don’t even think they aren’t going to enforce tomorrow and reject your&nbsp;app. </p> <p>The release manager or the team, being the interface with the app stores, should frequently communicate with the stakeholders and the product team to carefully go through relevant app store policies long before they invest company time and resources into a feature or a roadmap. Trust me; it happens more than anyone likes to admit that after month-long design and development, the app update with the feature gets rejected on the app stores, solely due to this new&nbsp;feature.</p> <p>If possible, try to get hold of and build a working relationship with the business development or dev support teams of Google and Apple. It might help in case of any misunderstanding and/or some negotiations about the compliance timeline.<br> I can’t go into any more detail though&nbsp;;)</p> <h3 id="notes">Notes:<a class="headerlink" href="#notes" title="Permanent link">&para;</a></h3> <ul> <li>Please don’t take the number 50M+ literally. The actual number is much higher but should be considered as company secrets ;).&nbsp;Right?</li> <li>This article is <span class="caps">NOT</span> a definitive process guide, and I’m not an expert on Agile methodologies. I’m just trying to share my learning from my release experience of 1.75 years. Some stuff might help any other release manager on the other side of the planet. That’s the goal&nbsp;here.</li> </ul> <p>Thanks,&nbsp;y’all.</p>