MONIMEGA
  • Blog
    • Politics
    • Software
    • Technology
    • Business
    • Design
    • Hardware
    • Health
    • Italy
    • Music
    • Sports
    • Strategy
    • World
  • Contatto
  • Galleria
  • Informazioni
  • Servizi
  • POV: You got the aux and you’re looking for house music | NYX in the MYX 002

    POV: You got the aux and you’re looking for house music | NYX in the MYX 002

    July 2, 2025
    Music

    If you find yourself with the AUX but no track to play, this mix is for you. Subscribe and enable alerts (🔔) for a new track upload daily! Spotify playlist ▶︎ https://spoti.fi/2XkCG4O 🫵 DJ & producer recommendations: »» 20% discount on all sample packs (use code NYX20) ➡ https://techhousemarket.com »» 20% discount on all vocal packs (use code NYX20) ➡ https://vocalfy.com »» Support the artist and buy records ➡ https://beatport.com/?a_aid=67bedae00dabb »» Fresh new tech house samples & loops ➡ https://loopcloud.com/?a_aid=67bedae00dabb Connect with NYX: »» https://instagram.com/themythofnyx »» https://soundcloud.com/themythofnyx »» https://twitter.com/themythofnyx »» https://facebook.com/themythofnyx Tags: #techhouse #techhousemix #partymusicmix #nyxinthemix


    Source: YouTube.

  • Recensione The Legend of Zelda: Tears of the Kingdom Nintendo Switch 2 Edition

    Recensione The Legend of Zelda: Tears of the Kingdom Nintendo Switch 2 Edition

    July 2, 2025
    Hardware

    The Legend of Zelda: Breath of the Wild è da molti considerato un capolavoro senza tempo, e non sorprende che le aspettative nei confronti del suo seguito, The Legend of Zelda: Tears of the Kingdom, fossero elevatissime. Eppure, non tutti sono riusciti a entrare in sintonia con il titolo al momento del lancio nel 2023.

    Pur apprezzando le sue idee brillanti, come l’enorme libertà lasciata ai giocatori e un motore fisico all’avanguardia, l’esperienza tecnica non era all’altezza. A differenza dell’impatto innovativo avuto nel 2017 da Breath of the Wild, che arrivava con un hardware ibrido rivoluzionario, Tears of the Kingdom si presentava con un frame rate fermo a 30fps e una risoluzione bassa, caratteristiche difficili da ignorare per chi era abituato a standard grafici superiori su altre piattaforme. In più, mancava quell’effetto meraviglia che aveva reso unico il predecessore.

    Con l’arrivo del 2025 e del lancio di Nintendo Switch 2, tutto cambia. The Legend of Zelda: Tears of the Kingdom Switch 2 Edition porta con sé un netto miglioramento prestazionale che ridefinisce l’intera esperienza. Il gioco acquista nuova vita, trasformandosi in una pietra miliare del genere open world e riconquistando l’entusiasmo anche dei più scettici.

    Grazie all’upgrade tecnico, Tears of the Kingdom si colloca tra le migliori uscite del decennio e si impone come uno dei titoli più impressionanti dell’ecosistema Nintendo Switch 2. Una rinascita vera e propria per uno dei giochi più ambiziosi mai realizzati.

    Tears of the Kingdom Legend of Zelda Nintendo Switch 2

    (Image credit: Nintendo)

    The Legend of Zelda: Tears of the Kingdom è stato accolto con entusiasmo fin dal lancio, entrando di diritto tra i migliori seguiti mai realizzati. Tutto è già stato detto sul suo gameplay e sulla sua narrativa, quindi vale la pena soffermarsi su ciò che la nuova edizione per Nintendo Switch 2 porta realmente nel mondo di Hyrule.

    Quando il gioco arrivò nel 2023 su Nintendo Switch, l’impatto iniziale fu contrastante. Pur trattandosi di un risultato tecnico notevole su una console portatile, l’impressione generale era quella di trovarsi davanti a qualcosa di già visto. Nonostante la qualità complessiva, l’esperienza sembrava frenata, e il coinvolgimento emotivo faticava a emergere.

    Per chi è cresciuto con la saga, questa mancanza di magia fu un duro colpo. Ma oggi, grazie al salto generazionale dell’hardware, la versione Nintendo Switch 2 ha restituito al gioco lo splendore che meritava fin dall’inizio. L’aggiornamento ha completamente trasformato l’aspetto e le sensazioni di gioco.

    The Legend of Zelda: Tears of the Kingdom Switch 2 Edition è disponibile come aggiornamento a pagamento per chi possiede già il titolo, oppure gratuitamente per gli abbonati a Nintendo Switch Online + Expansion Pass, o ancora come versione completa per la nuova console.

    Non ci sono contenuti inediti, ma l’esperienza viene rivoluzionata da un frame rate stabile a 60fps, una risoluzione nettissima e il supporto all’HDR, che dona una nuova vita ai paesaggi di Hyrule. La differenza visiva rispetto alla versione originale è impressionante e rende questa edizione un must per chi desidera vivere il gioco al massimo delle sue potenzialità.

    Tears of the Kingdom Legend of Zelda Nintendo Switch 2

    (Image credit: Future)

    Le principali criticità emerse al lancio di The Legend of Zelda: Tears of the Kingdom riguardavano la sensazione che l’immensità di Hyrule fosse limitata da vincoli tecnici. Oggi, con l’edizione per Nintendo Switch 2, il gioco offre finalmente la versione definitiva di un’esperienza straordinaria.

    Questa nuova edizione può essere paragonata a mettere gli occhiali per la prima volta: la nitidezza delle immagini e la fluidità generale permettono di vivere l’avventura come molti avevano solo immaginato da bambini, richiamando le emozioni provate esplorando Hyrule in Ocarina of Time o Twilight Princess.

    Durante un’esplorazione approfondita, che può facilmente superare le 70 ore, non emergono rallentamenti né cali di prestazioni, e in numerosi momenti è inevitabile fermarsi a osservare il cielo in HDR e i colori vividi dell’orizzonte, con effetti visivi che raggiungono livelli mai visti prima nella serie.

    The definitive way to experience Hyrule

    Tears of the Kingdom Legend of Zelda Nintendo Switch 2

    (Image credit: Nintendo)

    Chi non è riuscito a entrare in sintonia con la versione originale del gioco, a causa delle limitazioni hardware della prima Nintendo Switch, troverà nell’edizione per Nintendo Switch 2 un’esperienza completamente rinnovata, al punto da giustificare l’acquisto della console stessa.

    Sebbene non si tratti di un nuovo capitolo, l’aggiornamento tecnico applicato a entrambi i titoli della serie garantisce standard qualitativi in linea con il 2025, rendendoli imprescindibili anche per chi ha già esplorato Hyrule in passato.

    Grazie al supporto di una TV OLED in 1440p upscalato a 4K, l’esplorazione di Hyrule raggiunge un nuovo livello visivo. Inoltre, la modalità portatile della Switch 2 offre un gameplay in 1080p con HDR attivo, mantenendo prestazioni fluide anche in movimento, senza alcun compromesso sull’esperienza complessiva.

    Best bit

    Tears of the Kingdom Legend of Zelda Nintendo Switch 2

    (Image credit: Nintendo)

    Con la versione per Nintendo Switch 2, esplorare il mondo di Hyrule trasmette una sensazione di libertà autentica. Grazie a una risoluzione nitida e un framerate stabile, ogni momento dedicato all’avventura risulta più fluido e immersivo che mai.

    Otto anni fa, poter continuare la propria avventura durante il tragitto verso il lavoro, al parco o in vacanza fu una delle esperienze videoludiche più emozionanti mai vissute. Oggi, con la potenza della Nintendo Switch 2, quell’esperienza raggiunge un nuovo livello, tanto che l’unico desiderio è finire di scrivere per tornare a esplorare Hyrule.

    È vero, The Legend of Zelda: Tears of the Kingdom – Switch 2 Edition non introduce contenuti inediti, e alcuni fan potrebbero storcere il naso. Ma il gioco è già così ricco e vasto che non si sente la mancanza di altro: si è felici di poter rivivere uno dei migliori titoli di sempre in condizioni finalmente ottimali.

    Anche senza novità sostanziali, la possibilità di avere un secondo salvataggio (grazie Nintendo!) e l’utilizzo dell’app companion Zelda Notes offrono un valore aggiunto da non sottovalutare.

    La ciliegina sulla torta

    Zelda Notes, esclusiva della Switch 2 Edition di Tears of the Kingdom, è un’estensione sorprendente dell’esperienza di gioco, integrata nell’app Nintendo Switch per iOS e Android. È praticamente un’app dentro l’app, che aggiunge un nuovo livello di immersione alla vostra avventura.

    Grazie a Zelda Notes, è possibile navigare la mappa in tempo reale sul proprio smartphone o tablet e sbloccare decine di Voice Memories, clip audio che arricchiscono il mondo di Hyrule di storie e misteri. Anche se sarebbe stato ideale trovarle direttamente nel gioco, queste memorie vocali danno una spinta in più alla voglia di esplorare ogni angolo del mondo.

    L’app permette inoltre di consultare tutti i dati del proprio salvataggio, funzione che colma una delle lacune più sentite da chi gioca su Switch, e offre strumenti per condividere oggetti e progetti di costruzione per l’Autobuild tramite QR code.

    Ma la chicca più coinvolgente è senza dubbio il Daily Bonus, una ruota della fortuna quotidiana che regala pasti energetici o potenziamenti utili per affrontare le profondità più oscure o le vette più alte di Hyrule. È proprio questo bonus giornaliero ad aver spinto molti a giocare con maggiore costanza, mantenendo viva la magia dell’avventura giorno dopo giorno.

    Perché acquistare The Legend of Zelda: Tears of the Kingdom Nintendo Switch 2 Edition?

    Ragioni per acquistare

    La versione definitiva di Tears of the Kingdom

    Se non avete mai giocato a Tears of the Kingdom, se all’epoca non vi aveva convinto a causa delle prestazioni limitate o se semplicemente volete rivivere l’esperienza in una veste rinnovata, la Nintendo Switch 2 Edition rappresenta il modo migliore per farlo. Questa edizione aggiornata valorizza ogni aspetto dell’avventura, offrendo la versione definitiva di uno dei migliori videogiochi di tutti i tempi.

    State cercando un motivo per acquistare Nintendo Switch 2

    Sì, Mario Kart World è fantastico, ma col tempo diventa più un gioco da party che un vero motivo per accendere la console dopo una lunga giornata. Se siete alla ricerca di un motivo concreto per acquistare Nintendo Switch 2, questa versione aggiornata di uno dei giochi migliori di sempre potrebbe essere l’occasione perfetta. Non lo diciamo alla leggera: Tears of the Kingdom a 60fps stabili è un vero system seller.

    Ragioni per NON comprare

    Non vi è piaciuto il gioco la prima volta

    Anche se questa nuova versione di Tears of the Kingdom ha completamente cambiato l’esperienza per molti giocatori, non può fare miracoli. Se in passato non avete apprezzato Breath of the Wild o Tears of the Kingdom perché non vi piace il genere open-world adventure, questa edizione non vi farà cambiare idea. I miglioramenti tecnici non modificano la natura stessa del gioco.

    Accessibilità

    La Nintendo Switch 2 Edition di The Legend of Zelda: Tears of the Kingdom non introduce significativi aggiornamenti in termini di accessibilità. È ancora possibile usare il mirino giroscopico e rimappare i comandi dal menu della console, ma i prompt a schermo non si adatteranno di conseguenza. Non è possibile aumentare la dimensione del testo, disattivare il motion blur, o regolare altre impostazioni utili. Non esiste nemmeno una modalità di difficoltà, quindi se il sistema di armi che si rompono o la libertà dell’open world vi hanno messo in difficoltà in passato, non ci saranno opzioni per facilitarvi le cose.


    Source: Latest from TechRadar IT-IT in Reviews.

  • Why Organizations Need Expert Generalists

    July 2, 2025
    Software

    The Characteristics of an Expert Generalist

    Writing a sophisticated computer program often requires a lot of detailed
    knowledge. If we do this in Java, we need to know the syntax of the
    language, the wide range of libraries available to assist us in the work,
    the various tools required to verify and build our programs. If we do this
    in Python instead, we are faced with a different syntax, libraries that are named
    and work differently, a whole other ecosystem to build and run our work.

    Faced with these details, a natural response is to recruit people who
    are knowledgeable about a specific ecosystem. Thus we see job descriptions that say “at
    least three years of Java”, or even deeper requirements for subsets of that
    community, with experience in specific tools. What use is a skilled
    Python programmer to such a team?

    We’ve always felt that such desires are wrong-headed. The characteristics
    that we’ve observed separating effective software developers from the chaff
    aren’t things that depend on the specifics of tooling. We rather appreciate
    such things as: the knowledge of core concepts and patterns of programming, a
    knack for decomposing complex work-items into small, testable pieces, and the
    ability to collaborate with both other programmers and those who will
    benefit from the software.

    Throw such a Python programmer into a Java team, and we’d expect them to
    prosper. Sure they would ask a lot of questions about the new language and
    libraries, we’d hear a lot of “how do you do this here?” But such questions
    are quickly answered, and the impediments of Java-ignorance soon wither
    away.

    An experienced Pythonista who understands
    the core patterns and practices of software development can be a productive
    member of a team building software in Java. Knowing how to handle
    snakes can be surprisingly handy.

    This echoes a long debate about the relative value of specialists and
    generalists. Specialists are seen as people with a deep skill in a specific
    subject, while generalists have broad but shallow skills. A dissatisfaction
    with that dichotomy led to the idea of “T-shaped people”: folks that combine
    deep knowledge in one topic, with a broad but shallow knowledge of many
    other topics. We’ve seen many such people quickly grow other deep legs,
    which doesn’t do much for the “T-shape” name (as we’ll discuss below), but otherwise leads to
    success. Often experience of a different environment leads to trying things
    that seem innovative in a new home. Folks that only work in a single
    technological neighborhood are at the constant risk of locking themselves
    into a knowledge silo, unaware of many tools that could help them in their
    work.

    This ability goes beyond just developer skills. We’ve seen our best
    business analysts gain deep skills in a couple of domains, but use their
    generalist skills to rapidly understand and contribute in new domains.
    Developers and User Experience folks often step outside “their lanes” to
    contribute widely in getting work done. We’ve seen this capability be an
    essential quality in our best colleagues, to the degree that its importance
    is something we’ve taken for granted.

    But increasingly we see the software industry push for
    increasing, narrower specialization.

    So over the last year or so we have started to resist this industry-wide
    push for narrow skills, by calling out this quality, which we call an
    Expert Generalist. Why did we use the word “expert”?
    There are two sides to real expertise. The first is the familiar depth: a detailed command
    of one domain’s inner workings. The second, crucial in our fast-moving field
    is the ability to learn quickly, spot the
    fundamentals that run beneath shifting tools and trends, and apply them wherever we land.
    As an example from software teams, developers who roam across languages, architectures, and problem spaces may seem like
    “jack-of-all-trades, master-of-none,” yet repeated dives below surface differences help them
    develop durable, principle-level mastery. Over time these generalists can dissect unfamiliar
    challenges, spot first-principles patterns, and make confident design decisions with the
    assurance of a specialist – and faster. Being such a generalist is itself a
    sophisticated expertise.

    We’ve long noticed that not just anyone succeeds as an Expert Generalist,
    but once we understand the traits that are key for such Expert Generalists,
    organizations can shape learning programs, hiring filters, and career paths
    that deliberately develop them. Indeed our hiring and career progression at
    Thoughtworks has been cultivating this skill for over two decades, but doing
    so informally. We think the industry needs to change gears, and treat Expert
    Generalist as a first-class skill in its own right: something we name,
    assess, and train for. (But beware, we find many Expert Generalists,
    including at least one author of this article, cringe at the word “expert”.)

    When we’ve observed Expert Generalists, there are certain attributes
    that stand out.

    Curiosity

    Expert Generalists display a lot of curiosity. When confronted with a new
    technology or domain, their default reaction is to want to discover more about it, to see
    how it can be used effectively. They are quite happy to spend time just exploring the new
    topic area, building up some familiarity before using it in action. For most, learning new
    topics is a pleasure in itself, whether or not it’s immediately
    applicable to their work.

    This characteristic is noticeable when Expert Generalists get an answer
    to a question. Rather than just typing in some code from Stack Overflow,
    an Expert Generalist’s curiosity usually motivates them to ensure they
    understand the answer, taking the opportunity to expand their knowledge,
    and check that the answer they got is appropriate. It’s also present when
    asking a question. There is an art to asking questions that elicit deeper
    answers without leading the witness.

    Collaborativeness

    Learning about a new topic area may require reading, watching videos, and prototyping. But
    we see the greatest aid here is another vital characteristic: collaborativeness.
    A wise Expert Generalist knows that they can never really learn about most of the things
    they run into. Their T-shape will grow several legs, but never enough to span all the
    things they need to know, let alone want to know. Working with people who do have those
    deeper skills is essential to being effective in new domains.

    Working with an otherly-skilled worker allows the generalist to
    contribute while the skilled collaborator spots more effective paths that
    only a specialist would know. The generalist appreciates these
    corrections, learning from them. Learning involves both knowing more about
    the new domain, but also learning to differentiate between areas where the
    generalist can do primary contributions and areas where the generalist
    needs help from the specialist. We notice Expert Generalists are never
    afraid to ask for help, they know there is much they are ignorant of, and
    are eager to involve those who can navigate through those areas.

    An effective combination of collaborative curiosity requires
    humility. Often when encountering new domains we see things that don’t
    seem to make sense. Effective generalists react to that by first
    understanding why this odd behavior is the way it is, because there’s
    usually a reason, indeed a good reason considering its context. Sometimes,
    that reason is no longer valid, or was missing an important consideration
    in the first place. In that situation a newcomer can add considerable
    value by questioning the orthodoxy. But at other times the reason was, and
    is still valid – at least to some extent. Humility encourages the Expert
    Generalist to not leap into challenging things until they are sure they
    understand the full context.

    This humility extends to recognizing the different trade-offs we see
    across architectures. An architecture designed to support large volumes
    of simple transactions will differ from one designed to handle a few
    complex interactions. Expert Generalists are comfortable in a world where different
    trade-offs make sense in different circumstances, usually because their
    travels have exposed them to these differences.

    Customer Focus

    This curiosity and eagerness to collaborate with people with different skills does raise a
    danger. Someone driven by curiosity can chase every shiny object. This is where the
    characteristic of customer-focus comes into play. We are often impressed with
    how an Expert Generalist takes each unfamiliar technology and questions how it helps the
    customer. We are fans of Kathy Sierra’s notion that our purpose as software developers is to help our
    customers become “badass”
    at what they do.

    Customer-focus is the necessary lens to focus curiosity. Expert
    generalists prioritize their attention on the things that will help them
    help their users to excel. This encourages learning about what their
    customers do, and how they can improve their work. It focuses attention on
    technologies that contribute to building those things. Customer-focus
    energizes collaboration, encouraging the exchange of information between
    customer and technologist, and allowing the Expert Generalist to
    coordinate other technologists towards enabling the customers’
    excellence.

    Favor Fundamental Knowledge

    Software development is a vast field, where nobody can know everything, or even a
    reasonable fraction of everything, so we all need to prioritize what topics we learn. Expert
    Generalists favor fundamental
    knowledge, that doesn’t become outdated with changes when platforms update. These are
    often expressed as patterns or principles. Such knowledge tends to age slowly, and is
    applicable when folks move into new environments. For example the basic moves of refactoring
    are the same whatever language you are programming, the core patterns of distributed systems
    reappear regularly (and it’s no coincidence that’s why we wrote books on those topics – we
    like book sales that last for many years).

    Blend of Generalist and Specialist Skills

    Thus generalists often have deep knowledge of fundamentals, and we usually see them have
    deep knowledge of a few other topics too. They combine a broad general skill with several
    areas of deeper knowledge, usually acquired as it’s necessary for products they’ve worked
    on, coupled with the curiosity to dig into things that puzzle most people. These deeper
    areas may not be relevant to every engagement they work on, but is a signal for their acumen
    and curiosity. We’ve learned to be suspicious of people who present as a generalist yet
    don’t have a few deep specialties.

    We mentioned before that a common name for this skills profile is that
    of the “T-shaped” person, implying a blend of specialist and generalist
    skills. While the T-shape moniker did catch on, it comes with a
    major problem in the metaphor, we don’t find such folks have only a
    single deeper skill. They usually have a few, of varying depth. We’re not
    the only people to identify this problem, and there have been several
    other names proposed to describe this skill-set, although the alternatives
    all have their own problems. 1

    1:
    Kent Beck came up with the metaphor of “paint drip people”, although a problem
    with this metaphor is that paint-drips aren’t usually something we
    desire. “π-shape” at least admits two deeper skills, but again implies an
    arbitrary limit that doesn’t work in practice. “Comb-shaped” implies
    many deeper skills, which is good, but it also implies they are all the
    same depth, which isn’t true.

    The vertical stroke of a skill set represents broader, long-lasting
    domains, not specific tools or frameworks. An expert generalist therefore pursues depth
    in distributed-data systems—partitioning and replication strategies, fault-tolerance
    mechanisms, consistency models, and consensus algorithms—instead of mastering only
    Databricks notebooks. In the cloud, they focus on cloud-native architecture: auto-scaling
    heuristics, multi-region fail-over etc rather than
    focusing on AWS-specific configuration syntax. On the front end, they study browser-based
    UI architecture—rendering pipelines, state-reconciliation patterns, and accessibility
    primitives—instead of the latest React APIs.

    Sympathy for Related Domains

    Expert generalists often find themselves in unfamiliar territory—be
    it a new software stack, a new domain, or a new role. Rather than chasing
    exhaustive detail from day one, they cultivate a rough, perceptive sense of
    what works in the new environment. That helps them make choices that
    go with the grain—even when it differs from their previous experience.

    Jackie Stewart, a triple Formula 1 world champion (1969-93),
    described how, while he wasn’t an engineer of the cars he drove, he
    still needed a sense of how they
    worked
    , how they responded to what the driver was trying to do, a
    sense he called mechanical sympathy.
    Martin Thompson brought this
    concept into software
    , by talking about how a similar knowledge
    of how computer hardware works is vital to writing high-performance
    software.

    We think that the notion of mechanical sympathy has a broader
    sense in software, in that we do need to cultivate such a
    sympathy for any adjacent domain to the ones we are working on. When
    working on a database design, we need such a sympathy for the
    user-interface so we can construct a design that will work smoothly with
    the user-experience. A user-experience designer needs such a sympathy
    with software constraints so when choosing between similarly valuable
    user flows, they take into account how hard it is to build them.

    This also shows itself with new teams. When joining a new team, expert
    generalists tend to listen to the established ways that a team works,
    introducing different approaches thoughtfully. Even when coming in as
    leaders, they don’t default to tearing up existing workflows in favor of
    those more familiar to them. Their curiosity extends to understanding why
    different people work in different ways, trying out unfamiliar working
    styles, then incorporating their experience to develop practices to
    improve from the current state.

    Assessing Expert Generalists

    We have two crucial checkpoints for spotting —and then nurturing
    —expert generalists: the hiring interview and ongoing career
    progression.

    Hiring

    Traditional interview loops still revolve around product
    trivia—“Explain Spark’s shuffle stages,” “How does Databricks Delta
    time-travel work?” A candidate who has never touched those tools can
    still be exactly the kind of person we need: someone who quickly
    grasps unfamiliar concepts, breaks complex systems into manageable
    parts, and collaborates across functions. Focusing on a single stack
    or cloud provider risks filtering out such talent.

    To surface that potential, widen the conversation beyond tool
    recall. Ask candidates to talk through past experiences:

    • How did they approach a particularly challenging situation?
    • When have they ventured into an unfamiliar domain, and how did
      they get up to speed?
    • How do they collaborate with people inside and outside their own organisation or
      discipline?

    These stories reveal learning velocity, systems thinking,
    and people skills—the raw material of an expert generalist.

    Example · Process-control engineer We once met an engineer
    whose entire résumé was industrial PLC work—no general-purpose
    language, no web, no cloud. Yet his record of diagnosing
    control-system failures and the questions he asked during the
    interview showed exceptional learning agility. Hired for those
    qualities, he grew into a respected technical leader and later a
    product owner. Rejecting him for not knowing “our” tools would have
    been a costly miss.

    Career progression

    Inside the organisation, narrow verticals can freeze growth: UI
    developers, QAs, data engineers, or cloud experts seldom step
    outside their lanes. The growth paths map one-to-one with vertical
    silos: UI Engineer → Senior UI Engineer → UI Architect, or Data
    Engineer → Senior Data Engineer → Principal Databricks Guru. The
    unintended message is, “wander outside your lane and your progress
    stalls.

    We have found that encouraging people to experiment—letting them
    make mistakes and learn in adjacent disciplines—yields remarkable
    benefits. A business analyst writing code out of curiosity, a
    front-end engineer dabbling in DevOps, a data engineer trying
    product analysis: each cross-pollination broadens both the
    individual and the team.

    Example · Medical-domain analyst A non-technical professional
    from healthcare joined us as a business analyst. His passion for
    tech pulled him into code reviews and pairing sessions. Over time he
    became an outstanding tech lead and a broader strategic thinker than
    many traditional “pure” engineers.

    Both stories underscore the same lesson: if we base assessment and
    advancement solely on a checklist of tools, we forfeit the chance to
    work with brilliant, adaptable people—and we hamper the organisation’s
    ability to innovate.

    Growing Expert Generalists

    From Tools to Fundamentals

    IT trends get triggered by pivotal inventions that enable new business
    opportunities. Product providers and tool vendors quickly build products,
    and the industry focus often shifts to expertise in tools and frameworks
    rather than the underlying technical trends. For example, in the 1990s,
    when graphical-user-interface two-tier architectures were popular, the
    essential skill was mastering Object-Oriented Programming — its iterative,
    collaborative design — yet most attention centred on tools like Rational
    Rose, the C++ programming language, and frameworks such as Microsoft
    Foundation Classes. When the Web arrived, understanding Web architecture
    and global-scale caching was crucial, but early hype gravitated toward
    technologies like J2EE. In today’s cloud era, with complex microservice
    based architectures, big-data technologies, and expansive DevOps
    toolchains, the foundational discipline of distributed systems is often
    overlooked while certifications in specific tools dominate.

    One of the biggest problems with excessive focus on tools and framework
    expertise is when it is cemented into organizational structures. Teams and
    organisations get structured around tool expertise, with hardened
    boundaries making it difficult for people from one team to acquire skills
    from others. Beyond language preferences like Python or Java, you can see
    this crystallise in the three most
    common software verticals—Application Development, Data Engineering,
    and DevOps. Are labels like “Application Development,” “DevOps,” and “Data Engineer” just harmless
    shorthand for the work we do? Not really. Once these words harden into career lanes, they
    solidify the very silos that the Agile and DevOps culture was meant to dismantle. The
    labels become an organisational anti-pattern—turning flow into a series of hand-offs when
    it should be a cross-functional sprint. All three share the same
    distributed-systems foundations, and anyone who masters those fundamentals
    can navigate all three without getting lost in each vertical’s
    ever-growing toolset. An expert generalist recognizes this and makes the
    deliberate effort to master those fundamentals.

    Why does our attention keep drifting toward tool expertise? It isn’t
    because people are shortsighted or lazy; it’s because the fundamentals are
    hard to see amid the noise. Key ideas hide under stacks of product docs,
    YouTube tutorials, vendor blogs, and conference talks. At one end of the
    spectrum lie dense academic papers and university courses; at the other, vendor certifications tied to a single product. Connecting
    these dots — cutting through the surface to reach the essentials — takes
    deliberate effort. One proven aid is the language of patterns: reusable
    problem-solution pairs that capture the core principle without the brand
    labels. That’s why we belive in investing in exploring, distilling, and
    sharing such patterns — so the industry conversation can shift from “Which
    tool should I learn next?” to “Which underlying principles and patterns
    must I master?”

    In our experience, the good grasp of this common language of patterns
    and principles also strengthens the product-service partnership. Today
    the relationship is often one-way: product teams ship features, service
    teams consume APIs. Product teams decide how to certify an engineer as an
    expert in a product and service teams aim to do those certifications.
    Cloud providers and tool vendors often demand a certain number of
    “certified professionals” before they will recognise a service provider as
    a competent partner. Yet our experience shows little correlation between
    certifications and
    competence
    . The focus on fundamentals pays off when competence is
    most needed: an engineer versed in Raft can untangle a Kubernetes
    control-plane stall that might puzzle several certified admins, and a
    Delta Lake write anomaly can be resolved from first-principles reasoning
    about optimistic-concurrency control instead of searching vendor docs.
    Once developers across roles share the lingua franca of a system’s
    internals, the partnership becomes bidirectional — both sides can
    diagnose, propose, and refine solutions together. Better yet, the
    engineers who have a good grasp of the fundamentals are able to partner
    well with multiple product and platform teams, without needing to have
    product specific training for each product

    An Example Workshop: Breaking silos and building partnerships

    We’ve seen that we can grow the Expert Generalist skill through mentoring
    and exposure to varied ecosystems, but one of the consequences of
    recognizing Expert Generalist as a first-class skill is that we should
    provide training in a similar way that we do with specialist skills. Such
    training currently barely exists in our profession. We’ve begun to fill that
    gap with workshops that are deliberately focused on developing the Expert
    Generalist competence, and we think there should be more training along
    these lines.

    To help stimulate thinking about this, here’s the details of such a workshop,
    aimed at developers to connect Application Development, Data Engineering,
    and DevOps. The workshop views this work through a distributed systems
    lens, shifting attention to shared building blocks and establishing a
    common language across teams. Although this example is developer-centric,
    we think the same principle can be adapted just as effectively to any role that
    benefits from cross-disciplinary insight.

    As we saw earlier, each discipline—Application Development, Data Engineering, and DevOps—faces the same
    distributed-systems realities, yet we still lack a shared language. The key challenges of
    these systems are the same. They must replicate state,
    tolerate partial failures, and still offer consistency guarantees to end users.
    A catalogue of patterns around the implementation of
    partitioning, replication, consistency, and consensus—that lets every
    team talk about the fundamentals without tool-specific jargon is a good start.
    One workshop will not turn people into expert generalists, but it does give them a head-start and a clear
    window into the challenges their peers tackle every day. That visibility lowers the barrier
    to cross-discipline tasks and deepens everyone’s understanding of the products and platforms
    they use.

    The workshop structure – Building the miniature

    One of the challenges in teaching the abstract patterns is that the developers need to do some mental mapping
    to connect the pattern to the product in use. This is why we chose an approach to structure
    the workshops around specific products, but then focus on the patterns that are most relevant
    and using the product as a window into the broader concepts.

    The way we structured the workshops to teach distributed-system patterns, is by coding
    pocket versions of Kafka, Kubernetes, and Delta Lake. The idea is to pick a flagship product
    from each broad area of specialty, and build it step by step. Implementing a flagship system
    in just a few hundred lines flips your perspective from ‘a user’ of a product
    to ‘a builder’. An important mindset shift. To keep the
    exercise grounded in reality, write it in the product’s own language, mirror its file and
    method names, and rely on real infrastructure — ZooKeeper or etcd, an on-disk log, live
    sockets. The result stays close enough to the original to highlight the pivotal design
    choices while still giving you a safe canvas for experimentation. This approach is powerful,
    because each target is often open source, the moment the miniature works, you can open the
    full codebase on GitHub, recognise the directory structure, and feel confident submitting a
    patch. The miniature is not a toy; it is a gateway.

    We have three workshops, one for each of the three systems.

    Build Your Own Kafka — a miniature written in Java.

    We use ZooKeeper for membership and store every message in a single append-only log. Even
    on one node you meet the classic fsync dilemma: flush every write for safety or batch for
    speed.

    Add a second process and you’re suddenly faced with many decisions. You need partition
    leader election, quorum acknowledgements, an in-sync replica list, and a high-water-mark
    so consumers never read uncommitted data. (A cluster-wide controller comes later, once
    multiple partitions appear.) Each mechanism maps to a production feature in Kafka. After
    walking this code you recognise why a broker stalls when a replica slows and know exactly
    which metric to graph next time it happens.

    The takeaway pattern is simple: an append-only log guarded by quorum replication—a design
    you will encounter throughout modern distributed systems.

    Kubernetes from the Inside Out.

    Start by writing a controller that watches a JSON document in etcd, then calls reconcile()
    until the local Docker daemon reflects that desired state. Very quickly you have to choose
    how to list running containers, queue events, and keep spec and status distinct—exactly
    the concerns that dominate the Kubernetes code base.

    Add real failure cases and things get tricky. What should the controller do when a
    container exits? How does a Postgres container keep its data? Each decision forces you to
    reason about restart policies and persistent-volume claims. After that exercise, the dense
    Go structs in kube-controller-manager feel like natural continuations of a model you
    already understand. The core learning: the power of a declarative desired state converged
    by
    reconcile loops – the common pattern of orchestration in modern distributed systems

    ACID on Object Storage – A miniature Delta Lake.

    Create a directory of Parquet files and pair it with a text log; each data change appends
    a JSON file naming the new data file. Move this setup into a miniature object store and
    every append becomes its own key-value write, with the Parquet file as the value. To
    handle concurrent writers, wrap the append in an optimistic lock that retries if the log
    tail changes. After a dozen commits start-up drags, so you add a checkpoint file and learn
    first-hand why Delta Lake emits one every N transactions. From there, time-travel queries
    drop out naturally from the log-plus-checkpoint design. The key takeaway, achieving ACID
    guarantees on eventually consistent storage through an immutable transaction log,
    optimistic concurrency, and periodic checkpointing – a pattern vital for modern data
    lakehouses.

    Each miniature leaves you with a concrete pattern — append-only log, reconcile loop,
    optimistic commit—that travels well beyond the original context. When the next new tool
    arrives, you’ll recognise the pattern first and the product name second, which is precisely
    the habit that turns professionals into Expert Generalists.

    Expert Generalists still need Specialists

    While we’ve spent this article praising the Expert Generalist, we
    simultaneously do not deny the value of specialist knowledge. Even the most
    skilled Expert Generalist may have to spend valuable time figuring out the
    details of how to do something with a new platform. Their knowledge of
    common patterns helps them know what to look for, their skill
    helps them research faster, but it’s still longer than what a specialist
    already knows. Furthermore an Expert Generalist may miss a vital technique
    that’s particular to a domain, essentially because the Expert Generalist
    doesn’t know what they don’t know – a trap a specialist is far less likely
    to fall into. In our experience, a team of Expert Generalists without
    specialist knowledge of the core technology of their work will still get the
    job done, but will be significantly slower than a team with specialist
    skills on board.

    The point here is that to be the most efficient, the team needs some
    specialist skill. There needs to be at least one deep specialist on a team
    for any core technology that the team is working with. But we’ve found that,
    providing the team is collaborating effectively, we don’t need very many. Often
    one or maybe two people is quite enough.

    With someone with specialist knowledge present, a less knowledgeable
    Expert Generalist can quickly ask a question when they are faced with a task
    that needs the depth. Similarly the specialist should review the work of
    less knowledgeable colleagues, so they can spot when folks are taking the
    wrong path and show them the better way.

    We think it is important to have such a specialist available full-time on
    the team. Much of their value comes from being responsive to questions and
    issues as they come up. In this situation, the important cost to monitor is
    the Cost of Delay – the speed of resolving
    questions is much more important that the utilization of the specialists. So
    it’s worth having a full-time specialist even if it means they aren’t fully
    occupied.2

    2:
    This also indicates how to tell if you don’t have enough specialists on
    a team: measure how long it takes to answer questions. This follows
    Reinertsen’s advice to monitor queue sizes.

    All of this does need everyone involved to have right kind of
    collaborative attitudes. The specialist needs to be someone who is keen to
    share their knowledge with everyone else on the team, and is approachable
    with dumb questions. The Expert Generalists need be comfortable
    demonstrating their ignorance, and actually enjoy being told they are doing
    something wrong in an unfamiliar environment. All in all there needs to be
    plenty of psychological safety around.

    And, of course, the people with specialist skills can often be Expert
    Generalists themselves, with the specialty being legs in their T.

    The flip-side of this is the danger of teams that consist only of
    specialists. Things outside their specialty can easily be missed. For
    example a data engineering team that’s full of specialist data engineers can
    miss anything that isn’t specific to data engineering, such as quality
    strategy, release management, and value articulation.

    Expert Generalists in the Age of LLMs

    Large Language Models and tools based on LLMs are growing in prominence.
    We’ve observed that Expert Generalist capabilities are considerably more
    valuable with these LLMs. The relationship between Expert Generalists and
    LLMs is often similar to that between Expert Generalists and specialists in
    a team. Similarly to a specialist, an LLM can rapidly answer questions that
    an Expert Generalist will have when working in a new domain. This
    significantly lowers the barrier for exploring completely new and unfamiliar
    tools, offering a quick way to get started.

    An Expert Generalist, armed with
    a solid grasp of fundamentals and the knack to master principles and
    patterns, can truly harness the power of LLMs. They’re not just asking an
    LLM to write code in a new language; they’re able to ask more insightful
    questions, critically assess the AI-generated suggestions against their
    broader understanding, and adapt those suggestions to fit sound
    architectural patterns. Their curiosity discourages them from simply
    accepting an answer, but to understand how proposed solutions work – which
    is exactly the behavior needed to overcome the unreliability inherent in
    LLM-given advice.

    We’ve noticed that Expert Generalists approach working with LLMs in a
    different way. Rather than looking for “the answer”, they prompt them to
    generate questions, explaining mechanisms, and providing examples and even
    tools that help explore the underlying mechanisms of an idea.

    So, despite the early days of this technology, we think that the rise of
    LLMs will further enhance the importance of skilled Expert Generalists, and
    thus incentivize enterprises to put more effort into identifying,
    and training people with these skills.

    Why Organizations Need Expert Generalists

    The simplest reason why organizations should pay more attention to Expert
    Generalists is the loss of opportunities to staff teams. Finding exactly the
    right kind of specialist limits the candidate pool, either from hiring from
    outside, or by internal transfers. As long as there’s enough specialist
    skill available to assist, Expert Generalists often do as well, indeed often
    better, than adding another specialist.

    But the benefits of Expert Generalists go further than that. Modern
    software systems involve many components, needing collaboration between
    specialties to deliver features to production. Too often we see stifled communication, with
    folks blocked while waiting on dependent teams to schedule necessary work.
    Lots of these queues between teams impedes flow, slowing down the release of
    valuable features.

    Expert Generalists can unplug the pipes. Sometimes they do this by making
    the interaction smoother due to their overlapping skills, sometimes they
    know enough to do some of these dependent tasks themselves. Indeed one of the
    greatest values an Expert Generalist brings is the ability to Get Things
    Done. The customer-focus drives a good Expert Generalist to use their
    collaborativeness, curiosity, and skills blend to drive features to
    completion. If it requires crossing competency boundaries, they will find a
    way to do it. If they need to rapidly acquire some deeper skills, they will do
    so. They do risk taking on more than they can chew in the process, but that
    ability to close the deal is often imperative in getting critical software
    out the door.

    Expert Generalists are particularly valuable at
    working across the specialist skill boundaries, handling interactions and
    filling in gaps.

    The ability to see complex systems across their full breadth can be
    essential when things go wrong. Faults are often not in the depth of a
    single technology, but in the implicit interactions between them. If
    specialists can’t see the whole picture, they easily miss what falls between
    the gaps.

    The presence of Expert Generalists crossing the competency boundaries
    can also increase knowledge transfer between competency groups, increasing
    everyone’s sympathy for related domains. This mechanism also encourages
    specialists to explore the Expert Generalist skill for themselves.

    Specialists tend to use their familiar tool in contexts where it doesn’t
    make sense. We can’t fault them for that, if you’ve never seen a
    screwdriver, you’ll naturally reach for a hammer first. Expert Generalists
    are more likely to pick appropriate tools. There is a risk there, of
    introducing too many tools into an environment. Sometimes it’s better to use
    a familiar-but-inferior tool, than to introduce a complicated tool for a
    narrow task that’s a burden once the Expert Generalist moves on. A wise
    Expert Generalist will take that factor into account.

    The broad view that Expert Generalist develops naturally leads them
    towards leadership roles. Crossing specialties encourages them to develop
    communication skills, particularly skills on explaining different
    disciplines to each other. Collaboration naturally grows relationships with
    key people around an organization. Customer-focus, Getting Things Done,
    build credibility with business leadership. Organizations that take
    deliberate steps to nurture Expert Generalists can reap the reward by
    growing technologists with a strategic perspective, without necessarily
    pushing them into management tracks.

    All that said, despite the fact that we are clearly big proponents of
    Expert Generalists, there are downsides. Perhaps the greatest is that
    although we’ve found it possible to assess people for their Expert
    Generalist skill, it’s a difficult task, often requiring intensive
    participation from known-capable Expert Generalists. Years on
    the job, quizzes, and certifications are much easier tests to administer
    (although we are cynical about how they relate to delivering value).

    A team full of Expert Generalists, but without particular skills for the
    central domains and platforms they are working on, will be less productive –
    at least until the Expert Generalists develop those skills. As we mentioned
    earlier, it’s important to have someone with those deep skills on the team,
    who can either be specialist in that domain or an Expert Generalist who has
    that as one of the legs in their “T”.

    All in all, we’ve seen so many of our colleagues develop their Expert
    Generalist skill, without the name, and build upon it to be critical parts
    of successful technology and business initiatives. They are the people we
    have learned from, the people our clients go to with problems to solve and
    opportunities to exploit. Our hope with this article is that more people in
    our profession (and perhaps others) will start to recognize “Expert
    Generalist” as a first-class skill, and put more effort in describing its
    characteristics, how to assess it, and how to grow it. We believe that
    giving this skill proper recognition can do much to improve the practice of
    our profession.

    Takeaways

    • Expert Generalists share several key traits
      • Curiosity
      • Collaborativeness
      • Customer-focus
      • Favoring fundamental knowledge
      • A blend of specialist and generalist skills
      • Sympathy for related domains
    • Teams should blend Expert Generalists with a few key specialists
    • Expert Generalist skills are enhanced by LLMs
    • Expert Generalists ensure complex tasks get done
    • We need to treat Expert Generalist as a first class skill
      • Evaluate people’s skill as an Expert Generalist in hiring and
        promotion
      • Develop training just as much as for specialist skills



    Source: Martin Fowler.

  • CSS Intelligence: Speculating On The Future Of A Smarter Language

    CSS Intelligence: Speculating On The Future Of A Smarter Language

    July 2, 2025
    Software

    Once upon a time, CSS was purely presentational. It imperatively handled the fonts, colors, backgrounds, spacing, and layouts, among other styles, for markup languages. It was a language for looks, doing what it was asked to, never thinking or making decisions. At least, that was what it was made for when Håkon Wium Lie proposed CSS in 1994, and the World Wide Web Consortium (W3C) adopted it two years later.

    Fast-forward to today, a lot has changed with the addition of new features, and more are on the way that shift the style language to a more imperative paradigm. CSS now actively powers complex responsive and interactive user interfaces. With recent advancements like container queries, relational pseudo-classes, and the if() function, the language once within the domains of presentations has stepped foot into the territory of logic, reducing its reliance on the language that had handled its logical aspect to date, JavaScript.

    This shift presents interesting questions about CSS and its future for developers. CSS has deliberately remained within the domains of styling alone for a while now, but is it time for that to change? Also, is CSS still a presentational language as it started, or is it becoming something more and bigger? This article explores how smart CSS has become over the years, where it is heading, the problems it is solving, whether it is getting too complex, and how developers are reacting to this shift.

    Historical Context: CSS’s Intentional Simplicity

    A glimpse into CSS history shows a language born to separate content from presentation, making web pages easier to manage and maintain. The first official version of CSS, CSS1, was released in 1996, and it introduced basic styling capabilities like font properties, colors, box model (padding, margin, and border), sizes (width and height), a few simple displays (none, block, and inline), and basic selectors.

    Two years later, CSS2 was launched and expanded what CSS could style in HTML with features like positioning, z-index, enhanced selectors, table layouts, and media types for different devices. However, there were inconsistencies within the style language, an issue CSS2.1 resolved in 2011, becoming the standard for modern CSS. It simplified web authoring and site maintenance.

    CSS was largely static and declarative during the years between CSS1 and CSS2.1. Developers experienced a mix of frustrations and breakthroughs for their projects. Due to the absence of intuitive layouts like Flexbox and CSS Grid, developers relied on hacky alternatives with table layouts, positioning, or floats to get around complex designs, even though floats were originally designed for text to wrap around an obstacle on a webpage, usually a media object. As a result, developers faced issues with collapsing containers and unexpected wrapping behaviour. Notwithstanding, basic styling was intuitive. A newbie could easily pick up web development today and add basic styling the next day. CSS was separated from content and logic, and as a result, it was highly performant and lightweight.

    CSS3: The First Step Toward Context Awareness

    Things changed when CSS3 rolled out. Developers had expected a single monolithic update like the previous versions, but their expectations and the reality of the latest release were unmatched. The CSS3 red carpet revealed a modular system with powerful layout tools like Flexbox, CSS Grid, and media queries, defining for the first time how developers establish responsive designs. With over 20 modules, CSS3 marked the inception of a “smarter CSS”.

    Flexbox’s introduction around 2012 provided a flexible, one-dimensional layout system, while CSS Grid, launched in 2017, took layout a step further by offering a two-dimensional layout framework, making complex designs with minimal code possible. These advancements, as discussed by Chris Coyier, reduced reliance on hacks like floats.

    It did not stop there. There’s media queries, a prominent release of CSS3, that is one of the major contributors to this smart CSS. With media queries, CSS can react to different devices’ screens, adjusting its styles to fit the screen dimensions, aspect ratio, and orientation, a feat that earlier versions could not easily achieve. In the fifth level, it added user preference media features such as prefers-color-scheme and prefers-reduced-motion, making CSS more user-centric by adapting styles to user settings, enhancing accessibility.

    CSS3 marked the beginning of a context-aware CSS.

    Context-awareness means the ability to understand and react to the situation around you or in your environment accordingly. It means systems and devices can sense critical information, like your location, time of day, and activity, and adjust accordingly.

    In web development, the term “context-awareness” has always been used with components, but what drives a context-aware component? If you mentioned anything other than the component’s styles, you would be wrong! For a component to be considered context-aware, it needs to feel its environment’s presence and know what happens in it. For instance, for your website to update its styles to accommodate a dark mode interface, it needs to be aware of the user’s preferences. Also, to change its layout, a website needs to know the device a user is accessing it on — and thanks to user preference media queries, that is possible.

    Despite these features, CSS remained largely reactive. It responded to external factors like screen size (via media queries) or input states (like :hover, :focus, or :checked), but it never made decisions based on the changes in its environment. Developers typically turn to JavaScript for that level of interaction.

    However, not anymore.

    For example, with container queries and, more recently, container style queries, CSS now responds not only to layout constraints but to design intent. It can adjust based on a component’s environment and even its parent’s theme or state. And that’s not all. The recently specced if() function promises inline conditional logic, allowing styles to change based on conditions, all of which can be achieved without scripting.

    These developments suggest CSS is moving beyond presentation to handle behaviour, challenging its traditional role.

    New CSS Features Driving Intelligence

    Several features are currently pushing CSS towards a dynamic and adaptive edge, thereby making it smarter, but these two are worth mentioning: container style queries and the if() function.

    What Are Container Style Queries, And Why Do They Matter?

    To better understand what container style queries are, it makes sense to make a quick stop at a close cousin: container size queries introduced in the CSS Containment Module Level 3.

    Container size queries allow developers to style elements based on the dimensions of their parent container. This is a huge win for component-based designs as it eliminates the need to shoehorn responsive styles into global media queries.

    /* Size-based container query */
    @container (min-width: 500px) {
      .card {
        flex-direction: row;
      }
    }
    

    Container style queries take it a step further by allowing you to style elements based on custom properties (aka CSS variables) set on the container.

    /* Style-based container query */
    @container style(--theme: dark) {
      .button {
        background: black;
        color: white;
      }
    }
    

    These features are a big deal in CSS because they unlock context-aware components. A button can change appearance based on a --theme property set by a parent without using JavaScript or hardcoded classes.

    The if() Function: A Glimpse Into The Future

    The CSS if() function might just be the most radical shift yet. When implemented (Chrome is the only one to support it, as of version 137), it would allow developers to write inline conditional logic directly in property declarations. Think of the ternary operator in CSS.

    padding: if(style(--theme: dark): 2rem; else: 3rem);
    

    This hypothetical line or pseudo code, not syntax, sets the text color to white if the --theme variable equals dark, or black otherwise. Right now, the if() function is not supported in any browser, but it is on the radar of the CSS Working Group, and influential developers like Lea Verou are already exploring its possibilities.

    The New CSS: Is The Boundary Between CSS And JavaScript Blurring?

    Traditionally, the separation of concerns concerning styling was thus: CSS for how things look and JavaScript for how things behave. However, features like container style queries and the specced if() function are starting to blur the line. CSS is beginning to behave, not in the sense of API calls or event listeners, but in the ability to conditionally apply styles based on logic or context.

    As web development evolved, CSS started encroaching on JavaScript territory. CSS3 brought in animations and transitions, a powerful combination for interactive web development, which was impossible without JavaScript in the earlier days. Today, research proves that CSS has taken on several interactive tasks previously handled by JavaScript. For example, the :hover pseudo-class and transition property allow for visual feedback and smooth animations, as discussed in “Bringing Interactivity To Your Website With Web Standards”.

    That’s not all. Toggling accordions and modals existed within the domains of JavaScript before, but today, this is possible with new powerful CSS combos like the <details> and <summary> HTML tags for accordions or modals with the :target pseudo-class. CSS can also handle tooltips using aria-label with content: attr(aria-label), and star ratings with radio inputs and labels, as detailed in the same article.

    Another article, “5 things you can do with CSS instead of JavaScript”, lists features like scroll-behavior: smooth for smooth scrolling and @media (prefers-color-scheme: dark) for dark mode, tasks that once required JavaScript. In the same article, you can also see that it’s possible to create a carousel without JavaScript by using the CSS scroll snapping functionality (and we’re not even talking about features designed specifically for creating carousels solely in CSS, recently prototyped in Chrome).

    These extensions of CSS into the JavaScript domain have now left the latter with handling only complex, crucial interactions in a web application, such as user inputs, making API calls, and managing state. While the CSS pseudo-classes like :valid and :invalid can help as error or success indicators in input elements, you still need JavaScript for dynamic content updates, form validation, and real-time data fetching.

    CSS now solves problems that many developers never knew existed. With JavaScript out of the way in many style scenarios, developers now have simplified codebases. The dependencies are fewer, the overheads are lower, and website performance is better, especially on mobile devices. In fact, this shift leans CSS towards a more accessible web, as CSS-driven designs are often easier for browsers and assistive technologies to process.

    While the new features come with a lot of benefits, they also introduce complexities that did not exist before:

    • What happens when logic is spread across both CSS and JavaScript?
    • How do we debug conditional styles without a clear view of what triggered them?
    • CSS only had to deal with basic styling like colors, fonts, layouts, and spacing, which were easier for new developers to onboard. How hard does the learning curve become as these new features require understanding concepts once exclusive to JavaScript?

    Developers are split. While some welcome the idea of a natural evolution of a smarter, more component-aware web, others worry CSS is becoming too complex — a language originally designed for formatting documents now juggling logic trees and style computation.

    Divided Perspective: Is Logic In CSS Helpful Or Harmful?

    While the evidence in the previous section leans towards boundary-blurring, there’s significant controversy among developers. Many modern developers argue that logic in CSS is long overdue. As web development grows more componentized, the limitations of declarative styling have become more apparent, causing proponents to see logic as a necessary evolution for a once purely styling language.

    For instance, in frontend libraries like React, components often require conditional styles based on props or states. Developers have had to make do with JavaScript or CSS-in-JS solutions for such cases, but the truth remains that these solutions are not right. They introduce complexity and couple styles and logic. CSS and JavaScript are meant to have standalone concerns in web development, but libraries like CSS-in-JS have ignored the rules and combined both.

    We have seen how preprocessors like SASS and LESS proved the usefulness of conditionals, loops, and variables in styling. Developers who do not accept the CSS in JavaScript approach have settled for these preprocessors. Nevertheless, like Adam Argyle, they voice their need for native CSS solutions. With native conditionals, developers could reduce JavaScript overhead and avoid runtime class toggling to achieve conditional presentation.

    “It never felt right to me to manipulate style settings in JavaScript when CSS is the right tool for the job. With CSS custom properties, we can send to CSS what needs to come from JavaScript.”

    — Chris Heilmann

    Also, Bob Ziroll dislikes using JavaScript for what CSS is meant to handle and finds it unnecessary. This reflects a preference for using CSS for styling tasks, even when JavaScript is involved. These developers embrace CSS’s new capabilities, seeing it as a way to reduce JavaScript dependency for performance reasons.

    Others argue against it. Introducing logic into CSS is a slippery slope, and CSS could lose its core strengths — simplicity, readability, and accessibility — by becoming too much like a programming language. The fear is that developers run the risk of complicating the web more than it is supposed to be.

    “I’m old-fashioned. I like my CSS separated from my HTML; my HTML separated from my JS; my JS separated from my CSS.”

    — Sara Soueidan

    This view emphasises the traditional separation of concerns, arguing that mixing roles can complicate maintenance. Additionally, Brad Frost has also expressed skepticism when talking specifically about CSS-in-JS, stating that it, “doesn’t scale to non-JS-framework environments, adds more noise to an already-noisy JS file, and the demos/examples I have seen haven’t embodied CSS best practices.” This highlights concerns about scalability and best practices, suggesting that the blurred boundary might not always be beneficial.

    Community discussions, such as on Stack Overflow, also reflect this divide. A question like “Is it always better to use CSS when possible instead of JS?” receives answers favouring CSS for performance and simplicity, but others argue JavaScript is necessary for complex scenarios, illustrating the ongoing debate. Don’t be fooled. It might seem convenient to agree that CSS performs better than JavaScript in styling, but that’s not always the case.

    A Smarter CSS Without Losing Its Soul

    CSS has always stood apart from full-blown programming languages, like JavaScript, by being declarative, accessible, and purpose-driven.

    If CSS is to grow more intelligent, the challenge lies not in making it more powerful for its own sake but in evolving it without compromising its major concern.

    So, what might a logically enriched but still declarative CSS look like? Let’s find out.

    Conditional Rules (if, @when…@else) With Carefully Introduced Logic

    A major frontier in CSS evolution is the introduction of native conditionals via the if() function and the @when…@else at-rules, which are part of the CSS Conditional Rules Module Level 5 specification. While still in the early draft stages, this would allow developers to apply styles based on evaluated conditions without turning to JavaScript or a preprocessor. Unlike JavaScript’s imperative nature, these conditionals aim to keep logic ingrained in CSS’s existing flow, aligned with the cascade and specificity.

    More Powerful, Intentional Selectors

    Selectors have always been one of the major strengths of CSS, and expanding them in a targeted way would make it easier to express relationships and conditions declaratively without needing classes or scripts. Currently, :has() lets developers style a parent based on a child, and :nth-child(An+B [of S]?) (in Selectors Level 4) allows for more complex matching patterns. Together, they allow greater precision without altering CSS’s nature.

    Scoped Styling Without JavaScript

    One of the challenges developers face in component-based frameworks like React or Vue is style scoping. Style scoping ensures styles apply only to specific elements or components and do not leak out. In the past, to achieve this, you needed to implement BEM naming conventions, CSS-in-JS, or build tools like CSS Modules. Native scoped styling in CSS, via the new experimental @scope rule, allows developers to encapsulate styles in a specific context without extra tooling. This feature makes CSS more modular without tying it to JavaScript logic or complex class systems.

    A fundamental design question now is whether we could empower CSS without making it like JavaScript. The truth is, to empower CSS with conditional logic, powerful selectors, and scoped rules, we don’t need it to mirror JavaScript’s syntax or complexity. The goal is declarative expressiveness, giving CSS more awareness and control while retaining its clear, readable nature, and we should focus on that. When done right, smarter CSS can amplify the language’s strengths rather than dilute them.

    The real danger is not logic itself but unchecked complexity that obscures the simplicity with which CSS was built.

    Cautions And Constraints: Why Smart Isn’t Always Better

    The push for a smarter CSS comes with significant trade-offs alongside control and flexibility. Over the years, history has shown that adding a new feature to a language or framework, or library, most likely introduces complexity, not just for newbies, but also for expert developers. The danger is not in CSS gaining power but in how that power is implemented, taught, and used.

    One of CSS’s greatest strengths has always been its approachability. Designers and beginners could learn the basics quickly: selectors, properties, and values. With more logic, scoping, and advanced selectors being introduced, that learning curve steepens. The risk is a widening gap between “basic CSS” and “real-world CSS”, echoing what happened with JavaScript and its ecosystem.

    As CSS becomes more powerful, developers increasingly lean on tooling to manage and abstract that power, like building systems (e.g., webpack, Vite), linters and formatters, and component libraries with strict styling conventions. This creates dependencies that are hard to escape. Tooling becomes a prerequisite, not an option, further complicating onboarding and increasing setup time for projects that used to work with a single stylesheet.

    Also, more logic means more potential for unexpected outcomes. New issues might arise that are harder to spot and fix. Resources like DevTools will then need to evolve to visualise scope boundaries, conditional applications, and complex selector chains. Until then, debugging may remain a challenge. All of these are challenges experienced with CSS-in-JS; how much more Native CSS?

    We’ve seen this before. CSS history is filled with overcomplicated workarounds, like tables for the layout before Flexbox, relying on floats with clear fix hacks, and overly rigid grid systems before native CSS Grid. In each case, the hacky solution eventually became the problem. CSS got better not by mimicking other languages but by standardising thoughtful, declarative solutions. With the right power, we can make CSS better at the end of the day.

    Conclusion

    We just took a walk down the history lane of CSS, explored its presence, and peeked into what its future could be. We can all agree that CSS has come a long way from a simple, declarative language to a dynamic, context-aware, and, yes, smarter language. The evolution, of course, comes with tension: a smarter styling language with fewer dependencies on scripts and a complex one with a steeper learning curve.

    This is what I conclude:

    The future of CSS shouldn’t be a race to add logic for its own sake. Instead, it should be a thoughtful expansion, power balanced by clarity and innovation grounded in accessibility.

    That means asking tough questions before shipping new features. It means ensuring that new capabilities help solve actual problems without introducing new barriers.


    Source: Articles on Smashing Magazine — For Web Designers And Developers.

  • pølaroit – Dimmed

    pølaroit – Dimmed

    July 2, 2025
    Music

    • Stream ‘Anjunadeep Explorations Vol. 1’: https://exp.anjunadeep.co/exp1.oyd • Buy/Stream pølaroit ‘Found You’ EP: https://exp.anjunadeep.co/fyep.oyd • Explorations Discography: https://exp.anjunadeep.co/disco.oyd • Follow Explorations on Instagram: https://www.instagram.com/explorationslabel • Explorations SoundCloud: https://soundcloud.com/explorations-label • Listen to Anjunadeep Radio 24/7: https://anjunadeep.co/radio.oyd • Anjuna Music Store: https://music.anjunabeats.com/ • Anjuna Merchandise: https://store.anjunabeats.com/ • Join our newsletter for updates: https://anjunadeep.com/gb/join German electronic live act pølaroit make their Anjunadeep Explorations debut with the ‘Found You EP’. Comprised of Jonas Gewald and Marius Lesemann, the duo have been releasing music together since 2018 after a chance meeting at a market in Hanover led to their musical pathways converging. Up until then, Jonas had been developing his work as a pianist and scoring music for TV and film, whilst Marius’ roots lay with percussion and electronic music. Fast-forward to 2022, and the pair had signed their track ‘Backwaters’ with Cercle as part of their ‘Cercle Story: Chapter 2’ compilation, accompanied by a stunning live performance from a boat travelling the famous Kerala Backwaters. This summer the pair take to a string of European festivals with their new live show, performing at the likes of VENTUS Open Air and MOYN MOYN Festival in Germany, as well as LAS Festival in Poland and a club set at Café Berlín in Madrid. The new EP features German producer Loutouse on ‘Way Home’, and German singer/songwriter Maybemahri on EP title track ‘Found You’. In pølaroit’s own words, for ‘Found You’ “we had Maybamahri’s vocals in mind from the start. The collaboration kicked off over Instagram with a quick exchange. She sent us raw vocal snippets recorded on her phone, which we immediately built into the track”. For ‘Way Home’, “after a brief introduction [with Loutouse] we recorded a simple piano line that set the mood. The vocals were already on his hard drive, and when he shared them, they fit perfectly. The track practically built itself”. The ‘Found You EP’ from pølaroit is out July 2nd on Anjunadeep Explorations. Release date: 2 July 2025 Follow Anjunadeep: • Youtube: https://anjunadeep.co/youtube.oyd • Website: http://www.anjunadeep.com • Facebook: http://www.facebook.com/anjunadeep • Twitter: http://www.twitter.com/anjunadeep • Spotify: https://anjunadeep.co/spotify.oyd • Instagram: http://www.instagram.com/anjunadeep • SoundCloud: http://soundcloud.com/anjunadeep • Reddit: https://reddit.com/r/AboveandBeyond/ • Twitch: https://www.twitch.tv/anjuna • Discord: http://www.discord.gg/anjuna • Join our newsletter: https://anjunadeep.com/signup/ Follow Anjunadeep Playlists: • Anjunadeep 2025: https://anjunadeep.co/deep2025.oyd • Anjunadeep Discography: https://anjunadeep.co/discog.oyd • Anjunadeep Essentials: https://anjunadeep.co/essentialsplaylist.oyd • Anjunadeep Explorations Discography: https://exp.anjunadeep.co/discog.oyd #Anjunadeep #pølaroit


    Source: YouTube.

  • pølaroit – Way Home

    pølaroit – Way Home

    July 2, 2025
    Music

    • Stream ‘Anjunadeep Explorations Vol. 1’: https://exp.anjunadeep.co/exp1.oyd • Buy/Stream pølaroit ‘Found You’ EP: https://exp.anjunadeep.co/fyep.oyd • Explorations Discography: https://exp.anjunadeep.co/disco.oyd • Follow Explorations on Instagram: https://www.instagram.com/explorationslabel • Explorations SoundCloud: https://soundcloud.com/explorations-label • Listen to Anjunadeep Radio 24/7: https://anjunadeep.co/radio.oyd • Anjuna Music Store: https://music.anjunabeats.com/ • Anjuna Merchandise: https://store.anjunabeats.com/ • Join our newsletter for updates: https://anjunadeep.com/gb/join German electronic live act pølaroit make their Anjunadeep Explorations debut with the ‘Found You EP’. Comprised of Jonas Gewald and Marius Lesemann, the duo have been releasing music together since 2018 after a chance meeting at a market in Hanover led to their musical pathways converging. Up until then, Jonas had been developing his work as a pianist and scoring music for TV and film, whilst Marius’ roots lay with percussion and electronic music. Fast-forward to 2022, and the pair had signed their track ‘Backwaters’ with Cercle as part of their ‘Cercle Story: Chapter 2’ compilation, accompanied by a stunning live performance from a boat travelling the famous Kerala Backwaters. This summer the pair take to a string of European festivals with their new live show, performing at the likes of VENTUS Open Air and MOYN MOYN Festival in Germany, as well as LAS Festival in Poland and a club set at Café Berlín in Madrid. The new EP features German producer Loutouse on ‘Way Home’, and German singer/songwriter Maybemahri on EP title track ‘Found You’. In pølaroit’s own words, for ‘Found You’ “we had Maybamahri’s vocals in mind from the start. The collaboration kicked off over Instagram with a quick exchange. She sent us raw vocal snippets recorded on her phone, which we immediately built into the track”. For ‘Way Home’, “after a brief introduction [with Loutouse] we recorded a simple piano line that set the mood. The vocals were already on his hard drive, and when he shared them, they fit perfectly. The track practically built itself”. The ‘Found You EP’ from pølaroit is out July 2nd on Anjunadeep Explorations. Release date: 2 July 2025 Follow Anjunadeep: • Youtube: https://anjunadeep.co/youtube.oyd • Website: http://www.anjunadeep.com • Facebook: http://www.facebook.com/anjunadeep • Twitter: http://www.twitter.com/anjunadeep • Spotify: https://anjunadeep.co/spotify.oyd • Instagram: http://www.instagram.com/anjunadeep • SoundCloud: http://soundcloud.com/anjunadeep • Reddit: https://reddit.com/r/AboveandBeyond/ • Twitch: https://www.twitch.tv/anjuna • Discord: http://www.discord.gg/anjuna • Join our newsletter: https://anjunadeep.com/signup/ Follow Anjunadeep Playlists: • Anjunadeep 2025: https://anjunadeep.co/deep2025.oyd • Anjunadeep Discography: https://anjunadeep.co/discog.oyd • Anjunadeep Essentials: https://anjunadeep.co/essentialsplaylist.oyd • Anjunadeep Explorations Discography: https://exp.anjunadeep.co/discog.oyd #Anjunadeep #pølaroit


    Source: YouTube.

  • pølaroit – Found You

    pølaroit – Found You

    July 1, 2025
    Music

    • Stream ‘Anjunadeep Explorations Vol. 1’: https://exp.anjunadeep.co/exp1.oyd • Buy/Stream pølaroit ‘Found You’ EP: https://exp.anjunadeep.co/fyep.oyd • Explorations Discography: https://exp.anjunadeep.co/disco.oyd • Follow Explorations on Instagram: https://www.instagram.com/explorationslabel • Explorations SoundCloud: https://soundcloud.com/explorations-label • Listen to Anjunadeep Radio 24/7: https://anjunadeep.co/radio.oyd • Anjuna Music Store: https://music.anjunabeats.com/ • Anjuna Merchandise: https://store.anjunabeats.com/ • Join our newsletter for updates: https://anjunadeep.com/gb/join German electronic live act pølaroit make their Anjunadeep Explorations debut with the ‘Found You EP’. Comprised of Jonas Gewald and Marius Lesemann, the duo have been releasing music together since 2018 after a chance meeting at a market in Hanover led to their musical pathways converging. Up until then, Jonas had been developing his work as a pianist and scoring music for TV and film, whilst Marius’ roots lay with percussion and electronic music. Fast-forward to 2022, and the pair had signed their track ‘Backwaters’ with Cercle as part of their ‘Cercle Story: Chapter 2’ compilation, accompanied by a stunning live performance from a boat travelling the famous Kerala Backwaters. This summer the pair take to a string of European festivals with their new live show, performing at the likes of VENTUS Open Air and MOYN MOYN Festival in Germany, as well as LAS Festival in Poland and a club set at Café Berlín in Madrid. The new EP features German producer Loutouse on ‘Way Home’, and German singer/songwriter Maybemahri on EP title track ‘Found You’. In pølaroit’s own words, for ‘Found You’ “we had Maybamahri’s vocals in mind from the start. The collaboration kicked off over Instagram with a quick exchange. She sent us raw vocal snippets recorded on her phone, which we immediately built into the track”. For ‘Way Home’, “after a brief introduction [with Loutouse] we recorded a simple piano line that set the mood. The vocals were already on his hard drive, and when he shared them, they fit perfectly. The track practically built itself”. The ‘Found You EP’ from pølaroit is out July 2nd on Anjunadeep Explorations. Release date: 2 July 2025 Follow Anjunadeep: • Youtube: https://anjunadeep.co/youtube.oyd • Website: http://www.anjunadeep.com • Facebook: http://www.facebook.com/anjunadeep • Twitter: http://www.twitter.com/anjunadeep • Spotify: https://anjunadeep.co/spotify.oyd • Instagram: http://www.instagram.com/anjunadeep • SoundCloud: http://soundcloud.com/anjunadeep • Reddit: https://reddit.com/r/AboveandBeyond/ • Twitch: https://www.twitch.tv/anjuna • Discord: http://www.discord.gg/anjuna • Join our newsletter: https://anjunadeep.com/signup/ Follow Anjunadeep Playlists: • Anjunadeep 2025: https://anjunadeep.co/deep2025.oyd • Anjunadeep Discography: https://anjunadeep.co/discog.oyd • Anjunadeep Essentials: https://anjunadeep.co/essentialsplaylist.oyd • Anjunadeep Explorations Discography: https://exp.anjunadeep.co/discog.oyd #Anjunadeep #pølaroit


    Source: YouTube.

  • Expert Generalists need specialists (and LLMs)

    July 1, 2025
    Software

    The Characteristics of an Expert Generalist

    Writing a sophisticated computer program often requires a lot of detailed
    knowledge. If we do this in Java, we need to know the syntax of the
    language, the wide range of libraries available to assist us in the work,
    the various tools required to verify and build our programs. If we do this
    in Python instead, we are faced with a different syntax, libraries that are named
    and work differently, a whole other ecosystem to build and run our work.

    Faced with these details, a natural response is to recruit people who
    are knowledgeable about a specific ecosystem. Thus we see job descriptions that say “at
    least three years of Java”, or even deeper requirements for subsets of that
    community, with experience in specific tools. What use is a skilled
    Python programmer to such a team?

    We’ve always felt that such desires are wrong-headed. The characteristics
    that we’ve observed separating effective software developers from the chaff
    aren’t things that depend on the specifics of tooling. We rather appreciate
    such things as: the knowledge of core concepts and patterns of programming, a
    knack for decomposing complex work-items into small, testable pieces, and the
    ability to collaborate with both other programmers and those who will
    benefit from the software.

    Throw such a Python programmer into a Java team, and we’d expect them to
    prosper. Sure they would ask a lot of questions about the new language and
    libraries, we’d hear a lot of “how do you do this here?” But such questions
    are quickly answered, and the impediments of Java-ignorance soon wither
    away.

    An experienced Pythonista who understands
    the core patterns and practices of software development can be a productive
    member of a team building software in Java. Knowing how to handle
    snakes can be surprisingly handy.

    This echoes a long debate about the relative value of specialists and
    generalists. Specialists are seen as people with a deep skill in a specific
    subject, while generalists have broad but shallow skills. A dissatisfaction
    with that dichotomy led to the idea of “T-shaped people”: folks that combine
    deep knowledge in one topic, with a broad but shallow knowledge of many
    other topics. We’ve seen many such people quickly grow other deep legs,
    which doesn’t do much for the “T-shape” name (as we’ll discuss below), but otherwise leads to
    success. Often experience of a different environment leads to trying things
    that seem innovative in a new home. Folks that only work in a single
    technological neighborhood are at the constant risk of locking themselves
    into a knowledge silo, unaware of many tools that could help them in their
    work.

    This ability goes beyond just developer skills. We’ve seen our best
    business analysts gain deep skills in a couple of domains, but use their
    generalist skills to rapidly understand and contribute in new domains.
    Developers and User Experience folks often step outside “their lanes” to
    contribute widely in getting work done. We’ve seen this capability be an
    essential quality in our best colleagues, to the degree that its importance
    is something we’ve taken for granted.

    But increasingly we see the software industry push for
    increasing, narrower specialization.

    So over the last year or so we have started to resist this industry-wide
    push for narrow skills, by calling out this quality, which we call an
    Expert Generalist. Why did we use the word “expert”?
    There are two sides to real expertise. The first is the familiar depth: a detailed command
    of one domain’s inner workings. The second, crucial in our fast-moving field
    is the ability to learn quickly, spot the
    fundamentals that run beneath shifting tools and trends, and apply them wherever we land.
    As an example from software teams, developers who roam across languages, architectures, and problem spaces may seem like
    “jack-of-all-trades, master-of-none,” yet repeated dives below surface differences help them
    develop durable, principle-level mastery. Over time these generalists can dissect unfamiliar
    challenges, spot first-principles patterns, and make confident design decisions with the
    assurance of a specialist – and faster. Being such a generalist is itself a
    sophisticated expertise.

    We’ve long noticed that not just anyone succeeds as an Expert Generalist,
    but once we understand the traits that are key for such Expert Generalists,
    organizations can shape learning programs, hiring filters, and career paths
    that deliberately develop them. Indeed our hiring and career progression at
    Thoughtworks has been cultivating this skill for over two decades, but doing
    so informally. We think the industry needs to change gears, and treat Expert
    Generalist as a first-class skill in its own right: something we name,
    assess, and train for. (But beware, we find many Expert Generalists,
    including at least one author of this article, cringe at the word “expert”.)

    When we’ve observed Expert Generalists, there are certain attributes
    that stand out.

    Curiosity

    Expert Generalists display a lot of curiosity. When confronted with a new
    technology or domain, their default reaction is to want to discover more about it, to see
    how it can be used effectively. They are quite happy to spend time just exploring the new
    topic area, building up some familiarity before using it in action. For most, learning new
    topics is a pleasure in itself, whether or not it’s immediately
    applicable to their work.

    This characteristic is noticeable when Expert Generalists get an answer
    to a question. Rather than just typing in some code from Stack Overflow,
    an Expert Generalist’s curiosity usually motivates them to ensure they
    understand the answer, taking the opportunity to expand their knowledge,
    and check that the answer they got is appropriate. It’s also present when
    asking a question. There is an art to asking questions that elicit deeper
    answers without leading the witness.

    Collaborativeness

    Learning about a new topic area may require reading, watching videos, and prototyping. But
    we see the greatest aid here is another vital characteristic: collaborativeness.
    A wise Expert Generalist knows that they can never really learn about most of the things
    they run into. Their T-shape will grow several legs, but never enough to span all the
    things they need to know, let alone want to know. Working with people who do have those
    deeper skills is essential to being effective in new domains.

    Working with an otherly-skilled worker allows the generalist to
    contribute while the skilled collaborator spots more effective paths that
    only a specialist would know. The generalist appreciates these
    corrections, learning from them. Learning involves both knowing more about
    the new domain, but also learning to differentiate between areas where the
    generalist can do primary contributions and areas where the generalist
    needs help from the specialist. We notice Expert Generalists are never
    afraid to ask for help, they know there is much they are ignorant of, and
    are eager to involve those who can navigate through those areas.

    An effective combination of collaborative curiosity requires
    humility. Often when encountering new domains we see things that don’t
    seem to make sense. Effective generalists react to that by first
    understanding why this odd behavior is the way it is, because there’s
    usually a reason, indeed a good reason considering its context. Sometimes,
    that reason is no longer valid, or was missing an important consideration
    in the first place. In that situation a newcomer can add considerable
    value by questioning the orthodoxy. But at other times the reason was, and
    is still valid – at least to some extent. Humility encourages the Expert
    Generalist to not leap into challenging things until they are sure they
    understand the full context.

    This humility extends to recognizing the different trade-offs we see
    across architectures. An architecture designed to support large volumes
    of simple transactions will differ from one designed to handle a few
    complex interactions. Expert Generalists are comfortable in a world where different
    trade-offs make sense in different circumstances, usually because their
    travels have exposed them to these differences.

    Customer Focus

    This curiosity and eagerness to collaborate with people with different skills does raise a
    danger. Someone driven by curiosity can chase every shiny object. This is where the
    characteristic of customer-focus comes into play. We are often impressed with
    how an Expert Generalist takes each unfamiliar technology and questions how it helps the
    customer. We are fans of Kathy Sierra’s notion that our purpose as software developers is to help our
    customers become “badass”
    at what they do.

    Customer-focus is the necessary lens to focus curiosity. Expert
    generalists prioritize their attention on the things that will help them
    help their users to excel. This encourages learning about what their
    customers do, and how they can improve their work. It focuses attention on
    technologies that contribute to building those things. Customer-focus
    energizes collaboration, encouraging the exchange of information between
    customer and technologist, and allowing the Expert Generalist to
    coordinate other technologists towards enabling the customers’
    excellence.

    Favor Fundamental Knowledge

    Software development is a vast field, where nobody can know everything, or even a
    reasonable fraction of everything, so we all need to prioritize what topics we learn. Expert
    Generalists favor fundamental
    knowledge, that doesn’t become outdated with changes when platforms update. These are
    often expressed as patterns or principles. Such knowledge tends to age slowly, and is
    applicable when folks move into new environments. For example the basic moves of refactoring
    are the same whatever language you are programming, the core patterns of distributed systems
    reappear regularly (and it’s no coincidence that’s why we wrote books on those topics – we
    like book sales that last for many years).

    Blend of Generalist and Specialist Skills

    Thus generalists often have deep knowledge of fundamentals, and we usually see them have
    deep knowledge of a few other topics too. They combine a broad general skill with several
    areas of deeper knowledge, usually acquired as it’s necessary for products they’ve worked
    on, coupled with the curiosity to dig into things that puzzle most people. These deeper
    areas may not be relevant to every engagement they work on, but is a signal for their acumen
    and curiosity. We’ve learned to be suspicious of people who present as a generalist yet
    don’t have a few deep specialties.

    We mentioned before that a common name for this skills profile is that
    of the “T-shaped” person, implying a blend of specialist and generalist
    skills. While the T-shape moniker did catch on, it comes with a
    major problem in the metaphor, we don’t find such folks have only a
    single deeper skill. They usually have a few, of varying depth. We’re not
    the only people to identify this problem, and there have been several
    other names proposed to describe this skill-set, although the alternatives
    all have their own problems. 1

    1:
    Kent Beck came up with the metaphor of “paint drip people”, although a problem
    with this metaphor is that paint-drips aren’t usually something we
    desire. “π-shape” at least admits two deeper skills, but again implies an
    arbitrary limit that doesn’t work in practice. “Comb-shaped” implies
    many deeper skills, which is good, but it also implies they are all the
    same depth, which isn’t true.

    The vertical stroke of a skill set represents broader, long-lasting
    domains, not specific tools or frameworks. An expert generalist therefore pursues depth
    in distributed-data systems—partitioning and replication strategies, fault-tolerance
    mechanisms, consistency models, and consensus algorithms—instead of mastering only
    Databricks notebooks. In the cloud, they focus on cloud-native architecture: auto-scaling
    heuristics, multi-region fail-over etc rather than
    focusing on AWS-specific configuration syntax. On the front end, they study browser-based
    UI architecture—rendering pipelines, state-reconciliation patterns, and accessibility
    primitives—instead of the latest React APIs.

    Sympathy for Related Domains

    Expert generalists often find themselves in unfamiliar territory—be
    it a new software stack, a new domain, or a new role. Rather than chasing
    exhaustive detail from day one, they cultivate a rough, perceptive sense of
    what works in the new environment. That helps them make choices that
    go with the grain—even when it differs from their previous experience.

    Jackie Stewart, a triple Formula 1 world champion (1969-93),
    described how, while he wasn’t an engineer of the cars he drove, he
    still needed a sense of how they
    worked
    , how they responded to what the driver was trying to do, a
    sense he called mechanical sympathy.
    Martin Thompson brought this
    concept into software
    , by talking about how a similar knowledge
    of how computer hardware works is vital to writing high-performance
    software.

    We think that the notion of mechanical sympathy has a broader
    sense in software, in that we do need to cultivate such a
    sympathy for any adjacent domain to the ones we are working on. When
    working on a database design, we need such a sympathy for the
    user-interface so we can construct a design that will work smoothly with
    the user-experience. A user-experience designer needs such a sympathy
    with software constraints so when choosing between similarly valuable
    user flows, they take into account how hard it is to build them.

    This also shows itself with new teams. When joining a new team, expert
    generalists tend to listen to the established ways that a team works,
    introducing different approaches thoughtfully. Even when coming in as
    leaders, they don’t default to tearing up existing workflows in favor of
    those more familiar to them. Their curiosity extends to understanding why
    different people work in different ways, trying out unfamiliar working
    styles, then incorporating their experience to develop practices to
    improve from the current state.

    Assessing Expert Generalists

    We have two crucial checkpoints for spotting —and then nurturing
    —expert generalists: the hiring interview and ongoing career
    progression.

    Hiring

    Traditional interview loops still revolve around product
    trivia—“Explain Spark’s shuffle stages,” “How does Databricks Delta
    time-travel work?” A candidate who has never touched those tools can
    still be exactly the kind of person we need: someone who quickly
    grasps unfamiliar concepts, breaks complex systems into manageable
    parts, and collaborates across functions. Focusing on a single stack
    or cloud provider risks filtering out such talent.

    To surface that potential, widen the conversation beyond tool
    recall. Ask candidates to talk through past experiences:

    • How did they approach a particularly challenging situation?
    • When have they ventured into an unfamiliar domain, and how did
      they get up to speed?
    • How do they collaborate with people inside and outside their own organisation or
      discipline?

    These stories reveal learning velocity, systems thinking,
    and people skills—the raw material of an expert generalist.

    Example · Process-control engineer We once met an engineer
    whose entire résumé was industrial PLC work—no general-purpose
    language, no web, no cloud. Yet his record of diagnosing
    control-system failures and the questions he asked during the
    interview showed exceptional learning agility. Hired for those
    qualities, he grew into a respected technical leader and later a
    product owner. Rejecting him for not knowing “our” tools would have
    been a costly miss.

    Career progression

    Inside the organisation, narrow verticals can freeze growth: UI
    developers, QAs, data engineers, or cloud experts seldom step
    outside their lanes. The growth paths map one-to-one with vertical
    silos: UI Engineer → Senior UI Engineer → UI Architect, or Data
    Engineer → Senior Data Engineer → Principal Databricks Guru. The
    unintended message is, “wander outside your lane and your progress
    stalls.

    We have found that encouraging people to experiment—letting them
    make mistakes and learn in adjacent disciplines—yields remarkable
    benefits. A business analyst writing code out of curiosity, a
    front-end engineer dabbling in DevOps, a data engineer trying
    product analysis: each cross-pollination broadens both the
    individual and the team.

    Example · Medical-domain analyst A non-technical professional
    from healthcare joined us as a business analyst. His passion for
    tech pulled him into code reviews and pairing sessions. Over time he
    became an outstanding tech lead and a broader strategic thinker than
    many traditional “pure” engineers.

    Both stories underscore the same lesson: if we base assessment and
    advancement solely on a checklist of tools, we forfeit the chance to
    work with brilliant, adaptable people—and we hamper the organisation’s
    ability to innovate.

    Growing Expert Generalists

    From Tools to Fundamentals

    IT trends get triggered by pivotal inventions that enable new business
    opportunities. Product providers and tool vendors quickly build products,
    and the industry focus often shifts to expertise in tools and frameworks
    rather than the underlying technical trends. For example, in the 1990s,
    when graphical-user-interface two-tier architectures were popular, the
    essential skill was mastering Object-Oriented Programming — its iterative,
    collaborative design — yet most attention centred on tools like Rational
    Rose, the C++ programming language, and frameworks such as Microsoft
    Foundation Classes. When the Web arrived, understanding Web architecture
    and global-scale caching was crucial, but early hype gravitated toward
    technologies like J2EE. In today’s cloud era, with complex microservice
    based architectures, big-data technologies, and expansive DevOps
    toolchains, the foundational discipline of distributed systems is often
    overlooked while certifications in specific tools dominate.

    One of the biggest problems with excessive focus on tools and framework
    expertise is when it is cemented into organizational structures. Teams and
    organisations get structured around tool expertise, with hardened
    boundaries making it difficult for people from one team to acquire skills
    from others. Beyond language preferences like Python or Java, you can see
    this crystallise in the three most
    common software verticals—Application Development, Data Engineering,
    and DevOps. Are labels like “Application Development,” “DevOps,” and “Data Engineer” just harmless
    shorthand for the work we do? Not really. Once these words harden into career lanes, they
    solidify the very silos that the Agile and DevOps culture was meant to dismantle. The
    labels become an organisational anti-pattern—turning flow into a series of hand-offs when
    it should be a cross-functional sprint. All three share the same
    distributed-systems foundations, and anyone who masters those fundamentals
    can navigate all three without getting lost in each vertical’s
    ever-growing toolset. An expert generalist recognizes this and makes the
    deliberate effort to master those fundamentals.

    Why does our attention keep drifting toward tool expertise? It isn’t
    because people are shortsighted or lazy; it’s because the fundamentals are
    hard to see amid the noise. Key ideas hide under stacks of product docs,
    YouTube tutorials, vendor blogs, and conference talks. At one end of the
    spectrum lie dense academic papers and university courses; at the other, vendor certifications tied to a single product. Connecting
    these dots — cutting through the surface to reach the essentials — takes
    deliberate effort. One proven aid is the language of patterns: reusable
    problem-solution pairs that capture the core principle without the brand
    labels. That’s why we belive in investing in exploring, distilling, and
    sharing such patterns — so the industry conversation can shift from “Which
    tool should I learn next?” to “Which underlying principles and patterns
    must I master?”

    In our experience, the good grasp of this common language of patterns
    and principles also strengthens the product-service partnership. Today
    the relationship is often one-way: product teams ship features, service
    teams consume APIs. Product teams decide how to certify an engineer as an
    expert in a product and service teams aim to do those certifications.
    Cloud providers and tool vendors often demand a certain number of
    “certified professionals” before they will recognise a service provider as
    a competent partner. Yet our experience shows little correlation between
    certifications and
    competence
    . The focus on fundamentals pays off when competence is
    most needed: an engineer versed in Raft can untangle a Kubernetes
    control-plane stall that might puzzle several certified admins, and a
    Delta Lake write anomaly can be resolved from first-principles reasoning
    about optimistic-concurrency control instead of searching vendor docs.
    Once developers across roles share the lingua franca of a system’s
    internals, the partnership becomes bidirectional — both sides can
    diagnose, propose, and refine solutions together. Better yet, the
    engineers who have a good grasp of the fundamentals are able to partner
    well with multiple product and platform teams, without needing to have
    product specific training for each product

    An Example Workshop: Breaking silos and building partnerships

    We’ve seen that we can grow the Expert Generalist skill through mentoring
    and exposure to varied ecosystems, but one of the consequences of
    recognizing Expert Generalist as a first-class skill is that we should
    provide training in a similar way that we do with specialist skills. Such
    training currently barely exists in our profession. We’ve begun to fill that
    gap with workshops that are deliberately focused on developing the Expert
    Generalist competence, and we think there should be more training along
    these lines.

    To help stimulate thinking about this, here’s the details of such a workshop,
    aimed at developers to connect Application Development, Data Engineering,
    and DevOps. The workshop views this work through a distributed systems
    lens, shifting attention to shared building blocks and establishing a
    common language across teams. Although this example is developer-centric,
    we think the same principle can be adapted just as effectively to any role that
    benefits from cross-disciplinary insight.

    As we saw earlier, each discipline—Application Development, Data Engineering, and DevOps—faces the same
    distributed-systems realities, yet we still lack a shared language. The key challenges of
    these systems are the same. They must replicate state,
    tolerate partial failures, and still offer consistency guarantees to end users.
    A catalogue of patterns around the implementation of
    partitioning, replication, consistency, and consensus—that lets every
    team talk about the fundamentals without tool-specific jargon is a good start.
    One workshop will not turn people into expert generalists, but it does give them a head-start and a clear
    window into the challenges their peers tackle every day. That visibility lowers the barrier
    to cross-discipline tasks and deepens everyone’s understanding of the products and platforms
    they use.

    The workshop structure – Building the miniature

    One of the challenges in teaching the abstract patterns is that the developers need to do some mental mapping
    to connect the pattern to the product in use. This is why we chose an approach to structure
    the workshops around specific products, but then focus on the patterns that are most relevant
    and using the product as a window into the broader concepts.

    The way we structured the workshops to teach distributed-system patterns, is by coding
    pocket versions of Kafka, Kubernetes, and Delta Lake. The idea is to pick a flagship product
    from each broad area of specialty, and build it step by step. Implementing a flagship system
    in just a few hundred lines flips your perspective from ‘a user’ of a product
    to ‘a builder’. An important mindset shift. To keep the
    exercise grounded in reality, write it in the product’s own language, mirror its file and
    method names, and rely on real infrastructure — ZooKeeper or etcd, an on-disk log, live
    sockets. The result stays close enough to the original to highlight the pivotal design
    choices while still giving you a safe canvas for experimentation. This approach is powerful,
    because each target is often open source, the moment the miniature works, you can open the
    full codebase on GitHub, recognise the directory structure, and feel confident submitting a
    patch. The miniature is not a toy; it is a gateway.

    We have three workshops, one for each of the three systems.

    Build Your Own Kafka — a miniature written in Java.

    We use ZooKeeper for membership and store every message in a single append-only log. Even
    on one node you meet the classic fsync dilemma: flush every write for safety or batch for
    speed.

    Add a second process and you’re suddenly faced with many decisions. You need partition
    leader election, quorum acknowledgements, an in-sync replica list, and a high-water-mark
    so consumers never read uncommitted data. (A cluster-wide controller comes later, once
    multiple partitions appear.) Each mechanism maps to a production feature in Kafka. After
    walking this code you recognise why a broker stalls when a replica slows and know exactly
    which metric to graph next time it happens.

    The takeaway pattern is simple: an append-only log guarded by quorum replication—a design
    you will encounter throughout modern distributed systems.

    Kubernetes from the Inside Out.

    Start by writing a controller that watches a JSON document in etcd, then calls reconcile()
    until the local Docker daemon reflects that desired state. Very quickly you have to choose
    how to list running containers, queue events, and keep spec and status distinct—exactly
    the concerns that dominate the Kubernetes code base.

    Add real failure cases and things get tricky. What should the controller do when a
    container exits? How does a Postgres container keep its data? Each decision forces you to
    reason about restart policies and persistent-volume claims. After that exercise, the dense
    Go structs in kube-controller-manager feel like natural continuations of a model you
    already understand. The core learning: the power of a declarative desired state converged
    by
    reconcile loops – the common pattern of orchestration in modern distributed systems

    ACID on Object Storage – A miniature Delta Lake.

    Create a directory of Parquet files and pair it with a text log; each data change appends
    a JSON file naming the new data file. Move this setup into a miniature object store and
    every append becomes its own key-value write, with the Parquet file as the value. To
    handle concurrent writers, wrap the append in an optimistic lock that retries if the log
    tail changes. After a dozen commits start-up drags, so you add a checkpoint file and learn
    first-hand why Delta Lake emits one every N transactions. From there, time-travel queries
    drop out naturally from the log-plus-checkpoint design. The key takeaway, achieving ACID
    guarantees on eventually consistent storage through an immutable transaction log,
    optimistic concurrency, and periodic checkpointing – a pattern vital for modern data
    lakehouses.

    Each miniature leaves you with a concrete pattern — append-only log, reconcile loop,
    optimistic commit—that travels well beyond the original context. When the next new tool
    arrives, you’ll recognise the pattern first and the product name second, which is precisely
    the habit that turns professionals into Expert Generalists.

    Expert Generalists still need Specialists

    While we’ve spent this article praising the Expert Generalist, we
    simultaneously do not deny the value of specialist knowledge. Even the most
    skilled Expert Generalist may have to spend valuable time figuring out the
    details of how to do something with a new platform. Their knowledge of
    common patterns helps them know what to look for, their skill
    helps them research faster, but it’s still longer than what a specialist
    already knows. Furthermore an Expert Generalist may miss a vital technique
    that’s particular to a domain, essentially because the Expert Generalist
    doesn’t know what they don’t know – a trap a specialist is far less likely
    to fall into. In our experience, a team of Expert Generalists without
    specialist knowledge of the core technology of their work will still get the
    job done, but will be significantly slower than a team with specialist
    skills on board.

    The point here is that to be the most efficient, the team needs some
    specialist skill. There needs to be at least one deep specialist on a team
    for any core technology that the team is working with. But we’ve found that,
    providing the team is collaborating effectively, we don’t need very many. Often
    one or maybe two people is quite enough.

    With someone with specialist knowledge present, a less knowledgeable
    Expert Generalist can quickly ask a question when they are faced with a task
    that needs the depth. Similarly the specialist should review the work of
    less knowledgeable colleagues, so they can spot when folks are taking the
    wrong path and show them the better way.

    We think it is important to have such a specialist available full-time on
    the team. Much of their value comes from being responsive to questions and
    issues as they come up. In this situation, the important cost to monitor is
    the Cost of Delay – the speed of resolving
    questions is much more important that the utilization of the specialists. So
    it’s worth having a full-time specialist even if it means they aren’t fully
    occupied.2

    2:
    This also indicates how to tell if you don’t have enough specialists on
    a team: measure how long it takes to answer questions. This follows
    Reinertsen’s advice to monitor queue sizes.

    All of this does need everyone involved to have right kind of
    collaborative attitudes. The specialist needs to be someone who is keen to
    share their knowledge with everyone else on the team, and is approachable
    with dumb questions. The Expert Generalists need be comfortable
    demonstrating their ignorance, and actually enjoy being told they are doing
    something wrong in an unfamiliar environment. All in all there needs to be
    plenty of psychological safety around.

    And, of course, the people with specialist skills can often be Expert
    Generalists themselves, with the specialty being legs in their T.

    The flip-side of this is the danger of teams that consist only of
    specialists. Things outside their specialty can easily be missed. For
    example a data engineering team that’s full of specialist data engineers can
    miss anything that isn’t specific to data engineering, such as quality
    strategy, release management, and value articulation.

    Expert Generalists in the Age of LLMs

    Large Language Models and tools based on LLMs are growing in prominence.
    We’ve observed that Expert Generalist capabilities are considerably more
    valuable with these LLMs. The relationship between Expert Generalists and
    LLMs is often similar to that between Expert Generalists and specialists in
    a team. Similarly to a specialist, an LLM can rapidly answer questions that
    an Expert Generalist will have when working in a new domain. This
    significantly lowers the barrier for exploring completely new and unfamiliar
    tools, offering a quick way to get started.

    An Expert Generalist, armed with
    a solid grasp of fundamentals and the knack to master principles and
    patterns, can truly harness the power of LLMs. They’re not just asking an
    LLM to write code in a new language; they’re able to ask more insightful
    questions, critically assess the AI-generated suggestions against their
    broader understanding, and adapt those suggestions to fit sound
    architectural patterns. Their curiosity discourages them from simply
    accepting an answer, but to understand how proposed solutions work – which
    is exactly the behavior needed to overcome the unreliability inherent in
    LLM-given advice.

    We’ve noticed that Expert Generalists approach working with LLMs in a
    different way. Rather than looking for “the answer”, they prompt them to
    generate questions, explaining mechanisms, and providing examples and even
    tools that help explore the underlying mechanisms of an idea.

    So, despite the early days of this technology, we think that the rise of
    LLMs will further enhance the importance of skilled Expert Generalists, and
    thus incentivize enterprises to put more effort into identifying,
    and training people with these skills.

    Why Organizations Need Expert Generalists

    The simplest reason why organizations should pay more attention to Expert
    Generalists is the loss of opportunities to staff teams. Finding exactly the
    right kind of specialist limits the candidate pool, either from hiring from
    outside, or by internal transfers. As long as there’s enough specialist
    skill available to assist, Expert Generalists often do as well, indeed often
    better, than adding another specialist.

    But the benefits of Expert Generalists go further than that. Modern
    software systems involve many components, needing collaboration between
    specialties to deliver features to production. Too often we see stifled communication, with
    folks blocked while waiting on dependent teams to schedule necessary work.
    Lots of these queues between teams impedes flow, slowing down the release of
    valuable features.

    Expert Generalists can unplug the pipes. Sometimes they do this by making
    the interaction smoother due to their overlapping skills, sometimes they
    know enough to do some of these dependent tasks themselves. Indeed one of the
    greatest values an Expert Generalist brings is the ability to Get Things
    Done. The customer-focus drives a good Expert Generalist to use their
    collaborativeness, curiosity, and skills blend to drive features to
    completion. If it requires crossing competency boundaries, they will find a
    way to do it. If they need to rapidly acquire some deeper skills, they will do
    so. They do risk taking on more than they can chew in the process, but that
    ability to close the deal is often imperative in getting critical software
    out the door.

    Expert Generalists are particularly valuable at
    working across the specialist skill boundaries, handling interactions and
    filling in gaps.

    The ability to see complex systems across their full breadth can be
    essential when things go wrong. Faults are often not in the depth of a
    single technology, but in the implicit interactions between them. If
    specialists can’t see the whole picture, they easily miss what falls between
    the gaps.

    The presence of Expert Generalists crossing the competency boundaries
    can also increase knowledge transfer between competency groups, increasing
    everyone’s sympathy for related domains. This mechanism also encourages
    specialists to explore the Expert Generalist skill for themselves.

    Specialists tend to use their familiar tool in contexts where it doesn’t
    make sense. We can’t fault them for that, if you’ve never seen a
    screwdriver, you’ll naturally reach for a hammer first. Expert Generalists
    are more likely to pick appropriate tools. There is a risk there, of
    introducing too many tools into an environment. Sometimes it’s better to use
    a familiar-but-inferior tool, than to introduce a complicated tool for a
    narrow task that’s a burden once the Expert Generalist moves on. A wise
    Expert Generalist will take that factor into account.

    The broad view that Expert Generalist develops naturally leads them
    towards leadership roles. Crossing specialties encourages them to develop
    communication skills, particularly skills on explaining different
    disciplines to each other. Collaboration naturally grows relationships with
    key people around an organization. Customer-focus, Getting Things Done,
    build credibility with business leadership. Organizations that take
    deliberate steps to nurture Expert Generalists can reap the reward by
    growing technologists with a strategic perspective, without necessarily
    pushing them into management tracks.

    All that said, despite the fact that we are clearly big proponents of
    Expert Generalists, there are downsides. Perhaps the greatest is that
    although we’ve found it possible to assess people for their Expert
    Generalist skill, it’s a difficult task, often requiring intensive
    participation from known-capable Expert Generalists. Years on
    the job, quizzes, and certifications are much easier tests to administer
    (although we are cynical about how they relate to delivering value).

    A team full of Expert Generalists, but without particular skills for the
    central domains and platforms they are working on, will be less productive –
    at least until the Expert Generalists develop those skills. As we mentioned
    earlier, it’s important to have someone with those deep skills on the team,
    who can either be specialist in that domain or an Expert Generalist who has
    that as one of the legs in their “T”.

    All in all, we’ve seen so many of our colleagues develop their Expert
    Generalist skill, without the name, and build upon it to be critical parts
    of successful technology and business initiatives. They are the people we
    have learned from, the people our clients go to with problems to solve and
    opportunities to exploit. Our hope with this article is that more people in
    our profession (and perhaps others) will start to recognize “Expert
    Generalist” as a first-class skill, and put more effort in describing its
    characteristics, how to assess it, and how to grow it. We believe that
    giving this skill proper recognition can do much to improve the practice of
    our profession.

    Takeaways

    • Expert Generalists share several key traits
      • Curiosity
      • Collaborativeness
      • Customer-focus
      • Favoring fundamental knowledge
      • A blend of specialist and generalist skills
      • Sympathy for related domains
    • Teams should blend Expert Generalists with a few key specialists
    • Expert Generalist skills are enhanced by LLMs
    • Expert Generalists ensure complex tasks get done
    • We need to treat Expert Generalist as a first class skill
      • Evaluate people’s skill as an Expert Generalist in hiring and
        promotion
      • Develop training just as much as for specialist skills



    Source: Martin Fowler.

  • The Gap Strikes Back: Now Stylable

    The Gap Strikes Back: Now Stylable

    July 1, 2025
    Software

    Four years ago, I wrote an article titled Minding the “gap”, where I talked about the CSS gap property, where it applied, and how it worked with various CSS layouts.

    At the time, I described how easy it was to evenly space items out in a flex, grid, or multi-column layout, by using the gap property. But, I also said that styling the gap areas was much harder, and I shared a workaround.

    However, workarounds like using extra HTML elements, pseudo-elements, or borders to draw separator lines tend to come with drawbacks, especially those that impact your layout size, interfere with assistive technologies, or pollute your markup with style-only elements.

    Today, I’m writing again about layout gaps, but this time, to tell you all about a new and exciting CSS feature that’s going to change it all. What you previously had to use workarounds for, you’ll soon be able to do with just a few simple CSS properties that make it easy, yet also flexible, to display styled separators between your layout items.

    There’s already a specification draft for the feature you can peruse. At the time I’m writing this, it is available in Chrome and Edge 139 behind a flag. But I believe it won’t be long before we turn that flag on. I believe other browsers are also very receptive and engaged.

    Displaying decorative lines between items of a layout can make a big difference. When used well, these lines can bring more structure to your layout, and give your users more of a sense of how the different regions of a page are organized.

    Introducing CSS gap decorations

    If you’ve ever used a multi-column layout, such as by using the column-width property, then you might already be familiar with gap decorations. You can draw vertical lines between the columns of a multi-column layout by using the column-rule property:

    article { column-width: 20rem; column-rule: 1px solid black; }
    Two 1-pixel solid black vertical lines separate a row of three text blocks.

    The CSS gap decorations feature builds on this to provide a more comprehensive system that makes it easy for you to draw separator lines in other layout types.

    For example, the draft specification says that the column-rule property also works in flexbox and grid layouts:

    .my-grid-container { display: grid; gap: 2px; column-rule: 2px solid pink; }
    A 2-pixel solid light pink vertical line separates two side-by-side text blocks.

    No need for extra elements or borders! The key benefit here is that the decoration happens in CSS only, where it belongs, with no impacts to your semantic markup.

    The CSS gap decorations feature also introduces a new row-rule property for drawing lines between rows:

    .my-flex-container { display: flex; gap: 10px; row-rule: 10px dotted limegreen; column-rule: 5px dashed coral; }
    Six items flowing horizontally in two rows in a flex container, separated by 5-pixel dashed coral-colored vertical lines and a single 10-pixel dotted lime-green line between the two rows.

    But that’s not all, because the above syntax also allows you to define multiple, comma-separated, line style values, and use the same repeat() function that CSS grid already uses for row and column templates. This makes it possible to define different styles of line decorations in a single layout, and adapt to an unknown number of gaps:

    .my-container { display: grid; gap: 2px; row-rule: repeat(2, 1px dashed red), 2px solid black, repeat(auto, 1px dotted green); }
    Seven text blocks stacked vertically separated by horizontal lines that are styled differently.

    Finally, the CSS gap decorations feature comes with additional CSS properties such as row-rule-break, column-rule-break, row-rule-outset, column-rule-outset, and gap-rule-paint-order, which make it possible to precisely customize the way the separators are drawn, whether they overlap, or where they start and end.

    And of course, all of this works across grid, flexbox, multi-column, and soon, masonry!

    Browser support

    Currently, the CSS gap decorations feature is only available in Chromium-based browsers.

    The feature is still early in the making, and there’s time for you all to try it and to provide feedback that could help make the feature better and more adapted to your needs.

    If you want to try the feature today, make sure to use Edge or Chrome, starting with version 139 (or another Chromium-based browser that matches those versions), and enable the flag by following these steps:

    1. In Chrome or Edge, go to about://flags.
    2. In the search field, search for Enable Experimental Web Platform Features.
    3. Enable the flag.
    4. Restart the browser.

    To put this all into practice, let’s walk through an example together that uses the new CSS gap decorations feature. I also have a final example you can demo.

    Using CSS gap decorations

    Let’s build a simple web page to learn how to use the feature. Here is what we’ll be building:

    Webpage titled My Personal Site in the header above a horizontal navigation and a staggered, masonry-like layout of text and images with thin lines between them. The design is in black and white.

    The above layout contains a header section with a title, a navigation menu with a few links, a main section with a series of short paragraphs of text and photos, and a footer.

    We’ll use the following markup:

    <body> <header> <h1>My personal site</h1> </header> <nav> <ul> <li><a href="#">Home</a></li> <li><a href="#">Blog</a></li> <li><a href="#">About</a></li> <li><a href="#">Links</a></li> </ul> </nav> <main> <article> <p>...</p> </article> <article> <img src="cat.jpg" alt="A sleeping cat."> </article> <article> <p>...</p> </article> <article> <img src="tree.jpg" alt="An old olive tree trunk."> </article> <article> <p>...</p> </article> <article> <p>...</p> </article> <article> <p>...</p> </article> <article> <img src="strings.jpg" alt="Snow flakes falling in a motion blur effect."> </article> </main> <footer> <p>© 2025 Patrick Brosset</p> </footer> </body>

    We’ll start by making the <body> element be a grid container. This way, we can space out the <header>, <nav>, <main>, and <footer> elements apart in one go by using the gap property:

    body { display: grid; gap: 4rem; margin: 2rem; }

    Let’s now use the CSS gap decorations feature to display horizontal separator lines within the gaps we just defined:

    body { display: grid; gap: 4rem; margin: 2rem; row-rule: 1rem solid #efefef; }

    This gives us the following result:

    The basic layout for the webpage. The title is the same but the navigation and layout are both vertically stacked. There are no lines between items in the layout.

    We can do a bit better by making the first horizontal line look different than the other two lines, and simplify the row-rule value by using the repeat() syntax:

    body { display: grid; gap: 4rem; margin: 2rem; row-rule: 1rem solid #efefef, repeat(2, 2px solid #efefef); }

    With this new row-rule property value, we’re telling the browser to draw the first horizontal separator as a 1rem thick line, and the next two separators as 2px thick lines, which gives the following result:

    The webpage is largely the same, but the border between the site title and the navigation is much thicker.

    Now, let’s turn our attention to the navigation element and its list of links. We’ll use flexbox to display the links in a single row, where each link is separated from the other links by a gap and a vertical line:

    nav ul { display: flex; flex-wrap: wrap; gap: 2rem; column-rule: 2px dashed #666; }

    Very similarly to how we used the row-rule property before, we’re now using the column-rule property to display a dashed 2px thick separator between the links.

    Our example web page now looks like this:

    The webpage is still largely the same, but now the navigation is horizontal and there is a light dashed line between the links.

    The last thing we need to change is the <main> element and its paragraphs and pictures. We’ll use flexbox again and display the various children in a wrapping row of varying width items:

    main { display: flex; flex-wrap: wrap; gap: 4rem; } main > * { flex: 1 1 200px; } main article:has(p) { flex-basis: 400px; }

    In the above code snippet, we’re setting the <main> element to be a wrapping flex container with a 4rem gap between items and flex lines. We’re also making the items have a flex basis size of 200px for pictures and 400px for text, and allowing them to grow and shrink as needed. This gives us the following result:

    The webpage layout has been established but there are no lines between items.

    Let’s use CSS gap decorations to bring a little more structure to our layout by drawing 2px thick separator lines between the rows and columns of the layout:

    main { display: flex; flex-wrap: wrap; gap: 4rem; row-rule: 2px solid #999; column-rule: 2px solid #999; }

    This gives us the following result, which is very close to our expected design:

    Thin light lines have been added between the layout of text and images, creating a masonry-like layout. The lines extend all the way across each item like enclosed boxes.

    The last detail we want to change is related to the vertical lines. We don’t want them to span across the entire height of the flex lines but instead start and stop where the content starts and stops.

    With CSS gap decorations, we can easily achieve this by using the column-rule-outset property to fine-tune exactly where the decorations start and end, relative to the gap area:

    main { display: flex; flex-wrap: wrap; gap: 4rem; row-rule: 2px solid #999; column-rule: 2px solid #999; column-rule-outset: 0; }

    The column-rule-outset property above makes the vertical column separators span the height of each row, excluding the gap area, which is what we want:

    Spacing has been added between the layout items so that the lines between them are no longer connected, creating an elegant layout.

    And with that, we’re done with our example. Check out the live example, and source code.

    Learn more

    There’s more to the feature and I mentioned a couple more CSS properties earlier

    • gap-rule-paint-order, which lets you control which of the decorations, rows or columns, appear above the other ones.
    • row-rule-break / column-rule-break, which sets the behavior of the decoration lines at intersections. In particular, whether they are made of multiple segments, which start and end at intersections, or single, continuous lines.

    Because the feature is new, there isn’t MDN documentation about it yet. So to learn more, check out:

    • CSS Gap Decorations Module Level 1 (First Public Working Draft)
    • Microsoft Edge Explainer

    The Edge team has also created an interactive playground where you can use visual controls to configure gap decorations.

    And, of course, the reason this is all implemented behind a flag is to elicit feedback from developers like you! If you have any feedback, questions, or bugs about this feature, I definitely encourage you to open a new ticket on the Chromium issue tracker.


    The Gap Strikes Back: Now Stylable originally published on CSS-Tricks, which is part of the DigitalOcean family. You should get the newsletter.


    Source: CSS-Tricks.

  • Turning User Research Into Real Organizational Change

    Turning User Research Into Real Organizational Change

    July 1, 2025
    Software

    This article is a sponsored by Lyssna

    We’ve all been there: you pour your heart and soul into conducting meticulous user research. You gather insightful data, create detailed reports, and confidently deliver your findings. Yet, months later, little has changed. Your research sits idle on someone’s desk, gathering digital dust. It feels frustrating, like carefully preparing a fantastic meal, only to have it left uneaten.

    There are so many useful tools (like Lysnna) to help us run incredible user research, and articles about how to get the most from them. However, there’s much less guidance about ensuring our user research gets adopted and brings about real change. So, in this post, I want to answer a simple question: How can you make sure your user research truly transforms your organization?

    Introduction

    User research is only as valuable as the impact it has.

    When research insights fail to make their way into decisions, teams miss out on opportunities to improve products, experiences, and ultimately, business results. In this post, we’ll look at:

    • Why research often fails to influence organizational change;
    • How to ensure strategic alignment so research matters from day one;
    • Ways to communicate insights clearly so stakeholders stay engaged;
    • How to overcome practical implementation barriers;
    • Strategies for realigning policies and culture to support research-driven changes.

    By covering each of these areas, you’ll have a clear roadmap for turning your hard-won research into genuine action.

    Typical Reasons For Failure

    If you’ve ever felt your research get stuck, it probably came down to one (or more) of these issues.

    Strategic Misalignment

    When findings aren’t tied to business objectives or ROI, they struggle to gain traction. Sharing a particular hurdle that users face will fall on deaf ears if stakeholders cannot see how that problem will impact their bottom line.

    Research arriving too late is another hurdle. If you share insights after key decisions are made, stakeholders assume your input won’t change anything. Finally, research often competes with other priorities. Teams might have limited resources and focus on urgent deadlines rather than long-term user improvements.

    Communication Issues

    Even brilliant research can get lost in translation if it’s buried in dense reports. I’ve seen stakeholders glaze over when handed 30-page documents full of jargon. When key takeaways aren’t crystal clear, decision-makers can’t quickly act on your findings.

    Organizational silos can make communication worse. Marketing might have valuable insights that product managers never see, or designers may share findings that customer support doesn’t know how to use. Without a way to bridge those gaps, research lives in a vacuum.

    Implementation Challenges

    Great insights require a champion. Without a clear owner, research often lives with the person who ran it, and no one else feels responsible. Stakeholder skepticism also plays a role. Some teams doubt the methods or worry the findings don’t apply to real customers.

    Even if there is momentum, insufficient follow-up or progress tracking can stall things. I’ve heard teams say, “We started down that path but ran out of time.” Without regular check-ins, good ideas fade away.

    Policy And Cultural Barriers

    Legal, compliance, or tech constraints can limit what you propose. I once suggested a redesign to comply with new accessibility standards, but the existing technical stack couldn’t support it. Resistance due to established culture is also common. If a company’s used to launching fast and iterating later, they might see research-driven change as slowing them down.

    Now that we understand what stands in the way of effective research implementation, let’s explore practical solutions to overcome these challenges and drive real organizational change.

    Ensuring Strategic Alignment

    When research ties directly to business goals, it becomes impossible to ignore. Here’s how to do it.

    Early Stakeholder Engagement

    Invite key decision-makers into the research planning phase. I like to host a kickoff session where we map research objectives to specific KPIs, like increasing conversions by 10% or reducing support tickets by 20%. When your stakeholders help shape those objectives, they’re more invested in the results.

    Research Objectives Aligned With Business KPIs

    While UX designers often focus on user metrics like satisfaction scores or task completion rates, it’s crucial to connect our research to business outcomes that matter to stakeholders. Start by identifying the key business metrics that will demonstrate the value of your research:

    • Identify which metrics matter most to the organization (e.g., conversion rate, churn, average order value).
    • Frame research questions to directly address those metrics.
    • Make preliminary hypotheses about how insights may affect the bottom line.

    Develop Stakeholder-Specific Value Propositions

    When presenting user research to groups, it’s easy to fall into the trap of delivering a one-size-fits-all message that fails to truly resonate with anyone. Instead, we need to carefully consider how different stakeholders will receive and act on our findings.

    The real power of user research emerges when we can connect our insights directly to what matters most for each specific audience:

    • For the product team: Show how insights can reduce development time by eliminating guesswork.
    • For marketing: Demonstrate how understanding user language can boost ad copy effectiveness.
    • For executives: Highlight potential cost savings or revenue gains.

    ROI Framework Development

    Stakeholders want to see real numbers. Develop simple templates to estimate potential cost savings or revenue gains. For example, if you uncover a usability issue that’s causing a 5% drop-off in the signup flow, translate that into lost revenue per month.

    I also recommend documenting success stories from similar projects within your own organization or from case studies. When a stakeholder sees that another company boosted revenue by 15% after addressing a UX flaw, they’re more likely to pay attention.

    Research Pipeline Integration

    Integrate research tasks directly into your product roadmap. Schedule user interviews or usability tests just before major feature sprints. That way, findings land at the right moment — when teams are making critical decisions.

    Regular Touchpoints with Strategic Teams

    It’s essential to maintain consistent communication with strategic teams through regular research review meetings. These sessions provide a dedicated space to discuss new insights and findings. To keep everyone aligned, stakeholders should have access to a shared calendar that clearly marks key research milestones. Using collaborative tools like Trello boards or shared calendars ensures the entire team stays informed about the research plan and progress.

    Resource Optimization

    Research doesn’t have to be a massive, months-long effort each time. Build modular research plans that can scale. If you need quick, early feedback, run a five-user usability test rather than a full survey. For deeper analysis, you can add more participants later.

    Addressing Communication Issues

    Making research understandable is almost as important as the research itself. Let’s explore how to share insights so they stick.

    Create Research One-Pagers

    Condense key findings into a scannable one-pager. No more than a single sheet. Start with a brief summary of the problem, then highlight three to five top takeaways. Use bold headings and visual elements (charts, icons) to draw attention.

    Implement Progressive Disclosure

    Avoid dumping all details at once. Start with a high-level executive summary that anyone can read in 30 seconds. Then, link to a more detailed section for folks who want the full methodology or raw data. This layered approach helps different stakeholders absorb information at their own pace.

    Use Visual Storytelling

    Humans are wired to respond to stories. Transform data into a narrative by using journey maps, before/after scenarios, and user stories. For example, illustrate how a user feels at each step of a signup process, then show how proposed changes could improve their experience.

    Regular Stakeholder Updates

    Keep the conversation going. Schedule brief weekly or biweekly “research highlights” emails or meetings. These should be no more than five minutes and focus on one or two new insights. When stakeholders hear snippets of progress regularly, research stays top of mind.

    Interactive Presentations

    Take research readouts beyond slide decks. Host workshop-style sessions where stakeholders engage with findings hands-on. For instance, break them into small groups to discuss a specific persona and brainstorm solutions. When people physically interact with research (sticky notes, printed journey maps), they internalize it better.

    Overcome Implementation Challenges

    Now that stakeholders understand and value your research, let’s make sure they turn insights into action.

    Establish Clear Ownership

    Assign a dedicated owner for each major recommendation. Use a RACI matrix to clarify who’s Responsible, Accountable, Consulted, and Informed. I like to share a simple table listing each initiative, the person driving it, and key milestones.

    When everyone knows who’s accountable, progress is more likely.

    RACI Matrix Example

    Initiative Responsible Accountable Consulted Informed
    Redesign Signup Flow UX Lead Product Manager Engineering, Legal Marketing, Support
    Create One-Pager Templates UX Researcher Design Director Stakeholder Team All Departments

    Build Implementation Roadmaps

    Break recommendations down into phases. For example,

    • Phase 1: Quick usability tweaks (1–2 weeks).
    • Phase 2: Prototype new design (3–4 weeks).
    • Phase 3: Launch A/B test (2–3 weeks).

    Each phase needs clear timelines, success metrics, and resources identified upfront.

    Address Stakeholder Skepticism

    Be transparent about your methods. Share your recruitment screeners, interview scripts, and a summary of analysis steps. Offer validation sessions where stakeholders can ask questions about how the data was collected and interpreted. When they understand the process, they trust the findings more.

    Create Support Systems

    Even when stakeholders agree, they need help executing. Establish mentorship or buddy programs where experienced researchers or designers guide implementation. Develop training materials, like short “how-to” guides on running usability tests or interpreting survey data. Set up feedback channels (Slack channels, shared docs) where teams can ask questions or share roadblocks.

    Monitor And Track Progress

    Establish regular progress reviews weekly or biweekly. Use dashboards to track metrics such as A/B test performance, error rates, or user satisfaction scores. Even a more complicated dashboard can be built using no-code tools and AI, so you no longer need to rely on developer support.

    Realign Policies and Culture

    Even the best strategic plans and communication tactics can stumble if policies and culture aren’t supportive. Here’s how to address systemic barriers.

    Create a Policy Evolution Framework

    First, audit existing policies for anything that blocks research-driven changes. Maybe your data security policy requires months of legal review before you can recruit participants. Document those barriers and work with legal or compliance teams to create flexible guidelines. Develop a process for policy exception requests — so if you need a faster path for a small study, you know how to get approval without massive delays.

    Technical Infrastructure Adaptation

    Technology can be a silent killer of good ideas. Before proposing changes, work with IT to understand current limitations. Document technical requirements clearly so teams know what’s feasible. Propose a phased approach to any necessary infrastructure updates. Start with small changes that have an immediate impact, then plan for larger upgrades over time.

    Build Cultural Buy-In

    Culture shift doesn’t happen overnight. Share quick wins and success stories from early adopters in your organization. Recognize and reward change pioneers. Send a team-wide shout-out when someone successfully implements a research-driven improvement. Create a champions network across departments, so each area has at least one advocate who can spread best practices and encourage others.

    Develop a Change Management Strategy

    Change management is about clear, consistent communication. Develop tailored communication plans for different stakeholder groups. For example, executives might get a one-page impact summary, while developers get technical documentation and staging environments to test new designs. Establish feedback channels so teams can voice concerns or suggestions. Finally, provide change management training for team leaders so they can guide their direct reports through transitions.

    Measure Cultural Impact

    Culture can be hard to quantify, but simple pulse surveys go a long way. Ask employees how they feel about recent changes and whether they are more confident using data to make decisions. Track employee engagement metrics like survey participation or forum activity in research channels. Monitor resistance patterns (e.g., repeated delays or rejections) and address the root causes proactively.

    Conclusions

    Transforming user research into organizational change requires a holistic approach. Here’s what matters most:

    • Strategic Alignment: Involve stakeholders early, tie research to KPIs, and integrate research into decision cycles.
    • Effective Communication: Use one-pagers, progressive disclosure, visual storytelling, regular updates, and interactive presentations to keep research alive.
    • Implementation Frameworks: Assign clear ownership, build phased roadmaps, address skepticism, offer support systems, and track progress.
    • Culture and Policy: Audit and update policies, adapt infrastructure gradually, foster cultural buy-in, and employ change management techniques.

    When you bring all of these elements together, research stops being an isolated exercise and becomes a driving force for real, measurable improvements. Keep in mind:

    • Early stakeholder engagement drives buy-in.
    • Clear research-to-ROI frameworks get attention.
    • Ongoing, digestible communication keeps momentum.
    • Dedicated ownership and phased roadmaps prevent stalls.
    • Policy flexibility and cultural support enable lasting change.

    This is an iterative, ongoing process. Each success builds trust and opens doors for more ambitious research efforts. Be patient, stay persistent, and keep adapting. When your organization sees research as a core driver of decisions, you’ll know you’ve truly succeeded.


    Source: Articles on Smashing Magazine — For Web Designers And Developers.

Previous Page
1 … 899 900 901 902 903 … 911
Next Page
MONIMEGA
  • Instagram
  • Facebook
  • Twitter
Gestisci Consenso
Per fornire le migliori esperienze, utilizziamo tecnologie come i cookie per memorizzare e/o accedere alle informazioni del dispositivo. Il consenso a queste tecnologie ci permetterà di elaborare dati come il comportamento di navigazione o ID unici su questo sito. Non acconsentire o ritirare il consenso può influire negativamente su alcune caratteristiche e funzioni.
Funzionale Always active
L'archiviazione tecnica o l'accesso sono strettamente necessari al fine legittimo di consentire l'uso di un servizio specifico esplicitamente richiesto dall'abbonato o dall'utente, o al solo scopo di effettuare la trasmissione di una comunicazione su una rete di comunicazione elettronica.
Preferenze
L'archiviazione tecnica o l'accesso sono necessari per lo scopo legittimo di memorizzare le preferenze che non sono richieste dall'abbonato o dall'utente.
Statistiche
L'archiviazione tecnica o l'accesso che viene utilizzato esclusivamente per scopi statistici. L'archiviazione tecnica o l'accesso che viene utilizzato esclusivamente per scopi statistici anonimi. Senza un mandato di comparizione, una conformità volontaria da parte del vostro Fornitore di Servizi Internet, o ulteriori registrazioni da parte di terzi, le informazioni memorizzate o recuperate per questo scopo da sole non possono di solito essere utilizzate per l'identificazione.
Marketing
L'archiviazione tecnica o l'accesso sono necessari per creare profili di utenti per inviare pubblicità, o per tracciare l'utente su un sito web o su diversi siti web per scopi di marketing simili.
  • Manage options
  • Manage services
  • Manage {vendor_count} vendors
  • Read more about these purposes
Visualizza le preferenze
  • {title}
  • {title}
  • {title}