Codemotion Milan 2025 - Day 1

Published October 20th, 2025

Codemotion Milan

In this post, and the next, I'd like to take you with me through the two days I spent at the Codemotion Milan conference. I will go over each talk I attended, highlighting what to me were its most salient points, and occasionally adding my own opinions in the mix.

I'll give you a glimpse of the current state of software development, without you needing to attend a two day conference or sit through any talks. There's A LOT of knowledge to unpack here so if that sounds good to you, grab a coffee, sit back, relax, and enjoy the post!

Codemotion Opening

Let me begin by saying that this was my fourth Codemotion conference in Milan, and it was in my opinion the best one so far - mainly because of the quantity and quality of interesting talks.

The opening of the conference, given by Codemotion CEO Chiara Russo, centered on AI's disruption in the software development world. For example, quoting Nvidia CEO Jensen Huang in June 2025 at the London Tech Week event saying:

Now, all of a sudden… There's a new programming language. This new programming language is called 'human.'

My understanding is that this refers to the rise of prompt engineering and the implied decline of needing to write code. I just want to mention that there have already been technologies trying to achieve this such as the low-code and no-code movement, on top of the attempts at creating a programming language similar to English prose. Each of them have their niche, but none of them replaced traditional programming.
I also think the current state of writing code for a machine that is readable to other humans is a good compromise. I don't think you'd really want programming to be similar to interacting with another human. Have you ever met a software engineer? We don't have the best people skills.

Huang actually does not believe AI will replace developers, but that it will create a divide between those who use AI and those who don't. And I agree with that sentiment. Personally, I currently don't use AI to generate code, but I've found it useful in other cases where I'm not delegating any critical thinking, such as using it as a rubber duck or giving it a link to a page of documentation and asking it to quiz me on it.

Going back to what was said in the opening, towards the end Russo mentioned that the AI revolution is moving four times faster than the internet revolution. In terms of adoption, AI is indeed being adopted quickly by almost everyone, I think in large part thanks to the previous internet revolution.

We'll circle back to the topic of AI but its disruption and massive adoption can't be questioned.

Science without borders, technology with responsibility

The keynote by Enrica Porcari switched gears completely, and gave an overview of CERN: what it is and what it does.

I jotted down three notes during this talk:

  1. What if CERN had locked the tech for the world wide web? That sounds like a good beginning for a science fiction novel.
  2. When particles crash together in the large hadron collider (LHC), cameras take 1 billion pictures per second… That amount of data processing just made me think “wow” and recontextualized the amounts of data I work with every day.
  3. The LHC occasionally shuts down for maintenance and when it does you can go down inside it. CERN is also free and completely open to the public, a great vacation idea.

Overall the focus of the talk was centered on the openness and transparency of CERN, something we need more of in our industry.

With the opening and keynote done, attendees were free to attend whichever talk they picked from the schedule. It was time for my first talk of the day!

Let's build an accessible front… component

The first talk I attended focused on accessibility (a11y). Here's what I took away from Davide Di Pumpo's talk:

  • CSS and a11y have things in common. If you think about it, this makes sense because the visual style of a page can make it more or less accessible.
  • The HTML lang attribute can tell a screen reader what language to read in.
  • Inclusivity does not mean accessibility. For example performance is inclusive, but is not an accessibility concern. The same can be said for language.
  • WCAG compliance is not the goal, it's the baseline.
  • WCAG defines four core principles: perceivable, operable, understandable, and robust (POUR).
  • AI is not good at understanding what information is new vs old. It can give wrong results when looking for accessibility related answers.
  • There is such a thing as an accessibility tree, and an object in that tree is made up of four properties: role, name, description, and state.
  • The ARIA: landmark role helps define important sections of a page a user might want to navigate to as well as the purpose of the content in question. Semantic HTML elements map to landmark roles, for example <aside> has the role “complementary”.
  • Ask yourself what happens when you turn off JavaScript on your page. Does everything break? Or is JS just a tool to provide progressive enhancement?

Baseline Rhapsody: A tale of Style & Motion

The second talk I attended by Emiliano Pisu focused on CSS, listing CSS APIs whose browser support is defined in the Baseline web platform. Feature availability can be in one of three stages: Widely, Newly, or Limited available.

Baseline decision framework

Here are some cool features I noted:

  • The CSS @supports rule lets you define styles that depend on the browser's support for a certain CSS feature.
  • Reflow describes when a browser recalculates the position and geometry of certain parts of a webpage.
  • Emiliano referred to grid layout as the holy grail, citing the grid template property as especially useful.
  • Use the hsl() or oklch() color functions.
  • Use clamp() for fluid typography, see Modern Fluid Typography Using CSS Clamp
  • Trigonometric functions in CSS are newly available.
  • Something that also came up in other talks: the View Transitions API.
  • You can use the animation-timeline to define what controls the progress of a CSS animation, so for example, the scroll of a page!
  • Emiliano noted that with all these new APIs, it's increasingly becoming clear that CSS is becoming a programming language, see Using CSS custom functions.
  • Regarding the last point, whether you agree that CSS is a programming language or not, treating it like it is one is a good idea anyway: through documentation, organization, and all other considerations you make with other programming languages.

Chrome DevTools - are you confident in your expertise?

At the end of Luca Del Puppo's talk I heard people saying “DevTools is amazing”, and I shared the same sentiment. Like many developers, I use DevTools in pretty basic ways. However, Luca mentioned a lot of interesting features, here are some of my favorites:

  • The Coverage panel, which shows unused code per resource.
  • The "Paint flashing" flag, which highlights areas of the page that need to be repainted.
  • If you right click on a DOM node and then click “Capture node screenshot”, you can download a screenshot of exactly the element you selected (useful for interacting with designers). Luca mentioned this is especially useful for taking a screenshot of the whole page even if part of it is not visible due to its length (when you need to scroll to see the rest).
  • This one really blew my mind: in the Workspace panel you can link local folders to Chrome and edit them directly from DevTools!
  • You can leverage the existing AI integration in DevTools.

To learn more, Luca mentioned these two resources as the only two you'll need:

Model Context Protocol: Principles and Practice

I'm new to the Model Context Protocol, so I attended Fabio Lipreri and Gabriele Orlandi's talk to get a better grasp of what MCP actually is. I didn't become an expert in the short duration of the talk, but I know much more than I did before, which is good enough for me. I'll do my best to summarize what I learned.

Let's start with a question: what do we want to do with LLMs? The answer: access proprietary knowledge and perform actions. MCP is a way to facilitate performing actions.

You might have heard of RAG (Retrieval-Augmented Generation), it used to be a trendic topic but Fabio and Gabriele showed how it doesn't scale well when trying to integrate with multiple services.

In comes MCP - an open protocol that standardises how applications provide context to LLMs. Like a USB-C port for AI applications. Fabio and Gabriele compared MCP to the Language Server Protocol (LSP), which defines a single protocol that lets any language connect with any text editor, without having to redefine how to handle hover, formatting, rename…

Here's a handy diagram that helps visualize a remote MCP configuration:

Remote MCP Configuration

Anthropic defines three primitives that make up an MCP configuration: tools (functions invoked by the model), resources (data exposed to the application), and prompts (pre-defined templates for AI interactions). The MCP Client and MCP Server interact with each other by handling these primitives differently. The Server exposes the primitives, and the Client acts on them.

MCP Server Features

Here's an example GitHub MCP Server interaction:

GitHub MCP Server Example

As a final note, I thought it was interesting how Fabio and Gabriele ended the talk by mentioning that MCP shifts the control of tools to those that create the resources, as the creators are the best ones to tell an LLM how to use their tool or API.

Overall I also liked how the talk was rooted in realism, it was explicitly said to set realistic expectations because adopting MCP may not be a silver bullet for our agentic applications, we'll probably still need custom code and prompts.

Supercharge Web UX with View Transitions!

For my final talk of the day, Bramus Van Damme revisited a topic mentioned earlier, going deep into View Transitions.

As their name implies, view transitions create transitions between two views of your website.

There are two main steps to implementing view transitions:

  1. Identify and name elements to transition
  2. Trigger the view transition

Optionally, you can customize the animations.

You can have transitions between two pages, they even work with forms.

But how do view transitions work under the hook? Well, the browser takes snapshots and then cross fades from one snapshot to the other.

For good documentation on SPA view transitions, see Same-document view transitions for single-page applications.

It used to be that view transitions worked only for SPAs, meaning you had to rearchitect your website if you wanted to user them across pages. However, that is no longer the case. Although, to use view transitions in multi-page applications (MPAs) you need to respect two conditions:

  1. You must opt-in with the CSS rule.
@view-transition {
  navigation: auto;
}
  1. Only same origin navigation is supported (scheme + hostname + port).

An interesting point Bramus made was that to support MPAs they needed to create new document page load events, namely: pagereveal and pageswap.

For good documentation on MPA view transitions, see Cross-document view transitions for multi-page applications.

A couple of extra points:

  • The <ViewTransition> component is currently available in React Canary.
  • Chrome DevTools has a view animations debugger.

Conclusion

And that wraps up Day 1 at Codemotion Milan. Apart from AI, there were lots of interesting deep dives in accessibility, powerful CSS features, and Chrome DevTools capabilities. Stay tuned for my write-up of Day 2, coming to a browser near you!