Scala 3 Migration: Report from the field
Migration Experience & Difficulty
- Many readers found the report valuable and realistic, especially for projects using advanced Scala 2 features (macros, type projections, experiments).
- Consensus: if a codebase avoids experimental features and custom macros, migration is usually manageable, especially with Scala 3 compatibility flags and rewrite tools.
- Some teams have already migrated even very old Scala 2.8 code, citing macros and abstract type projections as the main pain points.
- Others perceive migration as daunting, with no strong business incentive until Scala 2 becomes unsustainable (e.g., libraries dropping support). A few argue a formal Scala 2 “sunset” would spur action.
Ecosystem Readiness & Binary Compatibility
- Several commenters say “most of the ecosystem” now has Scala 3 releases; Spark is repeatedly mentioned as the big holdout, with Databricks’ choices seen as dragging the ecosystem.
- Scala 3’s binary compatibility story (within 3.x and back to 2.13, excluding experimental features/macros) is highlighted as a major improvement over historic 2.x breakage.
- Interop with Scala 2.13 binaries reduces urgency but also reduces migration pressure.
Tooling & Build Systems
- Tooling remains a recurring complaint: IDE support is described as improved but still frustrating; some blame “academic” priorities for ignoring tooling.
- sbt has detractors but is said to be much better than it used to be; alternatives like Maven, Gradle (with recent Scala 3 fixes), Mill, and particularly scala-cli get positive mentions.
Community, Governance & Politics
- Some commenters strongly criticize governance and community behavior around the Scala Center, referencing offensive conference language and a defamation case.
- Others downplay this as personal or organizational drama with little relevance to technical decisions like upgrading from Scala 2 to 3.
- There is no consensus: some see toxicity as a serious deterrent; others say the real ecosystem mostly lives outside these institutions.
Language Design, Libraries & Competing Options
- Deep split on Scala 3: some call it “what Scala was supposed to be” with a near‑ideal type system; others see unnecessary syntax churn and overcomplexity that hurts maintainability.
- Debate over FP-heavy stacks (Cats, ZIO, Typelevel) vs “just Java libraries”; some teams refuse advanced type tricks, others treat them as standard practice.
- In data engineering, Scala is reported to be losing ground to Python and Java as Spark usage shifts and managed platforms grow.
- For people leaving Scala, Rust, Kotlin, and Java are the most cited destinations; Rust praised for momentum but seen by some as less suited to typical backend workloads than JVM languages.