---
title: "Latest reads"
description: "The engineering internet, summarised so you can actually read it."
---

# Latest reads
> The engineering internet, summarised so you can actually read it.

## Articles

### [Evolving Alongside your Tech Stack](https://yomu.fyi/post/evolving-alongside-your-tech-stack.md)
- Company: [Heroku](https://yomu.fyi/company/heroku.md)
- Author: Chris Castle
- Published: Apr 30, 2020
- Type: Explainer

Rapid advances in software have expanded both what applications can do and what developers must understand, from efficient code to integration, security, and user experience. As tools make polished interfaces easier to build, engineers are expected to understand users, design sensibilities, system behavior, and constraints such as memory management and CPU load. The post recommends maintaining broad awareness of changing technologies while prioritizing learning around problems actually encountered; Postgres performance issues may warrant understanding traffic and write effects without exhaustive tuning. It cautions against adopting every new framework or database on reputation alone, using MemSQL as an example, and concludes that developers should evaluate trade-offs carefully, build expertise in the tools they operate, and focus on shipping meaningful product work.


### [Categorizing Products at Scale](https://yomu.fyi/post/categorizing-products-at-scale.md)
- Company: [Shopify](https://yomu.fyi/company/shopify.md)
- Author: 2023-10-18
- Published: Apr 30, 2020
- Type: Explainer

Shopify describes a product-categorization system for more than one billion products across the Google Product Taxonomy, which contains over 5,000 hierarchical categories. The model uses product titles, descriptions, collections, tags, vendors, and merchant-provided types, with text preprocessing and a fixed-length term-frequency HashingTF featurizer in PySpark rather than image features or vocabulary-based methods such as Word2Vec. Kesler’s Construction transforms multiclass training into a binary dataset by embedding each candidate class into feature tokens, while logistic regression provides a single, interpretable classifier that can use taxonomy relationships and reduce computational load. The resulting baseline supports more than 20 teams and downstream experiences, while schematized Kafka events and an internal annotation platform provide human feedback; the post identifies class imbalance, multilingual text, and image features as improvement areas.


### [Building and Scaling a Global Chatbot using Heroku + Terraform](https://yomu.fyi/post/building-and-scaling-a-global-chatbot-using-heroku-terraform.md)
- Company: [Heroku](https://yomu.fyi/company/heroku.md)
- Author: Garen Torikian
- Published: Apr 22, 2020
- Type: Problem & solution

Live Agent, Salesforce’s embeddable chatbot, must handle customer interactions and requests at global scale while remaining highly available across regions. Its eight-person team chose Heroku to avoid managing bare metal, cloud virtual machines, databases, and other third-party services, while relying on managed Java support and regional infrastructure. The platform runs ten apps with Heroku Postgres, Redis, and Apache Kafka dependencies, and deploys them inside Heroku Private Spaces to isolate network boundaries and data. Terraform defines and replicates apps, add-ons, custom domains, logging, and profiling configuration across regions, allowing changes to propagate through a pull request. The result described is a simpler operational model in which Heroku handles maintenance and the team can scale the same architecture into new geographic locations.


### [Developer Platform updates Spring 20'](https://yomu.fyi/post/developer-platform-updates-spring-20.md)
- Company: [Zoom](https://yomu.fyi/company/zoom.md)
- Author: Michael Purnell
- Published: Apr 21, 2020
- Type: Announcement

Zoom introduced several updates across its developer platform alongside new roadmap milestones for 2020. Marketplace enhancements include a Developer Dashboard tracking install numbers and API usage, as well as dynamic OAuth scope configurations that distinguish mandatory and optional permissions. For client development, the WebSDK adds Microsoft Edge Chromium compatibility with video and VOIP support, whereas the iOS SDK incorporates Xcode 11 support. Due to increased developer demand, Zoom updated its V2 REST API rate limits and delivered new chat webhooks tracking message, channel, and member activity. Upcoming platform initiatives include the permanent termination of all legacy V1 APIs on May 31, 2020, platform security enhancements, and an iframe-free JavaScript embedding framework for the WebSDK.


### [Imaginary on Fly, just One-click](https://yomu.fyi/post/imaginary-on-fly-just-one-click.md)
- Company: [Fly.io](https://yomu.fyi/company/fly-io.md)
- Published: Apr 20, 2020
- Type: Announcement

Fly announces a one-click launcher for Imaginary, an open-source image service that is among Fly’s popular global image-service use cases. The launcher is intended to let users create a running, production-ready version without infrastructure by pasting button code, and Imaginary’s creators added it to the project’s GitHub README. The post says users can get started with operations including converting and resizing images faster, while scalable SVG buttons are designed to work on pages. It also presents one-click launchers as a possible funding channel through revenue sharing and invites other open-source projects to help develop a process for launching applications on Fly.


### [Fly Changelog 17th April 2020](https://yomu.fyi/post/fly-changelog-17th-april-2020.md)
- Company: [Fly.io](https://yomu.fyi/company/fly-io.md)
- Published: Apr 17, 2020
- Type: Announcement

This changelog records updates to Fly’s infrastructure, flyctl tooling, and web experience during the week ending 17 April 2020. Version 0.0.116 improves diagnostics for invalid fly.toml files by listing problematic sections and settings, adds Homebrew upgrade instructions to the README, provides basic names for flyctl scale vm sizes, and packages flyctl for Arch Linux through flyctl-bin. On the platform, new applications receive their app.fly.dev certificate “instantly,” while Fly Proxy can serve replacement certificates two weeks before expiration when possible. The site also adds a dedicated ChangeLog page that consolidates recent entries, alongside an RSS feed containing changelog posts. The flyctl changes include contributions from Lars Lehtonen and Simon Willison.


### [Software Release Culture at Shopify](https://yomu.fyi/post/software-release-culture-at-shopify.md)
- Company: [Shopify](https://yomu.fyi/company/shopify.md)
- Author: 2023-10-18
- Published: Apr 15, 2020
- Type: Explainer

Shopify describes its release culture as a combination of beliefs and behaviors shaping how developers ship software, with trust, velocity, and safeguards as stated goals. The team measures developer experience through biannual happiness surveys, shipping Slack channels, dogfooding, internal support, and UX research that includes shadowing developers and testing prototypes with interns and new hires. Its release pipeline runs from a pull request and /shipit command through the merge queue, Master, a Canary environment receiving 5% of incoming requests, and Production after a 10-minute testing period without intervention or automated alerts. Developers own releases without managers, sign-offs, or release windows, while /shipit --emergency provides a single fast recovery path. Shopify also uses Beta Flags for gradual rollouts and measures /shipit success through survey feedback and average pull-request time-to-production.


### [Powerbuilding with Fly](https://yomu.fyi/post/powerbuilding-with-fly.md)
- Company: [Fly.io](https://yomu.fyi/company/fly-io.md)
- Published: Apr 8, 2020
- Type: Tutorial

Powerbuilding with Fly explains how flyctl controls Docker-image builds when deploying applications to Fly infrastructure. It covers selecting the application configuration with --config, choosing an alternate Dockerfile with --dockerfile, and passing build-time values through --build-args. Using NGINX\_PORT as an example, the post shows how Docker ARG can receive a default or command-line value and how ENV=${NGINX\_PORT} carries that value into the running image; flyctl deploy --build-args NGINX\_PORT=4000 overrides 8080. Build arguments are intended for non-sensitive data because values are baked into the image and may be retrievable, while Fly Secrets are recommended for sensitive application data and are injected as environment variables when the image starts.


### [Building Arrive's Confetti in React Native with Reanimated](https://yomu.fyi/post/building-arrive-s-confetti-in-react-native-with-reanimated.md)
- Company: [Shopify](https://yomu.fyi/company/shopify.md)
- Author: 2023-10-18
- Published: Apr 7, 2020
- Type: Tutorial

Shopify rewrote its Arrive package-tracking app in React Native and launched it on Android, where the earlier iOS-only app’s delivery confetti needed a cross-platform implementation. Rather than duplicate the iOS CAEmitterLayer code in Java or Kotlin, the team implemented the effect in JavaScript with Reanimated, whose declarative instructions run animation computations on the native UI thread after setup. The walkthrough initializes 100 randomized confetti, animates position and three-dimensional rotation from randomized velocities, and uses delta time, a clock, staggered delays, and edge-bounce elasticity to shape their motion. It also adds two confetti cannons and 2-dimensional confetti, while leaving cleanup of images and animation stopping beyond the post’s scope. The resulting version is described as resembling the original while spreading confetti more uniformly and making it behave more like paper.


### [Fly Answers More Questions](https://yomu.fyi/post/fly-answers-more-questions.md)
- Company: [Fly.io](https://yomu.fyi/company/fly-io.md)
- Published: Apr 6, 2020
- Type: Explainer

Fly Answers More Questions addresses three Fly usage questions: protection against malicious TCP connections that trigger runaway scaling, dedicated credentials for GitHub Actions, and selecting Dockerfiles in monorepos. For scaling abuse, Fly apps can impose per-region and global instance limits; requests beyond those limits are dropped, while networking protections are already in place. A configurable monthly maximum spend is described as in preview, and usage from an obvious DDoS or similar event may be waived. For continuous deployment, the suggested pattern is a dedicated user with a personal access token, added to a Fly organization so it can deploy to projects. For complex builds, updated flyctl adds deploy's --dockerfile option, allowing a selected Dockerfile instead of the default Dockerfile.


### [Backwards Incompatible V2 API Changes](https://yomu.fyi/post/backwards-incompatible-v2-api-changes.md)
- Company: [Zoom](https://yomu.fyi/company/zoom.md)
- Author: Benjamin Dean
- Published: Apr 3, 2020
- Type: Announcement

Following the removal of Zoom's Attention Tracking feature, backwards-incompatible modifications were introduced to the V2 REST API effective April 3, 2020. Under these deprecations, the attentiveness\_score field in meeting and webinar participant reports returns an empty value, while the attention\_tracking field across user, group, and account settings endpoints defaults to false. Both attention-tracking fields remain temporarily in API responses before full removal in a future release. Additionally, starting April 12, 2020, password-related configuration fields become immutable and permanently set to true for Free and single-host Pro K-12 Education accounts. These locking measures affect settings such as password requirements for scheduled, instant, or personal meetings, alongside PSTN password protection across account, group, and user endpoints.


### [Optimizing Ruby Lazy Initialization in TruffleRuby with Deoptimization](https://yomu.fyi/post/optimizing-ruby-lazy-initialization-in-truffleruby-with-deoptimization.md)
- Company: [Shopify](https://yomu.fyi/company/shopify.md)
- Author: 2023-10-18
- Published: Mar 31, 2020
- Type: Explainer

The post examines how TruffleRuby can optimize Ruby’s ||= operator when it is used for lazy initialization rather than repeated assignment. Static profiling of 20 popular open-source projects found 2,082 uses, with 64% meeting conservative criteria based on constant values or naming patterns for parameterless methods assigning instance or class variables. The implementation replaces the usual OrNode with an OrLazyValueDefinedNode, which counts executions of the right-hand side and deoptimizes when it is executed fewer than twice, allowing uncommon assignment paths to remain in the interpreter. In a benchmark, the change compiled code about 6% faster and produced about 63% less machine code by memory, although the post notes that benchmarking larger projects is noisy and the runtime impact is difficult to prove.


### [Does Southeast Asia Run on Coffee?](https://yomu.fyi/post/does-southeast-asia-run-on-coffee.md)
- Company: [Grab](https://yomu.fyi/company/grab.md)
- Author: Siu Sing Lai
- Published: Mar 26, 2020
- Type: Explainer

GrabFood examined regional coffee ordering trends across major Southeast Asian cities over a nine-month period. Regional coffee orders expanded by 1,400%, with most countries recording their highest order volumes on Wednesdays before tapering off toward the weekend. Singapore and the Philippines deviated from this regional pattern, experiencing spikes in coffee orders on weekends and particularly on Sundays. Daily peak ordering times also differed across markets, peaking at 10:00 AM in Thailand, 2:00 PM in Indonesia, and 4:00 PM in Singapore. In addition to coffee, Green Tea Latte emerged as a top ten beverage item on the platform, accounting for over 25 million delivered cups.


### [Making Datasets Fly with Datasette and Fly](https://yomu.fyi/post/making-datasets-fly-with-datasette-and-fly.md)
- Company: [Fly.io](https://yomu.fyi/company/fly-io.md)
- Published: Mar 26, 2020
- Type: Tutorial

Datasette makes SQLite datasets accessible through a web interface, with SQL queries, JSON and CSV export, and a REST/JSON API. This tutorial imports New York Central Park Squirrel Census CSV data into SQLite, runs it locally with Datasette, and publishes the database to Fly using the datasette-publish-fly plugin. It then renames the database’s X and Y columns to Longitude and Latitude, installs datasette-cluster-map, and redeploys with the plugin to produce an interactive map of squirrel sightings. The deployments expose Datasette online at Fly hostnames, with HTTPS, automatically generated Let’s Encrypt certificates, custom domain support, global deployment options, and edge networking with SSL termination. The mapped deployment lets users inspect individual sightings and view their details.


### [GrabChat Much? Talk Data to Me!](https://yomu.fyi/post/grabchat-much-talk-data-to-me.md)
- Company: [Grab](https://yomu.fyi/company/grab.md)
- Author: Jason Lee Jie Shien
- Published: Mar 24, 2020
- Type: Explainer

Grab launched GrabChat in September 2016 to facilitate in-app communication between passengers and driver-partners, subsequently adding features such as instant translation, image sharing, voice audio, and templates. An analysis of messaging data across Singapore, Malaysia, and Indonesia revealed distinct behavioral differences, with Indonesia averaging the highest volume at 5.5 chats per booking. Chat volume and the proportion of location-oriented messages peak between midnight and 4am across all three markets, driven by closed storefronts and obscure pickup spots. Image sharing sees higher utilization in remote areas, while pre-populated templates constitute nearly 50% of driver texts to reduce manual typing while driving. Furthermore, messaging responsiveness, directional guidance, and courtesy terms like saying thank you correlate directly with higher trip completion rates.


### [Continuous Deployment with GitLab](https://yomu.fyi/post/continuous-deployment-with-gitlab.md)
- Company: [Fly.io](https://yomu.fyi/company/fly-io.md)
- Published: Mar 23, 2020
- Type: Tutorial

The guide shows how to set up continuous deployment from GitLab CI/CD to a Fly application, using the small Go hellofly example. GitLab supplies the repository contents to a Runner defined by the golang:1.13 image, while a before\_script installs curl and downloads flyctl through Fly’s installation script. A deploy job then runs flyctl deploy, which builds and deploys the application from a committed fly.toml file. Authentication is configured by obtaining a token with flyctl auth token and storing it as a protected, masked FLY\_API\_TOKEN CI/CD variable in the repository settings. After .gitlab-ci.yml is committed and pushed, GitLab starts the deployment job, while the guide notes that more advanced pipeline structures and triggers remain available.


### [7 Fun Facts about Grab’s Driver-Partners in Singapore](https://yomu.fyi/post/7-fun-facts-about-grab-s-driver-partners-in-singapore.md)
- Company: [Grab](https://yomu.fyi/company/grab.md)
- Author: Lara PuReum Yim
- Published: Mar 20, 2020
- Type: Explainer

Grab analyzed ride-hailing metrics from driver-partners operating in Singapore to identify platform usage trends and driving patterns. Findings indicate that drivers have a 1 in 400 chance of encountering a repeat passenger among the 5.4 million population, with Tampines recording the most pickups and Orchard and Marina Bay serving as top destinations in 2018. Driver behavior data shows that partners with over two years of platform experience routinely start shifts an hour earlier and leverage auto-accept features to minimize idle waiting time. Furthermore, drivers are twice as likely to receive back-to-back ride allocations during evening peak hours, resulting in roughly 50% higher hourly earnings. The dataset also highlights customer satisfaction metrics, showing that shared GrabShare rides achieved an average rating of 4.8 stars.


### [Fly Answers Questions](https://yomu.fyi/post/fly-answers-questions.md)
- Company: [Fly.io](https://yomu.fyi/company/fly-io.md)
- Published: Mar 18, 2020
- Type: Explainer

Fly Answers Questions compiles responses about custom domains, configuration recovery, Turboku deployment, database latency, TLS termination, global databases, continuous deployment, and idle-app scaling. Fly allows multiple custom hostnames per application and automatically provisions Let’s Encrypt certificates after validation; a deleted fly.toml can be restored with flyctl config save -a , with -c supporting another filename. For Turboku, Heroku slugs run as containers in a nearby datacenter rather than at the edge, while region selection can reduce database latency and retain edge SSL termination. The service supports TLS-only termination up to HTTP/1.1, GitHub Actions deployment, Redis for local caching, and a replication system for distributing changes, while keeping one running instance for idle apps instead of scaling them to zero.


### [Scaling Fly for All](https://yomu.fyi/post/scaling-fly-for-all.md)
- Company: [Fly.io](https://yomu.fyi/company/fly-io.md)
- Published: Mar 17, 2020
- Type: Announcement

Fly makes its scaling controls available to all users, allowing them to manage application instance counts across regions and choose virtual-machine sizes. The default plan places an application in one region, while Fly’s autopilot can add an instance when a connection limit of roughly 20–25 is reached and select its location. The new flyctl scale regions command reports or sets regions and per-region minimum counts; for example, ams=1 hkg=1 sjc=1 keeps at least one instance in each location, with weights influencing where new instances are preferred. Users can also run flyctl scale vm to apply a VM size to all current and future instances, triggering a new app version and redeployment. Available sizes range from micro-1x with 128 MB to cpu8mem8 with 8 GB, while the article notes that the system was later superseded.


### [Tackling UI Test Execution Time Imbalance for Xcode Parallel Testing](https://yomu.fyi/post/tackling-ui-test-execution-time-imbalance-for-xcode-parallel-testing.md)
- Company: [Grab](https://yomu.fyi/company/grab.md)
- Author: Ngoc Thuyen Trinh
- Published: Mar 16, 2020
- Type: Problem & solution

Parallel test execution in Xcode can suffer from test time imbalance when tasks finish at significantly different times across parallel simulator workers. Analysis of Xcode scheduling logs shows that the runner groups tests by test class and dispatches all tests from the same class to a single simulator. Attempts to customize the suite by swizzling XCTestSuite fail because made-up suites initialize only after tests are dispatched. To overcome this grouping constraint, unique tokens or test names are appended to the class name component in \`-only-testing\` command-line arguments. This trick forces Xcode to treat each test as an independent class, successfully distributing individual tests across separate workers.


[Newer posts](https://yomu.fyi/posts/page/233.md) · [Older posts](https://yomu.fyi/posts/page/235.md)
