magnASCII.dev Simone Magnaschi
Senior Full Stack Web Dev
Bookmarks tagged with #sw-architecture.
Show all

Bootstrapping a Frameworkless PHP Application

A single bootstrap file. A PSR-11 container. No fullstack framework required.
Saved on: 2026-05-05

Laws of Software Engineering

A collection of principles and patterns that shape software systems, teams, and decisions.
Saved on: 2026-04-21

Reinventing Payment: From One Table to DDD

How I evolved a PHP payment system from a single table to channels, state machines, and hexagonal architecture. Real code, real trade-offs.
Saved on: 2026-04-15

S3 Files and the changing face of S3

Andy Warfield writes about the hard-won lessons dealing with data friction that lead to S3 Files
Saved on: 2026-04-08

Nobody knows how the whole system works

One of the surprising (at least to me) consequences of the fall of Twitter is the rise of LinkedIn as a social media site. I saw some interesting posts I wanted to call attention to: First, Simon W…
Saved on: 2026-02-09

The challenges of soft delete

Exploring alternatives to the archived_at column pattern: triggers, application events, and WAL-based change data capture.
Saved on: 2026-01-21

Share Nothing — Do Everything

The title of this article was used as the subtitle for the pthreads extension.
Saved on: 2025-12-10

Your URL Is Your State

A deep dive into how thoughtful URL design can enhance usability, shareability, and performance. Learn what state belongs in URLs, common pitfalls to avoid, and practical patterns for modern web apps.
Saved on: 2025-11-03

HATEOAS for Haunted Houses

A case-study in using Hypermedia as the Engine of Application State (HATEOAS) architecture to build a flexible control system for a local haunted house on a tight delivery schedule.
Saved on: 2025-10-11

Use One Big Server

A lot of ink is spent on the "monoliths vs. microservices" debate, but the real issue behind this debate is about whether distributed system …
Saved on: 2025-09-01

Everything I know about good system design

I see a lot of bad system design advice. One classic is the LinkedIn-optimized “bet you never heard of queues” style of post, presumably aimed at people who are…
Saved on: 2025-08-17

Progressive JSON

Why streaming isn't enough.
Saved on: 2025-06-02

takaakit/uml-diagram-for-ddd-example-in-evans-book

UML diagram for the DDD example—a cargo shipping system—from Eric Evans' book - takaakit/uml-diagram-for-ddd-example-in-evans-book
Saved on: 2025-04-19

Ideas from "A Philosophy of Software Design"

Almost a month ago, I created a telegram channel with the goal of reading tech books consistently, and sharing summaries of them.This week, I have finished reading the first book - “A Philosophy of So
Saved on: 2024-12-22

Design Token-Based UI Architecture

Describing established patterns for organizing design tokens and practical approaches for automation
Saved on: 2024-12-18

Netflix’s Distributed Counter Abstraction

In our previous blog post, we introduced Netflix’s TimeSeries Abstraction, a distributed service designed to store and query large volumes of temporal event data with low millisecond latencies…
Saved on: 2024-11-14

Serialization is the Secret - Zach Daniel

If a value mutates in the forest with no one to see it, does it really mutate?
Saved on: 2024-10-02

Continuous reinvention: A brief history of block storage at AWS | All Thing

Marc Olson, a long-time Amazonian, discusses the evolution of EBS, highlighting hard-won lessons in queueing theory, the importance of comprehensive instrumentation, and the value of incrementalism versus radical changes. It's an insightful look at how one of AWS’s foundational services has evolved to meet the needs of our customers.
Saved on: 2024-08-22

UI = f(statesⁿ)

“UI is a function of state” is a pretty popular saying in the front-end world. In context (pun intended), that’s typically referring to application or component state. I thought I’d pull that thread a little further and explore all the states that can effect the UI layer…
Saved on: 2024-02-17

3 Signs Your Project is Becoming Legacy - Arrays Creep

In [the first post](/blog/3-signs-your-project-is-becoming-legacy-and-how-to-avoid-them), we looked at the long-term effects of our decisions. Turning a legacy project into a fresh one is a matter of the "just do it" approach. But there are 3 things we should take with care even if our project seems outside the legacy project category. First of those are arrays.
Saved on: 2024-01-09

10 Tips For Building SSR/HDA applications

In this guide, Carson Gross provides ten practical tips to help developers transition from Single Page Applications (SPAs) to Server-Side Rendering and Hypermedia-Driven Applications, focusing on essential mindset shifts and architectural advantages.
Saved on: 2023-12-22

Stop building databases

Join me as we take a look at common application data patterns, and how they relate to the inner-workings of databases. In this post, we discuss data caching, indexing, optimistic mutations, and recursive cache invalidation. We will see how life might be easier if we could just use a frontend optimized database like SQLSync instead.
Saved on: 2023-12-02

Retries – An interactive study of common retry methods – Encore Blog

Visually explore different methods of retrying requests to learn why some methods are dangerous and what the best practice is.
Saved on: 2023-11-23

Goodbye integers. Hello UUIDs!

Exploring the tradeoffs of different database indexes; from sequential integers, randomly generated UUIDs, to time-based identifiers and the latest & greatest UUIDv7
Saved on: 2023-10-02

How to do a full rewrite

Fix the system, not your understanding
Saved on: 2023-09-24

Graceful behavior at capacity

Suppose we’ve got a service. We’ll gloss over the details for now, but let’s stipulate that it accepts requests from the outside world, and takes some action in response. Maybe those requests are HTTP requests, or RPCs, or just incoming packets to be routed at the network layer. We can get more specific later. What can we say about its performance? All we know is that it receives requests, and that it acts on them.
Saved on: 2023-08-10

What we talk about when we talk about System Design

Early in my research career, I had a chance to work with some of the best system researchers1 in the world on a number of really interesting system designs. One of the enjoyable aspects of research was the particular process used by researchers (particularly in the SOSP/OSDI community) to come up with novel yet practical designs. This design process can be characterized as “fighting complexity with abstraction”: in any complex environment, how do you corral that complexity into cleanly defined boxes (or more technically, abstractions) and then divide functionality across these boxes? This sounds like hyperbole, but I’ve been quite lucky when it comes to mentors; put together, my advisors at Cornell and colleagues at the now-defunct MSR Silicon Valley lab were responsible for inventing much of modern distributed computing over a span of five decades, but that’s a topic for another post. ↩
Saved on: 2023-07-22

Two Kinds of Legacy Code Upgrade

I often speak with project owners or CTOs, who ask for help with legacy project upgrades. They typically want something like "upgrade to PHP 8.0" or "upgrade to Symfony 5.4". There are two ways to do that. Which one is the best for you? Let's ask the important question first.
Saved on: 2023-07-15

Browsertech Digest: Figma is a File Editor

Hey folks, welcome to the digest! Today’s issue is about a pain point developers encounter when shipping desktop-class apps to the browser. File editors and...
Saved on: 2023-07-13

karanpratapsingh/system-design: Learn how to design systems at scale and pr

Learn how to design systems at scale and prepare for system design interviews - karanpratapsingh/system-design
Saved on: 2023-07-05

Modern CSS For Dynamic Component-Based Architecture

Explore modern project architecture, theming, responsive layouts, and component design. Learn to improve code organization, dig into layout techniques, and review real-world, context-aware components that use cutting-edge CSS techniques.
Saved on: 2023-06-18

Conquering Legacy Code: Embrace the Strangler Fig Pattern for Seamless Software Migration

In the software development world, legacy code is inevitable. As technology evolves and user needs change, 99% of software engineers will encounter legacy code in their careers. Many developers, however, feel overwhelmed when faced with the task of updating or migrating a legacy system. Fear not, for we have a solution: the Strangler Fig pattern.
Saved on: 2023-05-11

Load Balancing

A bottom-up, animated guide to HTTP load balancing algorithms.
Saved on: 2023-05-04

Entertainment

We create and provide access to world-class entertainment through Amazon Originals, Prime Video, Audible, Amazon Games, Twitch, Amazon Music, Prime Gaming, and more. Amazon’s digital entertainment products enable customers to access the latest apps and games, stream or download movies, TV shows,…
Saved on: 2023-05-04

Refactoring Legacy Code with the Strangler Fig Pattern

There are strategies for reducing the size and responsibilities of large objects. Here’s one that worked for us at Shopify, an all-in-one commerce platform supporting over 1M merchants across the globe.
Saved on: 2023-04-20

Modelling Busines Processes in Laravel - Laravel News

As developers, we often map business processes to digital processes, from sending an email to something quite complex. Let's look at how we can clean this up.
Saved on: 2023-03-25

How Discord Stores Trillions of Messages

Engineer Bo Ingram shares insight into how Discord shoulders its traffic and provides a platform for our users to communicate.
Saved on: 2023-03-08

Legacy Software Systems: How to Live with Aging Software Architecture?

Your guide to legacy software systems. How a software developer can be a good repairman when working on legacy software? Find our examples and experts' tips!
Saved on: 2023-03-06

Four Ways to Build Web Apps

Intro This is my opinionated list of four approaches to building websites and web applications. Publicly hosted on the internet, serving HTML, CSS, JavaScript, images, etc over HTTP. #1: Hugo Static Sites + Progressive Web Apps Static websites are boring. Vendors rarely talk about them because the margins are miniscule compared to flashy, compute-heavy services. It is seen as a table stakes offering. Though they have received more attention during the “JAM Stack” trend, my position is that they are still underappreciated and underutilized.
Saved on: 2023-02-21

Web Rendering Patterns

10 Web Rendering Patterns in a nutshell
Saved on: 2023-02-11

What does POSIX conformance/compliance mean in the distributed systems worl

Answer (1 of 4): When I hear people refer to POSIX, they almost always mean the "File and Directory Operations" portion of the standard(s). Then again, I'm a filesystem developer. If I worked on schedulers (for example) I might hear more about different sections, but I'll try to stick with the ...
Saved on: 2023-02-08

How to keep your legacy PHP project working with minimal efforts

I hope this article can be helpful for PHP-based website owners, but also it can be quoted in a conversation between a PHP developer and a client. So, what is the point? Extremely outdated but…
Saved on: 2022-11-11

37signals Dev — Vanilla Rails is plenty

A common critique of Rails is that it encourages a poor separation of concerns. That when things get serious, you need an alternative that brings the missing pieces. We disagree.
Saved on: 2022-11-10

Modeling a scalable fantasy football database with Amazon DynamoDB | AWS Da

Today’s online games generate more data than ever and have request rates that reach millions per second. For these data-intensive games, it’s important for developers to select a database that delivers consistent low latency at any scale and has throughput elasticity to accommodate spikes in traffic without costly overprovisioning during low activity periods. This is […]
Saved on: 2022-10-03

Good design means it's easy-to-change — Matthias Noback - Blog

Software development seems to be about change: the business changes and we need to reflect those changes, so the requirements or specifications change, frameworks and libraries change, so we have to change our integrations with them, etc. Changing the code base accordingly is often quite painful, because we made it resistant to change in many ways. Code that resists change I find that not every developer notices the “pain level” of a change. As an example, I consider it very painful if I can’t rename a class, or change its namespace. One reason could be that some classes aren’t auto-loaded with Composer, but are still manually loaded with require statements. Another reason could be that the framework expects the class to have a certain name, be in a certain namespace, and so on. This may be something you personally don’t consider painful, since you can avert the pain by simply not considering to rename or move classes.
Saved on: 2022-09-28

Patterns.dev - Modern Web App Design Patterns

Learn JavaScript design and performance patterns for building more powerful web applications.
Saved on: 2022-09-06

Redis Explained

A deep technical dive into all things Redis. Covering various Redis topologies, data persistence and process forking.
Saved on: 2022-08-16

Strategies for decreasing the number of queries in a Laravel app - Freek Va

Oh Dear is all-in-one solution to monitor your site that my buddy Mattias Geniar and I have created. It can monitoring uptime, certificates, broken links, scheduled jobs, and much more. Under the hood, Oh Dear is a large Laravel application that performs many queries all of the time. To power future features, we've recently changed our database structure and refactored some pieces in our code base. We increased performance by decreasing the number of queries. In this blog post, we'd like to to share some techniques that might be helpfull to increase the performance of your Laravel app too.
Saved on: 2022-08-16

How Validus Built a Bloomberg Real-Time Market Data Integration on AWS in a

The increase in market uncertainty over the last couple of years has demonstrated the need for market participants to have a dynamic view of the risks and impacts due to market moves on their portfolios. This post explores how Validus, a leading independent technology-enabled financial services firm, built a Bloomberg real-time market data integration using serverless managed services on AWS.
Saved on: 2022-08-16

SPA Alternative

In this essay, Carson Gross explores alternatives to Single Page Applications (SPAs), advocating for an 'HTML-Centric' development approach. He highlights the drawbacks of SPA complexity and the benefits of embracing HTML as the core medium for web development, offering a simpler, more efficient way to build applications without sacrificing interactivity. Carson discusses how tools like htmx enhance HTML's capabilities and encourages developers to reconsider the dominant SPA paradigm with technical bravery.
Saved on: 2022-07-20

Story Points Revisited

This is RonJeffries.com, the combination of new articles, XProgramming, SameElephant, and perhaps even some new items never before contemplated. Copyright © 1998-forever Ronald E Jeffries
Saved on: 2022-07-10

Spotify’s Failed #SquadGoals

“The Spotify model” got a bunch of companies talking like Taylor Swift about startup culture, but four former Spotify employees reveal the truth: its eponymous way of working failed before it scaled.
Saved on: 2022-07-10

Changing tires at 100mph: A guide to zero downtime migrations | Kiran Rao

As a backend developer at a mobile app company, a common task was migrating a database schema.This could be to improve query performance, change column ...
Saved on: 2022-05-05

abseil / Software Engineering at Google

An open-source collection of core C++ library code
Saved on: 2022-05-02

Top Laracon Conference Presentations

Laracon is an ongoing series of conferences and events about the Laravel software development framework. We use Laravel pretty heavily at Icehouse Ventures because it powers our Investor Portal. I’ve learned a lot over the years from the various Laracon conference recordings. The topics range from basic coding best-practises to advanced systems architecture, database design, … Continue reading Top Laracon Conference Presentations
Saved on: 2022-03-18

How To Build Maintainable PHP Applications

Have you struggled with the system because it was hard to change? Have you wanted to upgrade Framework or PHP version, however it required…
Saved on: 2022-01-02

Why is Excalidraw so fucking good?

The product factors that make it work so so well
Saved on: 2021-11-05

How to design in every language at once | by Canva Engineering | Oct, 2021

The technology that powers Continuous Localization at Canva.
Saved on: 2021-10-22

How Livewire works (a deep dive) | Caleb Porzio

The experience of using Livewire seems magical. It’s as if your front-end HTML can call your PHP code and everything just works. A...
Saved on: 2021-10-13

Running in Production Podcast and Interviews

A site where folks talk about running small and large web apps in production. Topics include tech stacks and DevOps / deployment tips.
Saved on: 2021-09-23

Where do types come from? — Matthias Noback - Blog

In essence, everything is a string. Well, you can always go one layer deeper and find out what a string really is, but for web apps I work on, both input data and output data are strings. The input is an HTTP request, which is a plain-text message that gets passed to the web server, the PHP server, the framework, and finally a user-land controller. The output is an HTTP response, which is also a plain-text message that gets passed to the client. If my app needs the database to load or store some data, that data too is in its initial form a string. It needs to be deserialized into objects to do something and later be serialized into strings so we can store the results.
Saved on: 2021-09-15

Building a serverless email delivery service on AWS | by Joakim Wånggren |

Using AWS Lambda and other AWS services to build a cost efficient, highly available email formatting and delivery service with event tracking. Creating email layouts is hell on earth. Manually…
Saved on: 2021-09-02

Building a serverless GIF generator with AWS Lambda: Part 1 | AWS Compute B

Many video streaming services show GIF animations in the frontend when users fast forward and rewind throughout a video. This helps customers see a preview and makes the user interface more intuitive. Generating these GIF files is a compute-intensive operation that becomes more challenging to scale when there are many videos. Over a typical 2-hour […]
Saved on: 2021-08-31

The 5-hour CDN

You can build a functional CDN on an 8-year-old laptop while you're sitting at a coffee shop. Here's what a CDN you put together in five hours might look like.
Saved on: 2021-08-04

An Elixir Adoption Success Story

How a team that was new to Elixir over-delivered a big project in just three months.
Saved on: 2021-06-30

Making Instagram.com faster: Part 1 | by Glenn Conner | Instagram Engineeri

In recent years, instagram.com has seen a lot of changes — we’ve launched stories, filters, creation tools, notifications, and direct messaging as well as myriad other features and enhancements…
Saved on: 2021-06-07

What it means to run a monolith on AWS Lambda

A stable software development model combined with the elasticity of serverless solutions.
Saved on: 2021-05-31

The data model behind Notion's flexibility

Notion’s data model enables the product’s most foundational component: blocks. Through blocks, we allow users more flexibility over their information.
Saved on: 2021-05-19

Testing your controllers when you have a decoupled core — Matthias Noback -

A lot can happen in 9 years. Back then I was still advocating that you should unit-test your controllers and that setter injection is very helpful when replacing controller dependencies with test doubles. I’ve changed my mind: constructor injection is the right way for any service object, including controllers. And controllers shouldn’t be unit tested, because: Those unit tests tend to be a one-to-one copy of the controller code itself. There is no healthy distance between the test and the implementation. Controllers need some form of integrated testing, because by zooming in on the class-level, you don’t know if the controller will behave well when the application is actually used. Is the routing configuration correct? Can the framework resolve all of the controller’s arguments? Will dependencies be injected properly? And so on. The alternative I mentioned in 2012 is to write functional tests for your controller. But this is not preferable in the end. These tests are slow and fragile, because you end up invoking much more code than just the domain logic.
Saved on: 2021-03-02

A monorepo approach to larger modules in Laravel and Lambda

The mindset of modularized applications applied to monoliths.
Saved on: 2021-03-01

Talk review: Thomas Pierrain at DDD Africa — Matthias Noback - Blog

As a rather unusual pastime for the Saturday night I attended the third Domain-Driven Design Africa online meetup. Thomas Pierrain a.k.a. use case driven spoke about his adaptation of Hexagonal architecture. “It’s not by the book,” as he said, but it solves a lot of the issues he encountered over the years. I’ll try to summarize his approach here, but I recommend watching the full talk as well. Hexagonal architecture Hexagonal architecture makes a distinction between the use cases of an application, and how they are connected to their surrounding infrastructure. Domain logic is represented by pure code (in the FP sense of the word), surrounded by a set of adapters that expose the use cases of the application to actual users and connect the application to databases, messages queues, and so on.
Saved on: 2021-02-23

Live Coding 12-Factor App

Emily Jiang performs live coding of building 12-factor microservices using MicroProfile programming mode and gets them running Open Liberty and Quarkus.
Saved on: 2020-12-20

Ce2

Saved on: 2020-12-09

fabric Resources Hub

Access a wealth of omnichannel retail resources in fabric's library. Find guides, case studies, and white papers to help you optimize your order management and customer experience.
Saved on: 2020-12-09

An alternative way to organize the Laravel directory structure // Stefan Ba

In this article, I would like to show you an alternative way to organize your Laravel directory structure. I think the default structure is fine for the most projects. But when it comes down to larger projects I was looking for a different structure.
Saved on: 2020-12-02

How Go helped save HealthCare.gov featuring Paul Smith, CTO of Ad Hoc (Go Time #154)

Paul Smith (from "Obama's Trauma Team") tells us the tale of how Go played a big role in the rescuing and rebuilding of the HealthCare.gov website. Along the way we learn what the original team did wrong, how the rescue team kept it afloat during huge traffic spikes, and what they've done since to rebuild it to serve t...
Saved on: 2020-11-10

If not SPAs, What?

Trends trends trends!
Saved on: 2020-10-29

Maya Shavin: How I Built My Website

A Cloudinary senior front-end developer recounts how she rebuilt her Jamstack website with Nuxt, Tailwind CSS, Cloudinary, and Vercel.
Saved on: 2020-10-27

ORMless; a Memento-like pattern for object persistence — Matthias Noback -

Something that always bothers me: persistence (the user interface too, but that’s a different topic ;)). Having objects in memory is nice, but when the application shuts down (and for PHP this is after every request-response cycle), you have to persist them somehow. By the way, I think we’ve all forever been annoyed by persistence, since there’s an awful lot of software solutions related to object persistence: different types of databases, different types of ORMs, etc.
Saved on: 2020-10-13

Components, Patterns and Sh*t It’s Hard to Deal With

Marco Cedaro identifies some ideas they tried and discusses the way they approached componentization.
Saved on: 2020-09-14

A simple recipe for framework decoupling — Matthias Noback - Blog

If you want to write applications that are maintainable in the long run, you have to decouple from your framework, ORM, HTTP client, etc. because your application will outlive all of them. Three simple rules To accomplish framework decoupling you only have to follow these simple rules: All services should get all their dependencies and configuration values injected as constructor arguments. When a dependency uses IO, you have to introduce an abstraction for it. Other types of objects shouldn’t have service responsibilities. Contextual information should always be passed as method arguments. Explanations Rule 1 Following rule 1 ensures that you’ll never fetch a service ad hoc, e.g. by using Container::get(UserRepository::class). This is needed for framework decoupling because the global static facility that returns the service for you is by definition framework-specific. The same is true for fetching configuration values (e.g. Config::get('email.default_sender')).
Saved on: 2020-09-12

Violating the Dependency rule — Matthias Noback - Blog

I write about design rules a lot, but I sometimes forget to: Mention that these rules can’t always be applied, Describe when that would be the case, and Add examples of situations where the rule really doesn’t matter. The rules should work in most cases, but sometimes need to be “violated”. Which is too strong a word anyway. When someone points out to me that I violated a rule, I’m like: Wow! I violated the rule? I’m so sorry! Let’s fix this immediately. Whereas in practice it should be more like: Yeah, I know that rule, but it makes more sense to follow that other rule here, because […]. In other words, pointing out that a certain rule has been violated should not be a sufficient reason to adhere to that rule. My favorite example is “But that violates SRP!” (Single Responsibility Principle). Whoops, I wouldn’t want to do that! Or would I?
Saved on: 2020-09-08

A decoupled PHP architecture inspired by the Clean Architecture | by Joe Sa

This article would not be possible without the help of Rodrigo Jardim da Fonseca, Edison Junior, and Lemuel Roberto. Disclaimer: I feel like I should address that the architecture I’m about to…
Saved on: 2020-09-04

Legacy to Laravel: How to Modernize an Aging PHP Application | Tighten

Many of our clients have legacy PHP apps and want to move to Laravel. We’re often asked "should we rewrite or refactor?" While full rewrites are appealing, they’re also risky. Here’s our approach to gradually refactoring legacy code that lets you start using Laravel right away.
Saved on: 2020-09-02

Blog @ Codonomics: Multi-tenant Architectures

Multi-tenancy Application Deployment Architecture could be modeled in 4 broad ways: Separate Apps & Separate Databases Sha...
Saved on: 2020-08-31

Design Docs at Google

One of the key elements of Google's software engineering culture is the use of design docs for defining software designs. These are...
Saved on: 2020-07-23

Building Cloudflare TV from scratch

Cloudflare TV is a 24x7 TV channel taking you behind-the-scenes and let’s you hear directly from the builders working on your favorite Cloudflare products.
Saved on: 2020-07-08

Clean architecture, building software that lasts - Coders Opinion

When building software we sometimes need to build it in a way so it will last for years. Some projects I’ve worked on used software that was running for almost 10 years. Within these 10 years, the software had experienced many changes. For example language changes, framework changes, libraries that need to be replaced, and many more. When this is the case, software needs to be built in a way to account for those many changes with little impact.
Saved on: 2020-07-03

Embedded Rules of Thumb

26 April 2018 by Phillip Johnston • Last updated 10 June 2021You may call them guidelines, heuristics, or rules of thumb. No matter, the purpose is the same: to provide a reasonable approximation of the truth. These rules of thumb can help guide your understanding of the systems you work on, focus you toward the … Continue reading "Embedded Rules of Thumb"
Saved on: 2020-06-01
❤️
</>
2026