1997
JUnit establishes the Java xUnit baseline
JUnit 0 uses TestCase subclasses and test-prefixed methods. It gives Java developers a repeatable test framework built around executable checks.
Software development
How the field of a Mobile Engineer got here: the sourced milestones from every published course of this career, on one axis.
1997 to 2025
185 milestones across 20 courses
The axis stretches toward recent years, where most milestones fall. Bars count milestones per year; dots are single milestones.
1 milestone
1997
JUnit 0 uses TestCase subclasses and test-prefixed methods. It gives Java developers a repeatable test framework built around executable checks.
23 milestones
2002
JUnit 3 becomes the next major Java baseline. The framework family becomes a familiar way to organize automated component checks.
2004
The py project renames std.utest to py.test and establishes collection concepts that remain in pytest. Python testing moves toward plain assertions and detailed failure output.
2004
Jason Huggins created JavaScriptTestRunner for an internal application, and the work became the open-source Selenium project. Browser-driven checks gained a reusable project and community.
2005
Damien Katz starts CouchDB with replication-friendly document storage, establishing the server model later mirrored by offline client databases.
2006
JUnit 4 uses Java 5 annotations such as Test. Test authors no longer depend on the earlier naming convention to mark test methods.
2006
Simon Stewart began a browser-control approach that used native browser capabilities instead of injecting all control through page JavaScript. This created a second automation architecture alongside Selenium Remote Control.
2007 Jan
Apple introduced iPhone as a software-rich handheld platform. Mobile assessment increasingly had to consider device-side applications, platform controls, and remote services together.
2007 Jan
Martin Fowler separates state verification with stubs from behavior verification with mocks. The distinction sharpens decisions about when an interaction is part of a test contract.
2007 Jan 9
Apple introduced iPhone as a touch-controlled phone, media device, and Internet communicator. Its 2007 release established a new target for touch-oriented application experiences.
2007 Nov
The Open Handset Alliance announced Android as an open platform for mobile devices. It established a shared platform for device makers, carriers, and application developers.
2008
Browser application cache APIs give sites a first standardized way to keep resources available offline, separate from later mutable-data sync.
2008
The two projects combined their communities and roadmaps. The merger set the direction for WebDriver APIs to replace the original Selenium Remote Control approach.
2008 Jan
iPhone OS 1.1.3 let users add website icons to the Home Screen. Web applications gained a direct launch surface before the PWA term and manifest standard existed.
2008 Mar 6
The beta SDK opened native third-party development with Cocoa Touch, Xcode, Interface Builder, Instruments, and the iPhone Simulator.
2008 Jul
Apple opened the App Store in July 2008. Third-party distributed apps became a mainstream security assessment target.
2008 Jul 10
Apple's App Store opened with 500 applications. Mobile development gained a centralized consumer distribution and review channel alongside the device SDK.
2008 Jul 10
Apple made more than 500 native applications available as iPhone 2.0 established a device-integrated distribution channel.
2008 Sep
Android 1.0 released publicly in September 2008. Testing practice expanded across a second major mobile platform with its own application and permission model.
2008 Sep 23
Google released the Android 1.0 SDK while partners prepared the first commercial device. Developers received a stable platform baseline for packaged Android applications.
2008 Sep 23
Android developers could target stable platform APIs and ship to the first Android device. Application components and their operating-system lifecycles became a public architecture boundary.
2008 Oct
Google and the Open Handset Alliance made Android platform source code available under the Android Open Source Project. Developers and device makers could inspect, build, and contribute to the platform.
2008 Dec 11
The four POUR principles and testable success criteria become the shared language later mobile guidance reuses instead of inventing a separate code.
2009 Aug
py 1.0 introduces funcargs, fixtures, and a plugin architecture. These features make reusable setup and controlled test environments part of the Python testing workflow.
98 milestones
2010
CouchDB reaches a 1.0 release under the Apache Software Foundation, giving practitioners a stable replication endpoint for syncing clients.
2010 Jan 27
The SDK introduced iPad simulation and the ability to create universal applications for iPad, iPhone, and iPod touch.
2010 Apr
The IETF published the community protocol as an Informational RFC. OAuth 2.0 later replaced it with a non-backward-compatible framework.
2010 Apr 8
The updated SDK exposed defined background services instead of unrestricted background execution, changing lifecycle design for third-party apps.
2010 Apr 9
The SDK added system-controlled multitasking capabilities. Mobile designs had to account explicitly for foreground and background work.
2010 Nov
pytest 2.0 is released as a package separate from py. The tool gains its own distribution path while retaining its test-running role.
2011
The controls supplied an early requirements-stage baseline for mobile application development and later informed OWASP's mobile guidance.
2011 Jul 8
Selenium 2.0 delivered stable WebDriver APIs for several languages while retaining compatibility with Selenium 1. The merged architecture became available as a mainstream release.
2011 Aug 8
The draft defined an HTTP binding for OpenID Connect messages and included authorization code and implicit paths. It established the OAuth-based direction of the protocol.
2011 Sep
OWASP AppSec USA material documented the Mobile Security Project and Mobile Top 10 risks. It gave practitioners a shared vocabulary for recurring mobile weaknesses.
2012 Feb 16
OpenID Foundation approval gave implementers a stable draft set with intellectual-property protections for deployment and interoperability work.
2012 Oct
RFC 6750 defined bearer-token presentation in HTTP and documented the security consequences of possession-based access.
2012 Oct
RFC 6749 standardized four roles, authorization and token endpoints, core grants, access tokens, and refresh tokens.
2012 Oct
The IETF published the authorization framework that OpenID Connect uses for requests, redirects, codes, tokens, and client roles.
2013
W3C started standardizing a JSON manifest for web-app behavior. This separated installed-app presentation metadata from page markup.
2013 May
Google introduced Android Studio as an Android-focused IDE with a Gradle-based build system. The tooling brought build flavors and dependency resolution into the standard Android workflow.
2013 Aug
RFC 7009 added an endpoint for clients to ask an authorization server to revoke access or refresh tokens.
2013 Sep 5
W3C publishes authoritative guidance on applying WCAG 2.0 to non-web technologies, including the native application class mobile teams ship.
2013 Nov 13
Dart 1.0 made the SDK a production-ready option for structured web applications. The release established the language, tools, and core libraries as a stable package.
2014
Hoodie promotes frontend-centric apps that keep working independent of connectivity, helping name the Offline First movement for product teams.
2014
The project grouped prominent mobile application risks into an awareness list that teams could use during training and requirements work.
2014 Feb
Core, Discovery, Dynamic Registration, and supporting specifications reached final status. Implementations could target a stable OpenID Foundation standard.
2014 May
The first public Service Workers draft introduced an event-driven worker for navigation and other events. It established the programmable response boundary used for offline behavior.
2014 Jun
Swift arrived as a new language for Apple-platform applications while retaining interoperability with existing Objective-C code.
2014 Jun
Google introduced Material Design as a consistent design approach alongside new Android APIs. It gave Android applications a shared visual and interaction language across devices.
2014 Jun
Apple introduced Swift as a safe, approachable, high-performance general-purpose language for its platforms.
2014 Jun
Apple introduced Swift in 2014 as a new language for its platforms. Apple later opened the language and its supporting projects in December 2015.
2014 Jun 5
Development of Cypress began with a first commit. The project pursued an in-browser runner aimed at modern web application testing.
2014 Jun 25
Google introduced Material Design as a design system spanning Android and web experiences. Android developers gained a common vocabulary for touch, layout, motion, and visual hierarchy.
2014 Nov
Browser support for Web Application Manifests began. Developers could increasingly declare installed-app identity and launch preferences in a shared format.
2014 Nov
Corrections to the final specifications were approved without changing the protocol's overall architecture.
2015
Android moved sensitive permission grants into app runtime, requiring apps to check, request, and handle individual permission states.
2015
Service Workers provide programmable request interception and background behavior so web apps can load and respond while offline.
2015 Jan
NIST formalized a vendor-neutral process for vetting third-party mobile apps against organizational security and reliability needs.
2015 Feb 26
W3C publishes informative guidance on how WCAG 2.0 applies to mobile web, hybrid, and native apps, covering small screens, touch, and gestures.
2015 Mar
Facebook presented React Native as a way to apply React's component model to mobile interfaces. The project established the JavaScript and native UI model used by later releases.
2015 Mar 26
React's declarative component and state model became available for native iOS controls, creating a new shared-code boundary above UIKit.
2015 Apr 22
The Foundation introduced self-certification with initial provider deployments from major implementers. Conformance testing became a practical interoperability checkpoint.
2015 May 3
Flutter is announced as a project for building high-quality user interfaces across platforms. The announcement establishes the rendering and developer-experience direction that later Flutter releases develop.
2015 Jul 21
User Agent Accessibility Guidelines 2.0 finalize expectations for browsers and media players, including mobile user agents that render accessible content.
2015 Sep
RFC 7636 bound an authorization code to a client-created verifier, addressing code interception attacks against public clients.
2015 Sep 14
One team could share React Native features across iOS and Android while retaining platform-specific native integration.
2015 Sep 14
React Native expanded from its earlier iOS release to Android. Shared React components became a cross-platform route that retained native interface output.
2015 Sep 24
Authoring Tool Accessibility Guidelines 2.0 address accessible editors and the production of accessible content, including mobile authoring contexts.
2015 Oct
Chrome documentation grouped manifest, service-worker, and app-like presentation techniques under Progressive Web Apps. The term gave the layered approach a practical implementation path.
2015 Oct
RFC 7662 defined a protected endpoint for querying a token's active state and authorization metadata.
2015 Dec 3
The language, compiler, debugger, libraries, Linux port, and package manager opened to community development through Swift.org.
2015 Dec 3
Apple published the language, standard library, debugger, core libraries, and a new package manager as open-source projects.
2016
Curated Offline-First resource lists gather tools, posts, and UX guidance, marking offline capability as a cross-stack product concern.
2016
OWASP recorded a final 2016 Mobile Top 10 list. Mobile assessment could compare recurring risk categories across apps while retaining app-specific evidence.
2016 Apr
Microsoft announced work to bring React Native to the Windows ecosystem. The project therefore began extending beyond its original Android and iOS targets.
2016 Sep 13
Swift 3 delivered broad source changes while the package manager became officially available for cross-platform packages.
2016 Sep 13
Swift Package Manager became part of the Swift toolchain, establishing a native model for package manifests, dependency resolution, and builds.
2016 Dec
Certification expanded from providers to the applications that consume OpenID Connect responses, adding tests for the other side of the protocol exchange.
2017
JUnit 5 sets a Java 8 baseline and supports lambda-based dynamic tests. The platform separates test engines from the tools that discover and run tests.
2017
WatermelonDB's lazy SQLite model and Sync protocol are proven in production (including Nozbe), showing scalable offline-first lists on devices.
2017 Mar
The project introduced a getting-started path that avoided native development-tool setup for initial experimentation. It made the surrounding development workflow a more visible part of the React Native experience.
2017 May
Android announced support for Kotlin, with the Kotlin plug-in bundled in Android Studio 3.0. Kotlin became a supported language choice for Android applications alongside existing Java interoperability.
2017 May 17
Google announced official Kotlin support for Android development. Android teams gained a supported alternative to Java within the existing SDK and toolchain.
2017 May 17
Google paired an app architecture guide with lifecycle, observable data, and persistence components. State ownership and lifecycle-aware boundaries moved into official Android guidance.
2017 May 17
Flutter enters alpha, making the framework available for wider early testing. Developers can begin evaluating the widget-based approach before the first stable release.
2017 Aug
The RP certification program moved from pilot status to general availability, making client-side conformance evidence broadly accessible.
2017 Sep 19
Swift 4 combined language and standard-library additions with a compatibility mode for existing Swift 3 source.
2017 Oct
RFC 8252 made external user agents and authorization code with PKCE the practice for native applications.
2017 Oct 10
Cypress opened its source and public beta after years of private development. Its runner, desktop application, reporter, and supporting adapters became available to the wider community.
2018 Jan 13
The first full MASVS release provided a common verification standard for mobile application requirements and assessment results.
2018 Feb 22
Dart 2 was presented as a language update focused on client-side web and mobile development. The preview described a strengthened type system and rebuilt tooling.
2018 Mar
Safari adopted manifest support with iOS 11.4. Manifest-based installed-web-app metadata became relevant across another major browser platform.
2018 Apr
The April Working Draft documented manifest members for names, icons, launch URLs, display modes, and scope. These members became the design surface for installed-app presentation.
2018 May
Android Jetpack combined components, tools, and architectural guidance into unbundled AndroidX libraries. It reinforced reusable solutions for lifecycle, navigation, background work, and data handling.
2018 May 8
Jetpack brought the Support Library and Architecture Components under one suite with Android Studio and Kotlin integration.
2018 Jun
The React Native team described work toward a more asynchronous rendering architecture and a reworked native module system. This began the public transition away from the original internal design.
2018 Jun 5
Success criterion 2.5.5 Target Size sets an AAA pointer-target requirement that many mobile teams tracked before a tighter AA floor existed.
2018 Jun 5
New success criteria such as Orientation, Reflow, Pointer Gestures, Pointer Cancellation, and Motion Actuation encode mobile interaction problems directly.
2018 Jun 5
W3C standardized platform-neutral and language-neutral interfaces and a wire protocol for remote browser control. Tool and browser implementations gained a common standards target.
2018 Aug 7
The stable Dart 2 release included a rewritten web platform. It aligned the language, libraries, and tools for web and mobile framework work.
2018 Sep 20
Cypress declared its test runner generally available and retained the runner as free, open-source software. The accompanying service added hosted recording and parallel execution features.
2018 Oct
GitHub introduced GitHub Actions as a limited public beta. Repository automation became a first-class GitHub capability.
2018 Dec 4
Flutter offered a stable shared UI toolkit for iOS and Android from one Dart codebase, including its own rendering and widget layers.
2018 Dec 4
Flutter 1.0 marks the first stable release. The framework becomes a production option for mobile applications written in Dart.
2019
Apps targeting Android 10 received scoped access to external storage, changing how developers designed shared-file access and data exposure.
2019
Ink and Switch publish the local-first software essay, arguing for local ownership with sync as collaboration infrastructure.
2019 Mar
Apple operating systems could provide the Swift runtime, reducing the need for applications to bundle those runtime libraries.
2019 Apr 19
The revision refined vetting inputs and outputs and connected mobile app requirements to established security standards and organizational process.
2019 May 7
Flutter announces a technical preview for web support. The target model expands beyond the original mobile focus while web tooling matures.
2019 Jun
SwiftUI introduced a declarative, state-driven interface model that worked with Xcode previews and could coexist with existing frameworks.
2019 Jun
Sessions on building a first app, SwiftUI essentials, and data flow establish views-as-descriptions and state-driven updates as the default teaching path.
2019 Jun 3
Apple introduces SwiftUI as a declarative UI framework shared across Apple platforms, with Xcode live previews as part of the developer story.
2019 Jun 3
Apple added a declarative UI framework across its platforms. Model data and state changes could drive interface updates directly.
2019 Jul
Version 0.60 automated many native module linking steps and made CocoaPods part of the iOS project setup. Native dependencies became easier to integrate but still required platform-aware upgrades.
2019 Aug
The beta added built-in CI/CD with hosted Linux, macOS, and Windows runners. This established the runner model for build and test jobs.
2019 Aug
RFC 8628 standardized a flow that moves user interaction from an input-constrained device to a separate device.
2019 Sep
Version 0.61 replaced separate live and hot reload modes with Fast Refresh. The workflow better supported function components and Hooks during UI iteration.
2019 Sep 20
Xcode gained direct support for creating, adding, removing, and managing Swift packages in application projects.
2019 Oct
Google released a Developer Preview of Jetpack Compose, a declarative native user interface toolkit. The preview connected Compose development with dedicated Android Studio tooling.
2019 Nov
GitHub Actions became generally available. The platform became available for production repository automation.
2019 Nov
W3C published a Candidate Recommendation Snapshot for Service Workers. The lifecycle and fetch-interception model had become a mature web-platform specification.
2019 Dec 11
Dart 2.7 added extension methods, letting code add statically resolved members to types it does not control. The feature made static type information central to extension selection.
63 milestones
2020
Google's Accompanist libraries started filling common Compose gaps such as permissions while documenting a path to upstream into AndroidX.
2020
Scoped storage enforcement, one-time permissions, and package visibility required apps to narrow file, sensor, and cross-app access.
2020 May 6
Playwright reached its first stable major release with bundled Chromium, Firefox, and WebKit builds. One automation API could target the three browser engines.
2020 Jun
The SwiftUI lifecycle let application types declare scenes and global data without making UIKit delegates the primary interface structure.
2020 Jun 22
SwiftUI gains APIs to build entire apps with SwiftUI scenes and adds lazy stack APIs, widening what teams can keep in declarative code.
2020 Jun 22
Widgets across iOS, iPadOS, and macOS are introduced with WidgetKit, making SwiftUI the interface path for home-screen and related widget surfaces.
2020 Jul
Version 0.63 made LogBox the default error, warning, and log experience. Debugging output became a first-class part of the developer workflow.
2020 Sep 22
Swift published downloadable Windows toolchains, extending practical compiler and library work beyond Apple platforms and Linux.
2020 Nov 19
The beta began ecosystem migration toward explicit nullability. Packages and applications could opt in through their SDK constraints.
2020 Dec
Environments added protection rules and scoped secrets to deployment targets. Deployment approval became workflow configuration.
2021
Vitest starts as a test runner designed for Vite projects. JavaScript and TypeScript teams gain a runner aligned with their build environment.
2021 Mar 3
Dart 2.12 introduced sound null safety and stable FFI. New code could use non-nullable types by default while existing projects migrated incrementally.
2021 Mar 3
Flutter 2 makes web a stable target. Teams can apply the shared widget model to browser applications while accounting for browser navigation and platform behavior.
2021 Mar 10
The AndroidX Compose API guidelines document naming, Modifier contracts, stability, and hoisted-state patterns used by framework and library authors.
2021 Mar 12
The Financial-grade API profiles finalized a constrained OAuth and OpenID Connect security baseline for higher-risk API ecosystems.
2021 Apr
GitHub added concurrency controls for workflow runs and jobs. Teams could cancel or queue overlapping work through YAML.
2021 Jun
Xcode Cloud connected hosted builds and tests with Xcode, TestFlight, and App Store Connect as one continuous-delivery path.
2021 Jun
WWDC21 frames identity, lifetime, and dependencies as the rules behind updates, giving practitioners language for state resets and diff behavior.
2021 Jun
Swift concurrency added language-level suspension, structured tasks, and actor-based isolation to application code.
2021 Jun 7
Apple describes a major SwiftUI advance covering lists, search, accessibility, and related interface capabilities used in production apps.
2021 Jul
Jetpack Compose 1.0 was released as stable for production use. Its declarative state model became a supported path for building native Android user interfaces.
2021 Jul
OWASP released MSTG v1.2 with updated test material, tools, and platform guidance. The guide continued to connect verification work with changing Android and iOS practice.
2021 Jul 28
Android's declarative native UI toolkit reached production stability with state-driven rendering and integration with existing Jetpack architecture libraries.
2021 Sep
Ephemeral runners and workflow_job webhooks enabled single-job self-hosted runners that autoscalers can manage.
2021 Sep
RFC 9126 added back-channel submission of authorization request parameters before the browser-facing request.
2021 Sep 8
Flutter 2.5 ships with framework and tooling updates. The release reinforces the regular upgrade work that production Flutter projects must plan for.
2021 Sep 20
Async and await, tasks, task groups, actors, and isolation became language-level concurrency tools.
2021 Oct 13
Selenium 4 rebuilt Grid for standalone and distributed operation and added browser-facing capabilities while preserving stable public APIs. End-to-end suites gained a modernized remote execution layer.
2021 Nov
Reusable workflows gained outputs, environment-secret support, and audit-log visibility. Organizations could centralize workflow logic.
2022
Android Developers publish offline-first architecture guidance so repositories treat local storage as the read source of truth.
2022 Mar
Safari 15.4 updated Web App Manifest and ServiceWorker behavior for websites and Home Screen web apps. Platform-specific support remained an implementation detail to test rather than assume.
2022 May 11
Flutter 3 adds stable macOS and Linux desktop support. The supported-target matrix becomes a direct product and testing concern rather than an abstract capability list.
2022 Jun
WWDC22 introduces data-driven NavigationStack and NavigationSplitView, which become the replacements for NavigationView-based patterns.
2022 Jun 6
Apple announces an enhanced navigation API and Swift Charts, shifting everyday navigation and data visualization toward newer declarative types.
2022 Aug 23
The new MAS name made the combined verification standard, testing guide, checklists, and practice apps explicit parts of one framework.
2022 Sep
Version 0.70 enabled Hermes by default and introduced unified Codegen configuration. The release also improved Android support for New Architecture libraries.
2022 Sep 12
Session Management, Front-Channel Logout, Back-Channel Logout, and RP-Initiated Logout became final specifications. Deployments gained stable choices for coordinating sessions beyond login.
2022 Nov
Automerge's maintainers document ongoing CRDT, compression, and sync protocol work aimed at local-first application persistence.
2023
MASVS 2.0 simplified and clarified the standard while relying more on related industry standards. Testing details remained in MASTG during the transition.
2023 Jan 25
Flutter 3.7 expands Material 3 support and related framework capabilities. Interface choices can follow the evolving design-system APIs rather than remaining fixed to earlier examples.
2023 Feb
iOS and iPadOS 16.4 added Web Push support for Home Screen web apps. Push capability now depended on the app being added to the Home Screen and on a user-triggered permission request.
2023 Apr 1
The revision simplified platform-neutral controls and moved verification levels toward testing profiles tied to concrete assessment scenarios.
2023 May 10
Dart 3 required sound null safety and added records, patterns, and class modifiers. It also previewed compilation to WebAssembly for web work.
2023 Jun
The Observation framework and @Observable become the preferred path for shared models, with finer dependency tracking than ObservableObject.
2023 Jun
Apple releases developer tools for Vision Pro that center Xcode, SwiftUI, RealityKit, and ARKit for spatial apps.
2023 Jul 28
Stable test components and profiles separated control intent from the platform-specific techniques used to verify it.
2023 Aug
OWASP recorded the initial release of the current Mobile Top 10 in August 2023. The list reflects a refreshed taxonomy for communicating mobile application risks.
2023 Aug 29
Apple publishes a technote on adopting NavigationSplitView while supporting older NavigationView deployments during migration.
2023 Sep
RFC 9449 standardized application-layer proofs that sender-constrain OAuth access and refresh tokens to a key.
2023 Sep 18
Macros added compile-time source transformation, alongside ownership work and noncopyable types.
2023 Oct 5
Success criterion 2.5.8 makes a 24 by 24 CSS pixel minimum target size a Level AA requirement, shifting touch-target sizing into mainstream conformance.
2023 Oct 5
WCAG 2.2 extends 2.1 with additional criteria used heavily on touch UIs, while remaining backward compatible with earlier 2.x conformance claims.
2023 Dec
Artifact v4 made uploaded artifacts job-scoped and immutable. Artifact transfer needed to account for its compatibility boundary with earlier versions.
2023 Dec 16
The Foundation approved the second errata set for Core, Discovery, and Dynamic Registration, plus the first errata set for Back-Channel Logout.
2024 Jan
MASVS 2.1 added the MASVS-PRIVACY category. Privacy became an explicit control area in the standard used to organize mobile assessment objectives.
2024 Jan 18
A dedicated privacy category extended app verification to testable controls for personal-data handling within the mobile app.
2024 May 14
Dart 3.4 documented WebAssembly support for Flutter web and continued work on a Dart-to-Wasm compiler path. The release connected the language's web target to a newer compilation route.
2024 Jun
Xcode 16 previews adopt a dynamic linking architecture that uses the same build artifacts for previews and code execution, tightening the edit loop.
2024 Sep
MongoDB announces deprecation of Atlas Device Sync and Realm SDKs, forcing many mobile offline architectures to plan migrations.
2024 Sep 17
Swift 6 added a language mode with stronger concurrency checking and expanded cross-platform libraries and tooling.
2024 Oct
Version 0.76 made the New Architecture the default for new projects. The new renderer and native module systems changed the migration context for application and library maintainers.
2025 Jan
RFC 9700 consolidated deployment experience, prohibited unsafe grants, and updated defenses for redirects, tokens, and authorization responses.
2025 Mar
ElectricSQL marks a 1.0 release for its Postgres sync engine, packaging partial replication and delivery for client local stores.