Mobile Development

9 posts

spotify3 min readCurated summary

How We Release the Spotify App: A Look Under the Hood (Part 2) | Spotify Engineering

Spotify’s Release Manager Dashboard replaced a Jira-heavy workflow with a unified command center for mobile and desktop releases. It reduces context switching and cognitive load by aggregating release status, bugs, testing, build health, and usage metrics into one interface. A backend that caches and pre-aggregates data from roughly ten systems makes the dashboard fast and affordable. ## From Jira to a Release Command Center - Previously, Release Managers depended on Jira tickets, multiple browser tabs, and Slack conversations. - This made it easy to miss details and required constant context switching. - The dashboard was designed to: - Prioritize the Release Manager’s workflow. - Remain understandable to anyone familiar with Spotify’s release process. - Reduce cognitive load. - Support fast, accurate decisions. ## Release Data Spotify treats each platform-and-version combination as a **track**. Android, iOS, and Desktop share some libraries but are released independently. - Track-specific information includes: - Current release state. - Release-blocking bugs. - Team regression-testing sign-offs. - Final release candidate build status. - Build verification test results. - App Store upload status. - Crash, ANR, and CPU-exception rates per song. - Daily active users. - The dashboard also highlights: - Blocking bugs without an assigned version. - Bugs without a priority. - Reports from internal users and alpha/beta testers. - Release management includes finding appropriate owners for unassigned issues, even when temporary team ownership is needed. ## React, TypeScript, and Backstage - The dashboard is a Backstage plugin built with React and TypeScript. - Spotify’s Backstage ecosystem already provides: - Software Catalog functionality for distributing builds to app stores. - App-build and crash plugins with deeper detail. - Shared UI components and data across developer tools. - The interface provides a quick health overview, with drill-down capabilities for investigating blockers. - Status colors communicate urgency: - **Green:** Ready for the next stage. - **Yellow:** Something still needs attention. - **Red:** An error requires corrective action. ## Backend Aggregation and Performance - A dedicated backend acts as an API gateway for approximately ten existing systems. - It consolidates their data into one consistent API for the dashboard. - The initial implementation queried large amounts of data on every reload, making it slow and expensive. - Caching and five-minute pre-aggregation reduced load time to about eight seconds while significantly lowering operating costs. ## Dashboard Sections ### Production - Shows the currently deployed Android, iOS, and Desktop versions. - Since these releases have completed the release process, only production metrics are displayed. - Metrics include: - Crash data. - Rolling daily active users over the previous 24 hours. - This helps Release Managers detect problems shortly after rollout. ### Current - Displays the branched version that has not yet reached production. - Tracks release blockers such as: - Open blocking bugs. - Incomplete regression testing. - Crash rates above release thresholds. - Builds that do not contain the latest release-branch commits. - Yellow indicators represent pending work, while red indicators call for direct investigation or action. - The ITGC section confirms that full production rollout is permitted only after: - ITGC tests pass. - Reporting is correct. - Data loss remains below the defined threshold. - A Release Status Ping link generates a Slack update with the release’s current state. ### Upcoming - Mirrors the Current release view for the next planned version. - Sections that are not yet relevant are shown in a grayed-out state. The dashboard illustrates how a specialized aggregation layer and focused UI can turn a fragmented release process into a clear operational workflow. For organizations managing complex, multi-platform releases, combining cached cross-system data with color-coded status and drill-down details can improve both speed and release safety.

Read original(opens in new tab)
kakaoOriginal article

Development of an Ultra-lightweight Classic (opens in new tab)

Kakao developed a specialized, lightweight morphological analyzer to meet the strict resource constraints of mobile environments where modern deep-learning models are often too heavy. By opting for a classical Viterbi-based approach implemented in C++20, the team successfully reduced the library's binary size to approximately 200KB while ensuring high performance. This development highlights how traditional algorithmic optimization and careful language selection remain vital for mobile software efficiency. ## The Choice of C++ over Rust - While Rust was considered for its safety, it was ultimately rejected because its default binary size (even with optimization) reached several megabytes, which was too large for the specific project requirements. - C++ was chosen because mobile platforms like iOS and Android already include standard libraries (libc++ or libstdc++), allowing the final analyzer binary to be stripped down to core logic. - The project utilized C++20 features such as Concepts and `std::span` to replace older patterns like SFINAE and `gsl::span`, resulting in more readable and maintainable code without sacrificing performance. ## Trie Compression using LOUDS - To minimize the dictionary size, the team implemented a LOUDS (Level-Order Unary Degree Sequence) structure, which represents a Trie using a bit sequence instead of pointers. - This approach provides a compression rate near the information-theoretic lower bound, allowing approximately 760,000 nodes to be stored in just 9.4MB. - Further optimization was achieved through a custom encoding scheme that represents Hangul in 2 bytes and English in 1 byte, significantly reducing the dictionary's memory footprint compared to standard UTF-8. ## Optimizing the Select Bit Operation - Initial performance profiling showed that the `select0` operation (finding the N-th zero in a bit sequence) consumed 90% of the dictionary search time due to linear search overhead. - The solution involved dividing the bit sequence into 64-bit chunks and storing the cumulative count of zeros at each chunk boundary in a separate array. - By using binary search to find the correct chunk and applying parallel bit-counting techniques for intra-chunk searching, the dictionary search time was reduced from 165ms to 10ms. - These optimizations led to a total analysis time improvement from 182ms to 28ms, making the tool highly responsive for real-time mobile use. For mobile developers facing strict hardware limitations, this project proves that combining classical data structures like LOUDS with modern low-level language features can yield performance and size benefits that deep learning alternatives currently cannot match.

discordOriginal article

Discord Update: November 6, 2025 Changelog (opens in new tab)

The November 2025 Discord update focuses on streamlining content creation and enhancing the user interface across both desktop and mobile platforms. By removing technical barriers for emoji management and reorganizing core navigation, the platform aims to create a more intuitive experience for community interaction and personal expression. These changes signify a push toward visual consistency and greater flexibility in how users present themselves across different server environments. ### Streamlined Emoji Creation * A new integrated editing screen allows users to crop and resize large images directly during the upload process, eliminating the need for third-party photo editors. * The Emoji Picker now includes an "Add Emoji" shortcut for users with server permissions, allowing them to upload and assign icons to specific servers without leaving the chat interface. * Discord has automated the technical requirements for emoji uploads, removing the need for users to manually adjust files to specific resolutions (128x128), file types (PNG), or size limits before importing. ### Desktop Navigation and Utility * The desktop Settings menu is undergoing a visual refresh and reorganization to improve discoverability and match the platform's modern design language. * Voice channels on desktop now feature an active timer, providing a visible indicator of how long a specific call has been in progress. * The "More" section at the bottom of the Settings list serves as the new hub for accessing the Changelog and other platform documentation. ### Personalization and Mobile Features * Users can now set Nameplates on a per-server basis, allowing for professional appearances in some communities while maintaining more casual aesthetics in others. * The Discord Shop is now fully functional on mobile devices, enabling users to purchase and send gifts, Avatar Decorations, and bundles directly from tablets or phones. * Enhanced tools within the Family Center provide parents and guardians with updated oversight features to better monitor and engage with their teens' digital experiences. Server administrators and active users should take advantage of the new emoji upload tools to refresh their custom icons with less effort, while multi-community users can leverage the per-server Nameplates to better tailor their digital identity to different social contexts.

lineOriginal article

PD1 AI Hackathon: Into the (opens in new tab)

The PD1 AI Hackathon 2025 served as a strategic initiative by LY Corporation to embed innovative artificial intelligence directly into the LINE messaging ecosystem. Over 60 developers collaborated during an intensive 48-hour session to transition AI from a theoretical concept into practical features for messaging, content, and internal development workflows. The event successfully produced several high-utility prototypes that demonstrate how AI can enhance user safety, creative expression, and technical productivity. ## Transforming Voice Communication through NextVoIP * The "NextVoIP" project utilized Speech-to-Text (STT) technology to convert 1:1 and group call audio into real-time data for AI analysis. * The system was designed to provide life security features by detecting potential emergency situations or accidents through conversation monitoring. * AI acted as a communication assistant by suggesting relevant content and conversation topics to help maintain a seamless flow during calls. * Features were implemented to allow callers to enjoy shared digital content together, enriched by AI-driven recommendations. ## Creative Expression with MELODY LINE * This project focused on the intersection of technology and art by converting chat conversations into unique musical compositions. * The system analyzed the context and emotional sentiment of messages to automatically generate melodies that matched the atmosphere of the chat. * The implementation showcased the potential for generative AI to provide a multi-sensory experience within a standard messaging interface. ## AI-Driven QA and Test Automation * The grand prize-winning project, "IPD," addressed the bottleneck of repetitive manual testing by automating the entire Quality Assurance lifecycle. * AI was utilized to automatically generate and manage complex test cases, significantly reducing the manual effort required for mobile app validation. * The system included automated test execution and a diagnostic feature that identifies the root cause of failures when a test results in an error. * The project was specifically lauded for its immediate "production-ready" status, offering a direct path to improving development speed and software reliability. The results of this hackathon suggest that the most immediate value for AI in large-scale messaging platforms lies in two areas: enhancing user experience through contextual awareness and streamlining internal engineering via automated QA. Organizations should look toward integrating AI-driven testing tools to reduce technical debt while exploring real-time audio and text analysis to provide proactive security and engagement features for users.

discordOriginal article

Discord Update: June 30, 2025 Changelog (opens in new tab)

Discord’s latest updates focus on enhancing user expression and streamlining platform navigation through a series of identity-driven features and technical refinements. By introducing Server Tags and expanding profile customization options, the platform aims to deepen community connections while simultaneously optimizing back-end processes like image compression and search algorithms. These changes reflect an ongoing effort to balance aesthetic personalization with functional performance for both individual users and server administrators. ### Server Tags and Community Visibility * Users can now display Server Tags next to their names to represent specific communities or favorite games. * These tags are interactive, allowing others to click them to learn about the server or apply for membership directly from the tag. * Server administrators can unlock this feature for their community once the server reaches three Boosts. ### Profile Customization and Asset Management * The desktop client now saves the last six used avatars in Profile Settings, enabling users to swap back to previous images without re-uploading files. * Nitro members gain extended access to Quest-earned Avatar Decorations, allowing them to keep these rewards beyond the standard two-month expiration period. * New Nameplate designs have been added to the Shop on the desktop app to further customize user presence in chat lists. ### Integrated Activities and Syntax Enhancements * The New York Times Games’ Wordle is now available as a Discord Activity, accessible by typing the `/wordle` command in any text channel. * Players can use the `/share` command to distribute their results across different channels or direct messages. * New Markdown support for email addresses allows users to wrap an address in brackets (e.g., `<email@address.com>`) to create a clickable link that opens a mail client automatically. ### Performance and Infrastructure Optimizations * The Quick Switcher tool received an algorithmic upgrade to improve the accuracy of channel and DM suggestions based on user behavior. * Mobile image embeds have been improved through a change in how the mobile application handles image compression, resulting in higher-quality renders. * The updated mobile image pipeline also reduces the time required for uploading and rendering images on handheld devices. ### Advanced Server Boosting Features * Beyond Server Tags, communities with sufficient boosts can now access Enhanced Role Styles, which add glowing gradients to specific server roles. * These aesthetic upgrades are designed to provide more visual hierarchy and flair to server member lists. To make the most of these updates, server owners should coordinate community boosts to unlock the new Role Styles and Server Tags, while power users should adopt the Quick Switcher and new Markdown syntax to increase their communication efficiency.

discord3 min readCurated summary

Discord Patch Notes: November 1, 2024

Discord’s November 1, 2024 patch focuses on improving performance, reliability, responsiveness, and cross-device usability. Major updates include stronger foldable-device support, better mobile multitasking and side-by-side views, macOS screen-sharing keybinds, and website performance gains of up to four seconds in average page-load time. The release also fixes a broad range of interface, messaging, theming, and platform-specific bugs. ## Foldable Devices and Multitasking - Foldable devices receive improved support designed to work more reliably without bespoke fixes. - Mobile Discord now handles resizing more intelligently for Sidecar, split-screen, and other multitasking layouts. - Users are encouraged to report remaining foldable-device issues through Discord’s bug megathread or support tickets. ## Desktop and Web Performance - Electron was upgraded from version 30 to version 32 on Windows, macOS, and Linux. - Discord.com received performance improvements that reduce average page-load times by up to four seconds. - Additional core web vitals and responsiveness were improved. - macOS 15 and later now support a keybind for toggling screen sharing, available under **User Settings > Keybinds**. - Friend links opened in a browser now properly communicate with the running desktop client. ## General Interface and Platform Fixes - Fixed missing profile-screen actions, incorrect profile banner zoom, navigation-bar rendering issues, and mobile layout shifts. - Corrected avatar decoration overlap with unread-message status indicators. - Fixed notification bubble shapes, emoji-picker category navigation, theme colors, keybinding icon colors, and long category-name handling. - Improved profile banners and Server Guide text rendering on foldable devices and iOS. - Fixed issues involving onboarding prompts, the App Launcher, Mod View, channel permissions, and role assignment through Simplified Profiles. - Corrected Shop problems involving banners, scrolling, collection tile shapes, and app-button icon colors. - Poll answers can now be selected and copied. - Fixed overlay custom-emoji visibility, profile-effect controls, Nitro gifting padding, and collectible purchase wording. - X.com embeds no longer incorrectly interpret embed content as Markdown. - Fixed several mobile and desktop rendering problems, including channel settings flashes, emoji alignment, and profile layout behavior. ## Chat and Messaging - Corrected oversized emoji rendering in chat. - Fixed mobile Voice Message tooltips, input placement, and animation behavior. - Deleted messages should no longer briefly remain in mobile DM previews. - Fixed an iOS issue where drafts persisted between channels and another where text scaling changed after the keyboard collapsed. - Users can open profiles by clicking names in reply previews. - Prevented rapidly renaming a newly created thread from creating duplicate threads. - Fixed thread-creation theming issues and swipe actions during chat animations. - Corrected mobile notification settings appearing incorrectly in DMs. - Fixed iOS emoji alignment problems in messages. Overall, the patch is primarily a quality-of-life release: users should see better performance across web and mobile, more dependable support for foldables and multitasking, and fewer visual and interaction bugs.

Read original(opens in new tab)
figma3 min readCurated summary

Figma’s journey to TypeScript | Figma Blog

Figma migrated its custom Skew programming language to TypeScript after its original performance advantages became less important than its maintenance and onboarding costs. Advances in mobile WebAssembly support, C++ engine integration, and team growth made the transition practical without sacrificing significant performance. The team completed the migration through an automated, gradual rollout that preserved development velocity and minimized production risk. ## Why Figma Moved Away from Skew - Skew originally helped Figma support prototype viewing across web and mobile. - Its compiler provided optimizations such as: - Constant folding - Devirtualization - Efficient JavaScript integer operations - Fast compile times - Over time, Skew became difficult to scale because: - New engineers struggled to learn it. - It integrated poorly with the broader codebase. - It lacked an external developer ecosystem. - Maintaining its specialized tooling outweighed its performance benefits. - TypeScript offered native package management, static imports, modern language features, extensive tooling, and easier hiring and onboarding. ## Why the Migration Became Possible - Mobile browsers gained broad WebAssembly support by 2018, with reliable performance by 2020. - Figma moved many performance-critical Skew components—especially hot paths such as file loading—to its C++ engine. - These C++ replacements reduced the performance penalty of moving less-critical code to TypeScript. - Larger prototyping and mobile teams provided enough capacity to invest in automated migration tooling. ## Addressing Performance Concerns - In 2020, early benchmarks showed TypeScript could make prototype loading nearly twice as slow in Safari. - Safari was especially important because WebKit was the only browser engine permitted on iOS at the time. - Improved WebAssembly support and the shift of core engine work to C++ made Skew’s compiler optimizations less essential. - Figma gained confidence that TypeScript could provide acceptable performance without recreating Skew’s custom compiler. ## Automated Skew-to-TypeScript Conversion - Manually rewriting the entire codebase would have disrupted development and increased the risk of runtime bugs and regressions. - Figma built a transpiler that converted Skew into TypeScript, extending earlier work by former CTO Evan Wallace. - The migration required care because Skew and TypeScript had different runtime semantics. - For example, TypeScript initializes namespaces and classes only after a module is imported, while Skew made symbols available globally when the codebase loaded. Unexpected import order could therefore introduce runtime failures. ## Three-Phase Rollout ### Phase 1: Write Skew, Build Skew - Figma kept the existing build process. - The new transpiler generated TypeScript from Skew. - Generated TypeScript was checked into GitHub so developers could inspect and prepare for the future codebase. ### Phase 2: Write Skew, Build TypeScript - Once the generated bundle passed unit tests, production traffic began using the TypeScript build. - Developers continued writing Skew. - The transpiler updated the TypeScript source automatically. - The team fixed type errors incrementally; TypeScript could still produce valid bundles despite those errors. ### Phase 3: Write TypeScript, Build TypeScript - After the team adopted the TypeScript build, the generated code became the source of truth. - Figma stopped automatic generation, deleted the Skew source, and required new development to use TypeScript. - The staged process allowed the team to detect and resolve issues such as a Smart Animate regression before completing the cutover. ## Practical Lessons - A custom language can provide valuable early advantages but become a long-term developer-experience liability. - Automated conversion is safer when paired with staged production rollouts and reversible adoption gates. - Controlling the original compiler made it possible to adapt the migration tooling to the codebase’s specific needs. - Figma’s approach demonstrates that large language migrations can preserve delivery speed when technical, performance, and organizational prerequisites are addressed first.

Read original(opens in new tab)
figma2 min readCurated summary

From candidate interviews to developer crits: how Figma engineering uses FigJam to scale | Figma Blog

Figma Engineering uses FigJam as more than a brainstorming tool: it supports team culture, hiring, collaboration, and technical feedback in a rapidly growing, hybrid workplace. By moving activities such as stand-ups and architecture interviews onto a shared digital canvas, the team preserves the spontaneity of in-person collaboration while creating a persistent record of discussions and ideas. ## Supporting Remote Team Culture - Remote stand-ups had become transactional and often ran over time as the team grew. - Engineers now post updates asynchronously in FigJam during a timed, 10-minute session. - Team members can add stickies, photos, reactions, hearts, and comments, making it easier to share personal updates and connect informally. - The shared canvas also encourages playful traditions, such as “20-second animal,” where everyone draws a selected animal at the end of a meeting. ## Scaling Engineering Processes - Figma’s mobile team grew to more than 20 people, creating a need for processes that scale with the organization. - Engineers focus on helping new teammates learn the company’s infrastructure and technology stack. - FigJam provides a shared space for organizing information and maintaining collaboration as teams expand. ## Digital Whiteboarding for Candidate Interviews - Engineering interviews include architecture and system-design exercises designed to reveal how candidates think and collaborate. - When interviews moved online, Figma replaced physical whiteboards with FigJam. - Interviewers share a prompt, observe candidates as they develop a solution, and discuss the design together on the virtual canvas. - Candidates unfamiliar with FigJam receive a brief orientation, and open sessions allow them to participate without creating an account. - The process retains the collaborative nature of in-person whiteboarding while working within Figma’s hybrid model. Figma’s approach demonstrates how a shared, flexible canvas can support both serious technical work and informal team connection. For distributed engineering teams, combining asynchronous updates, collaborative whiteboarding, and lightweight social activities can help preserve culture while processes scale.

Read original(opens in new tab)
figma2 min readCurated summary

Figma + Lambda School: Where the remote classroom comes together to learn | Figma Blog

Figma’s collaboration features help Lambda School recreate the engagement and hands-on interaction of an in-person design classroom online. Students learn through shared presentations, live design work, peer feedback, and visible iteration rather than passively watching lectures. Because their work remains organized in Figma, the same files also support portfolio creation and continued peer learning. ## Interactive, Collaborative Lessons - Lambda School is a nine-month, live online program offering training in web development, mobile development, data science, and UX design. - Instructors present lessons in Figma during video conferences, allowing students to: - Zoom into designs and examine details. - Scroll through examples independently. - Use visible cursors to follow specific points in a presentation. - Students create and refine designs directly in shared Figma files. - Everyone can observe work in progress, learn from classmates, provide feedback, and remix existing designs. - This mirrors the collaborative workflows students will encounter on professional design teams. ## Real-Time and Asynchronous Feedback - Students and instructors can comment, tap each other for input, and work together in the same file. - Open audio, browser-based editing, and comments let students collaborate without constantly interrupting one another. - Students can work independently while classmates observe, take notes, or leave comments for later review. - When needed, an instructor or peer can join in and directly adjust pixels alongside the student. - Voting tools, such as stars, also encourage students to recognize and respond to one another’s work. ## A Lasting Record for Portfolios - Figma automatically preserves students’ designs, revisions, and project history. - This makes it easier to assemble a professional portfolio without searching through scattered files. - Students can focus more on interviews and career preparation while still presenting their development process. - Classmates’ work remains accessible after lessons, creating an ongoing resource for inspiration and learning. - The approach supports Lambda School’s broader career mission, which includes coaching, mentors, and connections to hiring partners. Figma’s use at Lambda School demonstrates how collaborative design tools can make remote education interactive, social, and career-oriented. Programs teaching practical creative skills can benefit from combining live instruction with shared workspaces that preserve feedback, iteration, and student progress.

Read original(opens in new tab)