<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Fabio Arcari</title>
    <description>The latest articles on Forem by Fabio Arcari (@arcari).</description>
    <link>https://forem.com/arcari</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3496651%2F3ce1a95d-2088-40bb-b218-d04d5d457ffd.jpeg</url>
      <title>Forem: Fabio Arcari</title>
      <link>https://forem.com/arcari</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/arcari"/>
    <language>en</language>
    <item>
      <title>From Microsites to Context-Driven Architecture: Lessons Learned</title>
      <dc:creator>Fabio Arcari</dc:creator>
      <pubDate>Fri, 05 Sep 2025 21:15:27 +0000</pubDate>
      <link>https://forem.com/subito/from-independent-microsites-to-context-driven-architecture-5166</link>
      <guid>https://forem.com/subito/from-independent-microsites-to-context-driven-architecture-5166</guid>
      <description>&lt;p&gt;&lt;em&gt;From 12 separate microsites to 6 context-specific ones: the web architecture powering &lt;a href="https://www.subito.it/" rel="noopener noreferrer"&gt;subito.it&lt;/a&gt;, Italy’s leading online classifieds platform, and the lessons we learned from overengineering.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Four years ago, at &lt;a href="https://www.subito.it/" rel="noopener noreferrer"&gt;subito.it&lt;/a&gt;, we had fully embraced the microsite approach. &lt;br&gt;
Every page or small group of pages had its own repository, its own deploy pipeline, and its own infrastructure. &lt;br&gt;
It was the era of the article &lt;a href="https://adevinta.com/techblog/our-microsite-architecture/" rel="noopener noreferrer"&gt;"Our microsite architecture"&lt;/a&gt; published on Adevinta's tech blog, where we proudly described how we had "accelerated the frequency of releases and the independence of teams by applying a microsite approach."&lt;/p&gt;

&lt;h3&gt;
  
  
  What is a Microsite?
&lt;/h3&gt;

&lt;p&gt;A &lt;strong&gt;microsite&lt;/strong&gt; is an architectural approach where individual pages or small groups of related pages are developed, deployed, and maintained as completely separate applications. &lt;br&gt;
Each microsite typically has its own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Repository and codebase&lt;/li&gt;
&lt;li&gt;CI/CD pipeline and deployment process&lt;/li&gt;
&lt;li&gt;Infrastructure and hosting environment&lt;/li&gt;
&lt;li&gt;Technology stack (which can differ from other microsites)&lt;/li&gt;
&lt;li&gt;Team ownership and responsibility&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This approach contrasts with traditional monolithic applications where all pages are part of a single large codebase. &lt;br&gt;
Microsites aim to provide maximum team autonomy and deployment independence, allowing different teams to work on different parts of a website without interfering with each other.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Today, in 2025, we have an update on this architecture: we've found a better balance between agility and maintainability through continuous learning and optimization&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Microsite Era: When Everything Seemed Perfect
&lt;/h2&gt;

&lt;p&gt;The microsite approach we had adopted seemed like the ideal solution for our problems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Lean pipelines&lt;/strong&gt;: each microsite had a fast and independent deploy pipeline&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team autonomy&lt;/strong&gt;: each team could work on their own piece without interference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Independent releases&lt;/strong&gt;: no mutual blocking between teams&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Over time, however, we started noticing the first issues:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Uncontrolled Repository Proliferation&lt;/strong&gt;, what had started as a strategy for important pages had begun to be applied to secondary pages as well.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Distributed Technical Debt&lt;/strong&gt;, with 12 repositories to maintain, some pages started falling behind in dependency updates and security patches&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Excessive Infrastructure Overhead&lt;/strong&gt;, each microsite required:

&lt;ul&gt;
&lt;li&gt;Monitoring configuration&lt;/li&gt;
&lt;li&gt;Alerting setup&lt;/li&gt;
&lt;li&gt;Pipeline maintenance&lt;/li&gt;
&lt;li&gt;CDN Configuration&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The New Strategy: Context-Driven Microsites
&lt;/h2&gt;

&lt;p&gt;Instead of going completely back to a monolith (which would have reintroduced the problem of overly long pipelines), we chose a middle path: &lt;strong&gt;context-specific microsites&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Principles of the New Architecture
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Context First&lt;/strong&gt;: we group pages that share the same business domain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Clear Ownership&lt;/strong&gt;: each microsite remains owned by a specific team&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manageable Size&lt;/strong&gt;: large enough to justify the infrastructure, small enough to remain maintainable&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Our new architecture consolidates related pages into context-specific groupings:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Public Content Hub&lt;/strong&gt;: All public content pages and SEO-relevant content&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Ad Insertion Flow&lt;/strong&gt;: The entire ad insertion workflow&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication Service&lt;/strong&gt;: Authentication, login and sign-up&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transaction Service&lt;/strong&gt;: The entire transaction ecosystem&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Paid Options Service&lt;/strong&gt;: Paid services and premium options&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;User Management Service&lt;/strong&gt;: Personal area and profile management&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The Transition Process
&lt;/h2&gt;

&lt;p&gt;Our migration follows a structured approach with three main phases:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Phase 1: Preparation and Setup&lt;/strong&gt;&lt;br&gt;
The initial phase focuses on preparing the target microsite to receive the migrated functionality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Set up dedicated layouts and components in the target architecture&lt;/li&gt;
&lt;li&gt;Import and adapt components to the consolidated codebase&lt;/li&gt;
&lt;li&gt;Update environment variables and configuration management&lt;/li&gt;
&lt;li&gt;Establish monitoring and alerting for the new consolidated service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Phase 2: Quality Assurance and Testing&lt;/strong&gt;&lt;br&gt;
Before going live, we conduct comprehensive checks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Execute automated end-to-end (E2E) and manual tests&lt;/li&gt;
&lt;li&gt;Validate third-party integrations (e.g., GTM)&lt;/li&gt;
&lt;li&gt;Verify page headers, caching policies, and security configurations&lt;/li&gt;
&lt;li&gt;Confirm monitoring and metrics collection are correctly implemented&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Phase 3: Production Migration and Cleanup&lt;/strong&gt;&lt;br&gt;
The final phase involves the actual cutover and decommissioning of legacy systems:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Gradual Rollout:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Route traffic progressively from legacy to consolidated microsite&lt;/li&gt;
&lt;li&gt;Monitor performance and error rates during the transition&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Legacy Cleanup:&lt;/strong&gt;&lt;br&gt;
Following our established Service End-of-Life procedures, we systematically decommission the old microsite:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Destroy monitoring, alerts, and dashboards&lt;/li&gt;
&lt;li&gt;Archive repositories and remove deployment configurations&lt;/li&gt;
&lt;li&gt;Clean up infrastructure resources (databases, IAM roles, etc.)&lt;/li&gt;
&lt;li&gt;Update routing and add redirects where necessary&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Conclusions
&lt;/h2&gt;

&lt;p&gt;Our journey from microsites to a more consolidated approach wasn't a failure of microsite architecture, but rather a maturation of our understanding of when and how to apply it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What we learned:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Architecture must evolve with business and team needs&lt;/li&gt;
&lt;li&gt;Not everything needs to be a microservice/microsite - like any architectural pattern, it has its trade-offs&lt;/li&gt;
&lt;li&gt;Context is fundamental, group by business context, not technical convenience&lt;/li&gt;
&lt;li&gt;Pages that belong to the same user flow should probably stay together&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Today, with our 6 context-driven microsites, we've found a balance that allows us to maintain team autonomy and deployment speed while significantly reducing maintenance overhead.&lt;/p&gt;

&lt;p&gt;The path to perfect architecture doesn't exist, but the path to ever-improving architecture does.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>programming</category>
      <category>javascript</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
