<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom" xmlns:thoughtbot="https://thoughtbot.com/feeds/">
  <title>Giant Robots Smashing Into Other Giant Robots</title>
  <subtitle>Written by thoughtbot, your expert partner for design and development.
</subtitle>
  <id>https://robots.thoughtbot.com/</id>
  <link href="https://thoughtbot.com/blog"/>
  <link href="https://feed.thoughtbot.com" rel="self"/>
  <updated>2026-05-20T00:00:00+00:00</updated>
  <author>
    <name>thoughtbot</name>
  </author>
<entry>
  <title>Why thoughtbot is joining the Ruby Alliance</title>
  <link rel="alternate" href="https://thoughtbot.com/blog/why-thoughtbot-is-joining-the-ruby-alliance"/>
  <author>
    <name>Chad Pytel and Ran Craycraft</name>
  </author>
  <id>https://thoughtbot.com/blog/why-thoughtbot-is-joining-the-ruby-alliance</id>
  <published>2026-05-20T00:00:00+00:00</published>
  <updated>2026-05-19T19:17:13Z</updated>
  <content type="html">&lt;p&gt;For more than two decades, Ruby has shaped how we think about software development at thoughtbot. It influenced how we write code, how we collaborate, how we teach, and how we build products alongside our clients. Many of the practices, tools, and ideas that define our company today were either born from or heavily influenced by the Ruby community.&lt;/p&gt;

&lt;p&gt;Ruby also helped shape our careers, friendships, businesses, and opportunities. That’s a big part of why we’re excited to share that thoughtbot is joining the Ruby Alliance alongside Gusto as a founding company.&lt;/p&gt;
&lt;h2 id="what-is-the-ruby-alliance"&gt;
  
    What is the Ruby Alliance?
  
&lt;/h2&gt;

&lt;p&gt;The Ruby Alliance is a new coalition of companies making a long-term financial and operational commitment to the sustainability of Ruby infrastructure and the broader ecosystem.&lt;/p&gt;

&lt;p&gt;The Alliance was created around a simple idea that the long-term health of Ruby should not depend on only a small number of maintainers, volunteers, or companies carrying the responsibility alone. We believe strongly in this idea.&lt;/p&gt;

&lt;p&gt;RubyGems.org, Bundler, ecosystem security, conferences, education, and community initiatives are all part of the shared infrastructure Ruby developers and businesses rely on every day. Sustaining that infrastructure requires more than appreciation. It requires ongoing investment, operational support, and shared stewardship from the organizations that benefit from Ruby’s continued success.&lt;/p&gt;
&lt;h2 id="why-we-joined"&gt;
  
    Why we joined
  
&lt;/h2&gt;

&lt;p&gt;Joining the Ruby Alliance felt like a natural extension of who we already are.&lt;/p&gt;

&lt;p&gt;We’ve always believed in contributing back to the communities and ecosystems that support our work. Over the years, that has included:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authoring and maintaining open source libraries and tools&lt;/li&gt;
&lt;li&gt;Developing custom training and tutorials&lt;/li&gt;
&lt;li&gt;Presenting conference talks and mentorship&lt;/li&gt;
&lt;li&gt;Community organizing and hosting events&lt;/li&gt;
&lt;li&gt;Helping teams build and scale Ruby applications thoughtfully&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ruby infrastructure also has a direct connection to thoughtbot’s history. The creator of RubyGems.org worked at thoughtbot when the project was originally launched as &lt;a href="https://github.com/rubygems/gemcutter"&gt;Gemcutter&lt;/a&gt;, and thoughtbot contributed the original design for the project. Supporting the long-term sustainability of Ruby infrastructure feels deeply aligned with the role Ruby has played in our company’s story.&lt;/p&gt;

&lt;p&gt;Ruby has given us an enormous amount to be thankful for over the last 23 years. Participating in the Ruby Alliance is one way we can help ensure the ecosystem remains healthy, stable, innovative, and community-driven for the long term and we’re grateful to &lt;a href="https://rubycentral.org/"&gt;Ruby Central&lt;/a&gt; for inviting us to participate.&lt;/p&gt;

&lt;p&gt;We believe this is an important time for the Ruby community to thoughtfully shape what the next chapter of stewardship looks like together. We’re proud to be participating early in that effort and excited to collaborate alongside the other companies, maintainers, organizers, and contributors helping move everyone forward.&lt;/p&gt;

&lt;aside class="related-articles"&gt;&lt;h2&gt;If you enjoyed this post, you might also like:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/this-week-in-open-source-6-30"&gt;This Week in Open Source (June 30, 2023)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/happy-new-year"&gt;Happy New Year&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/klang-strongbox"&gt;Klang and Strongbox&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/aside&gt;
</content>
  <summary>thoughtbot is joining the Ruby Alliance, a coalition of companies investing in the long-term sustainability of Ruby infrastructure and the broader ecosystem. Here’s why we believe shared stewardship matters for Ruby’s future.</summary>
  <thoughtbot:auto_social_share>true</thoughtbot:auto_social_share>
</entry>
<entry>
  <title>Summer Special: We’re Taking London Tech Leaders Outdoors</title>
  <link rel="alternate" href="https://thoughtbot.com/blog/summer-special-we-re-taking-london-tech-leaders-outdoors"/>
  <author>
    <name>Chad Pytel and Maria Filimonova</name>
  </author>
  <id>https://thoughtbot.com/blog/summer-special-we-re-taking-london-tech-leaders-outdoors</id>
  <published>2026-05-19T00:00:00+00:00</published>
  <updated>2026-05-14T14:15:03Z</updated>
  <content type="html">&lt;p&gt;This summer, we’re bringing the London Tech Leaders Meetup series outside.&lt;/p&gt;

&lt;p&gt;Over the next few months, we’ll be hosting a series of outdoor summer gatherings across London for founders, CTOs, engineering managers, product leaders, designers, and builders who enjoy having thoughtful conversations with good people, without the pressure of a formal networking event.&lt;/p&gt;

&lt;p&gt;We started these meetups because we wanted to create the kind of events we’d actually want to attend ourselves.&lt;/p&gt;

&lt;p&gt;No sales pitches. No presentations. Just people in tech meeting other people in tech.&lt;/p&gt;

&lt;p&gt;Smaller groups, interesting people, and space for genuine conversations about building products, scaling teams, AI, startups, leadership, engineering culture, and everything in between.&lt;/p&gt;
&lt;h2 id="first-stop-people’s-park-tavern"&gt;
  
    First stop: People’s Park Tavern
  
&lt;/h2&gt;

&lt;p&gt;Our first summer meetup will take place on June 23rd at People’s Park Tavern in London.&lt;/p&gt;

&lt;p&gt;Located right on the edge of Victoria Park, it’s one of our favourite summer spots in the city and the perfect setting for an outdoor tech gathering.&lt;/p&gt;

&lt;p&gt;Whether you’re scaling a startup, leading engineering teams, building products, or simply looking to meet friendly people in tech, we’d love to have you join us.&lt;/p&gt;

&lt;p&gt;Expect relaxed conversations, drinks, summer weather (hopefully), and the kind of networking that doesn’t actually feel like networking.&lt;/p&gt;
&lt;h2 id="why-we’re-doing-this"&gt;
  
    Why we’re doing this
  
&lt;/h2&gt;

&lt;p&gt;A lot of people in tech work remotely now. And while online communities are useful, there’s still something hard to replace about meeting thoughtful people in person.&lt;/p&gt;

&lt;p&gt;Some of the most valuable connections come from sitting outside with a drink after work and talking honestly about the challenges of building products, hiring teams, navigating growth, or figuring out what’s next in tech.&lt;/p&gt;

&lt;p&gt;That’s the energy behind these meetups.&lt;/p&gt;

&lt;p&gt;Intentional, welcoming, and community-driven.&lt;/p&gt;
&lt;h2 id="join-us"&gt;
  
    Join us
  
&lt;/h2&gt;

&lt;p&gt;If this sounds like your kind of evening, we’d love to have you join us.&lt;/p&gt;

&lt;p&gt;You can sign up here: &lt;a href="https://luma.com/c4e6hkqt"&gt;People’s Park Tavern Meetup RSVP&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;We’ll also be announcing more summer meetups soon.&lt;/p&gt;

&lt;p&gt;Looking forward to seeing familiar faces and meeting new ones along the way.&lt;/p&gt;

&lt;aside class="related-articles"&gt;&lt;h2&gt;If you enjoyed this post, you might also like:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/join-us-for-3-days-on-cape-cod"&gt;Join us for 3 days on Cape Cod&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/cape-code"&gt;CAPE CODE&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/probably-not-better-than-adult-space-camp-but-your"&gt;Probably Not Better Than Adult Space Camp but Your Company is More Likely to Pay for It
&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/aside&gt;
</content>
  <summary>This summer, we’re taking London Tech Leaders outdoors with a special series of relaxed meetup gatherings across some of London’s best outdoor venues.</summary>
  <thoughtbot:auto_social_share>true</thoughtbot:auto_social_share>
</entry>
<entry>
  <title>AI and minority languages</title>
  <link rel="alternate" href="https://thoughtbot.com/blog/ai-and-minority-languages"/>
  <author>
    <name>Ferdia Kenny</name>
  </author>
  <id>https://thoughtbot.com/blog/ai-and-minority-languages</id>
  <published>2026-05-18T00:00:00+00:00</published>
  <updated>2026-05-11T12:56:27Z</updated>
  <content type="html">&lt;p&gt;Last week I attended an excellent conference in the Irish consulate in San Francisco titled “&lt;a href="https://minoritylanguages.ai/"&gt;AI &amp;amp; Minority Languages: A Bay Area Perspective&lt;/a&gt;”.&lt;/p&gt;

&lt;p&gt;Our team at thoughtbot speaks over 25 different languages, from Swedish to Bekwarra, so this conference was of particular relevance. Here are my key takeaways from the discussions.&lt;/p&gt;
&lt;h2 id="who-gets-in-the-ark"&gt;
  
    Who gets in the ark?
  
&lt;/h2&gt;

&lt;p&gt;AI poses both an opportunity and an existential risk for minority languages. While these are typically languages whose speakers are fewer than those of another group within a defined area, in this context it more closely relates to languages that are not one of the world’s dominant languages such as English, French, German, Spanish, Russian or Chinese (including the likes of Mandarin and Cantonese).&lt;/p&gt;

&lt;p&gt;On the one hand, new AI-powered tools like &lt;a href="https://www.abair.ie/"&gt;Abair&lt;/a&gt; from Trinity College Dublin (for Irish/Gaeilge), &lt;a href="https://projecteaina.cat/en/"&gt;Aina&lt;/a&gt; (for Catalan) and &lt;a href="https://vaani.iisc.ac.in/"&gt;Project Vaani&lt;/a&gt; (for a whole range of Indian languages and dialects), can create new ways for people to interact with minority languages and dialects.&lt;/p&gt;

&lt;p&gt;But the picture is not all rosy. AI is accelerating the loss of languages with 97% of the world’s languages now being categorised as “in danger”.&lt;/p&gt;

&lt;p&gt;That is partly because language is not just about how many people speak it. It’s about usability; what you can achieve using your language. If a minority language is no longer useful in the modern world, it becomes associated with the past. And languages that are associated with the past die out. With the proliferation of AI, for the first time in history, you could have a language spoken by 20 million people that could actually be in danger because it’s about to be drowned out in the present technological wave.&lt;/p&gt;

&lt;p&gt;The old global divide was about access; do you have a device, a connection, an account? The new divide is around quality. If a doctor can use technology to get decision support in English but a doctor looking for support in Swahili gets only noise, the language is going to be in danger.&lt;/p&gt;

&lt;p&gt;We’re at an inflection point and the implications of not making it into the ark are profound.&lt;/p&gt;
&lt;h2 id="what-are-the-problems"&gt;
  
    What are the problems?
  
&lt;/h2&gt;
&lt;h3 id="biased-data"&gt;
  
    Biased data
  
&lt;/h3&gt;

&lt;p&gt;The current imbalances largely occur due to gaps in the data. &lt;a href="https://www.economist.com/science-and-technology/2024/01/24/why-ai-needs-to-learn-new-languages"&gt;93% of ChatGPT3’s training data was in English&lt;/a&gt;. Therefore, the language you speak determines your access to and effectiveness with the technology. If the data used to train models is only in a handful of primary languages, we will have less diversity and fewer useful living languages.&lt;/p&gt;
&lt;h3 id="defining-success-in-different-languages"&gt;
  
    Defining success in different languages
  
&lt;/h3&gt;

&lt;p&gt;Public success metrics for performance in general reasoning models nearly always relate to how proficient a model is &lt;em&gt;in English&lt;/em&gt;. But if you assess a model in terms of multilingual performance, the success rate is much lower.&lt;/p&gt;

&lt;p&gt;For example, &lt;a href="https://artificialanalysis.ai/models/multilingual?language=en%2Ces%2Cmy%2Cbn%2Cyo"&gt;Claude Sonnet 4.5 performs at 94% in general reasoning in English, but at only 76% in Yoruba&lt;/a&gt;. That is quite a disparity, and it likely increases when compared to even more marginalised languages.&lt;/p&gt;

&lt;p&gt;Furthermore, &lt;a href="https://arxiv.org/pdf/2412.03304"&gt;28% of questions that are asked of an LLM require culturally sensitive knowledge&lt;/a&gt;, which becomes increasingly difficult to accommodate the more marginalised a language is.&lt;/p&gt;
&lt;h3 id="accessibility"&gt;
  
    Accessibility
  
&lt;/h3&gt;

&lt;p&gt;Language is subtle and nuanced. There can be a difference between accuracy and understandability. An AI system can be technically correct, but it still might miss out on nuances in different languages.&lt;/p&gt;

&lt;p&gt;A simple example is that an AI system might say 25%, whereas humans might more commonly say “one in four”. It’s the same outcome, but expressed differently. Humans also use metaphors whereas AI tends to rely on literal descriptions. The question isn’t whether AI can do something, but how does AI communicate meaning.&lt;/p&gt;

&lt;p&gt;A humorous example of this failing came during an Eleven Labs demo of an AI voice product which was tasked with creating some Irish folk tunes. While it completed the task well, the voice agent, despite speaking in the voice of an American man, decided to name itself “Aoife”. For those who don’t know, Aoife is a very popular Irish girls name. The system clearly knew enough to select an Irish name, but it clearly didn’t understand the name itself. It missed the nuance.&lt;/p&gt;
&lt;h3 id="computational-power"&gt;
  
    Computational power
  
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.linkedin.com/in/asrikun/"&gt;Dr. Mochamed Asri&lt;/a&gt; brought up one of the most fascinating issues discussed during the conference. He explained that, while models might be getting better, the tokeniser is seriously lagging behind. It focuses on English, and it needs to get much better to bring parity to different languages.&lt;/p&gt;

&lt;p&gt;Over 90% of model training data is in English. Because of this familiarity, it’s easy for the LLM to assign a single token to words. For example, the word “community” in English registers as a single token. But the word “masyarakat”, which is Japanese for the same word “community”, because it is not recognised, gets split into 4 different parts; “mas”, “ya”, “ra” and “kat”. That’s four tokens, which means four times the computational power, for the same meaning.&lt;/p&gt;
&lt;h3 id="energy-gap"&gt;
  
    Energy gap
  
&lt;/h3&gt;

&lt;p&gt;Computing power leads us on to the energy gap issue. Unfortunately, the countries with the greatest need for extra compute power because of the tokeniser imbalance, are the ones least equipped to provide the necessary energy, which prevents countries from making their own models.&lt;/p&gt;

&lt;p&gt;For comparison, the United States has a population of ~350 million people and &lt;a href="https://www.statista.com/statistics/184246/us-electric-generating-capacity-from-2000/"&gt;an electrical capacity of ~1,200 GW&lt;/a&gt;. Indonesia, with a population of ~288 million people, &lt;a href="https://www.statista.com/statistics/865232/indonesia-electricity-generation-capacity/"&gt;has a capacity of only ~80GW&lt;/a&gt;. Kenya, with a population of ~59 million people has only &lt;a href="https://www.statista.com/statistics/1240951/installed-capacity-of-electricity-generation-in-kenya/"&gt;~4GW of electrical capacity&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="bystander-problem"&gt;
  
    Bystander problem
  
&lt;/h3&gt;

&lt;p&gt;AI can contribute to bystander syndrome. We might think someone else will work on adding and protecting our languages, that there’s no need for me to take any action. But the reality is that big frontier models will not do this work for us.&lt;/p&gt;
&lt;h2 id="improving-models-but-more-to-do"&gt;
  
    Improving models but more to do
  
&lt;/h2&gt;

&lt;p&gt;The frontier models are improving, which is a step in the right direction.&lt;/p&gt;

&lt;p&gt;During his talk, Zach Parent of OpenAI, demonstrated how ChatGPT 3.5 turbo performed much worse than ChatGPT 5.5 at Irish language tasks. The test demo was simple; he asked each version of the model a question in English but asked it to give the answer in Irish. Then he asked both to translate the Irish answer back to English. 5.5 gave a pretty accurate response, while 3.5 outputted mostly gibberish.&lt;/p&gt;

&lt;p&gt;This demonstrated that over 3 years, it has improved a lot. But Zach highlighted that while everyone focuses on training the model, the other steps in the process are where the gaps exist.&lt;/p&gt;

&lt;p&gt;The models improve by putting more data through them. The process needs to start with Automatic Speech Recognition, or ASR, to turn spoken word into text. The model then needs to understand the inputs before applying Text To Speech (TTS), followed by a real-time agent to make it conversational.&lt;/p&gt;

&lt;p&gt;Each of these steps requires high quality data that is not easy to capture. In particular, there is a real gap when moving from text to voice.&lt;/p&gt;
&lt;h2 id="how-to-fix-it"&gt;
  
    How to fix it
  
&lt;/h2&gt;
&lt;h3 id="high-quality-data"&gt;
  
    High Quality data
  
&lt;/h3&gt;

&lt;p&gt;We need more high quality data and representation in the models. This is not just about having more translations, but actual high quality input.&lt;/p&gt;

&lt;p&gt;Processes like transcribing voice to text is manual, it’s labour intensive and requires native speakers. Once it’s done, that data can get ingested and the model gets trained on it.&lt;/p&gt;
&lt;h3 id="government-support"&gt;
  
    Government support
  
&lt;/h3&gt;

&lt;p&gt;That transcription piece won’t just happen on its own, it can’t just be automated. Governments, non-profits and universities need to step in to support this work.&lt;/p&gt;
&lt;h3 id="small-language-models-slms"&gt;
  
    Small Language Models (SLMs)
  
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.ibm.com/think/topics/small-language-models"&gt;Small language models&lt;/a&gt; offer some promise, especially in relation to compute power and the energy gap. Again, governments will need to provide supports to build SLMs and edge deployments.&lt;/p&gt;
&lt;h3 id="improved-tokeniser"&gt;
  
    Improved tokeniser
  
&lt;/h3&gt;

&lt;p&gt;Even as the models improve, we won’t get language parity until the tokeniser improves and becomes more diverse, reducing compute power constraints for minority languages.&lt;/p&gt;
&lt;h3 id="accountability"&gt;
  
    Accountability
  
&lt;/h3&gt;

&lt;p&gt;As a society, we need to hold frontier models more accountable when they publish performance metrics. Applying pressure to disclose cross language performance metrics will help highlight the gap and, hopefully, will lead to further action.&lt;/p&gt;
&lt;h3 id="get-creative"&gt;
  
    Get creative
  
&lt;/h3&gt;

&lt;p&gt;One of the most unique, creative ways to drive a minority language and culture into the modern age came from the Iñupiat, an Alaska Native people. &lt;a href="https://nativefederation.org/2019/03/gloria-oneill/"&gt;Gloria O’Neill&lt;/a&gt; of the Cook Inlet Tribal Council explained how they created a puzzle-platformer video game called &lt;a href="https://www.neveralonegame.com/"&gt;Never Alone (Kisima Inŋitchuŋa)&lt;/a&gt; which is based on a traditional story passed down through generations.&lt;/p&gt;

&lt;p&gt;The game was created in partnership with E-Line Media. With over 15 million players worldwide, the reception of Never Alone: Kisima Ingitchuna launched a movement of social-impact video games. It went on to win a Peabody Award for its storytelling and a BAFTA for Best Debut Game. Eight years later, Never Alone 2 is on the cusp of being released.&lt;/p&gt;

&lt;p&gt;I was inspired and blown away by the totally outside-the-box thinking of the Iñupiat people to preserve their language and culture.&lt;/p&gt;
&lt;h2 id="a-closing-thought"&gt;
  
    A closing thought
  
&lt;/h2&gt;

&lt;p&gt;AI has endangered more languages than ever before. However, there are still ways that we, as minority language speakers, can preserve our languages. We can create the high quality data required to train the models, push corporations and governments to accommodate and support minority languages, or think completely differently about how to make our language relevant in the AI age.&lt;/p&gt;

&lt;p&gt;We are at an inflection point and we need to take ownership and accountability to get our languages onto the ark.&lt;/p&gt;

&lt;aside class="related-articles"&gt;&lt;h2&gt;If you enjoyed this post, you might also like:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/how-to-use-chatgpt-to-find-custom-software-consultants"&gt;How to Use ChatGPT to Find Custom Software Consultants&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/using-machine-learning-to-answer-questions-from-internal-documentation"&gt;Using Machine Learning to Answer Questions from Internal Documentation&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/diversity-equity-inclusion-and-building-great-teams-one-recruiter-s-rambling-thoughts-on-inclusive-hiring"&gt;Diversity, Equity, Inclusion and Building Great Teams - One Recruiter’s Rambling Thoughts on Inclusive Hiring&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/aside&gt;
</content>
  <summary>How AI creates both opportunities and existential risks for minority languages, and what we can do to protect them.</summary>
  <thoughtbot:auto_social_share>true</thoughtbot:auto_social_share>
</entry>
<entry>
  <title>6 key insights from Startup Grind Global 2026</title>
  <link rel="alternate" href="https://thoughtbot.com/blog/6-key-insights-from-startup-grind-global-2026"/>
  <author>
    <name>Ferdia Kenny</name>
  </author>
  <id>https://thoughtbot.com/blog/6-key-insights-from-startup-grind-global-2026</id>
  <published>2026-05-15T00:00:00+00:00</published>
  <updated>2026-05-11T12:54:13Z</updated>
  <content type="html">&lt;p&gt;Last week I attended &lt;a href="https://www.startupgrind.tech/agenda?utm_source=bevy&amp;amp;utm_medium=homepage"&gt;Startup Grind Global&lt;/a&gt; in Redwood City, CA. I find it can be helpful to get boots on the ground to hear first hand what’s happening in the industry. Here are my six key takeaways, grouped by theme.&lt;/p&gt;

&lt;p&gt;As you can probably guess, there was a lot of AI talk, so please bear in mind there is always going to be some hyperbole and exaggeration at conference talks; it benefits people to big up their industry. The core concepts shared in our &lt;a href="https://youtube.com/playlist?list=PL8tzorAO7s0g1yRO1qDZJemq8fI1gr3eE&amp;amp;si=k_di_aRbISvVZfA4"&gt;“AI for Business” livestream series&lt;/a&gt; still ring true; start with a problem you want to solve, look at your processes from end-to-end and then look at tools that can help you.&lt;/p&gt;

&lt;p&gt;Recordings of all the talks are available on &lt;a href="https://www.youtube.com/@StartupGrind/videos"&gt;Startup Grind’s YouTube&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src="https://images.thoughtbot.com/9678epx8zi8w786aqwbiyow1kake_SG%202026%20Justin%20Khan.jpg" alt='A dark auditorium at the startup grind conference. Two men are on stage with a large screen behind them and a small "s" and "g" red sign on the right of the stage'&gt;&lt;/p&gt;
&lt;h2 id="pace-of-change-in-ai"&gt;
  
    Pace of change in AI
  
&lt;/h2&gt;

&lt;p&gt;You don’t need to spend long walking the streets of San Francisco to see that change is afoot. The pace of this change is what surprised me most though, with many speakers at Startup Grind labelling companies formed pre 2022 as “legacy companies”.&lt;/p&gt;

&lt;p&gt;It certainly feels like a land-grab is underway with enterprises under pressure from their boards to pick their AI tools in the next 6-9 months. It’s accelerating, and AI-native companies seem to have an edge (although I believe some of this is smoke and mirrors).&lt;/p&gt;

&lt;p&gt;What seems to be more concrete is that &lt;a href="https://www.youtube.com/watch?v=LYAyTCpiUcg"&gt;we’re moving from “rented intelligence” to “owned intelligence”&lt;/a&gt;. Large frontier models have been used as a general purpose solution to solve many problems. Now though, smaller models trained on specific customer data are coming to the fore. This is because you don’t need frontier level intelligence to solve a lot of tasks. The question is not which model is the smartest, but which model is the most efficient at completing a task without compromising quality.&lt;/p&gt;

&lt;p&gt;The future is likely some combination of the two approaches. Some problems will be solved by large frontier models, but many others will be better suited to models that are trained specifically on your own customer data. &lt;strong&gt;Therefore, it is important to own the stack; the model and the data.&lt;/strong&gt; That’s the most valuable layer, and you need to own it.&lt;/p&gt;
&lt;h2 id="what-still-matters"&gt;
  
    What still matters
  
&lt;/h2&gt;

&lt;p&gt;One thing I heard consistently across most talks is that taste and judgement are the most valuable skills to have in this rapidly changing space.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://www.youtube.com/watch?v=7FuGwn8ec4E"&gt;You may have expertise in a specific tool or process&lt;/a&gt;, but if that workflow gets replaced or automated, those expertise become less valuable. However, even if we reach a point where an individual is managing a team of productive agents, there could be even more work for you to do on the back of all that output. &lt;a href="https://www.youtube.com/watch?v=269Ab1fzsww"&gt;You’re going to have to make those critical judgement calls for all the agents’ work&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;So it’s important to make AI work for you, not the other way around. It’s a tool, but you need to make the decisions. Being opinionated helps in this regard. And if you want to explore some of thoughtbot’s strongly held opinions, &lt;a href="https://www.youtube.com/playlist?list=PL8tzorAO7s0hll4B93utRIbXI1b9pRdj-"&gt;check out “The opinionated thoughtbotter” series&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="marketing-amp-pricing"&gt;
  
    Marketing &amp;amp; Pricing
  
&lt;/h2&gt;

&lt;p&gt;It can also be challenging to market your company in such a fluid environment where new work is being shipped constantly. How do you keep a consistent message? Well, the best companies are now shipping fast and iteratively, &lt;a href="https://youtu.be/7FuGwn8ec4E?si=AbyPmkbNsJhbU9gt"&gt;but the narrative around their brand always stays the same&lt;/a&gt;. It’s consistent and is tied to the same company mission.&lt;/p&gt;

&lt;p&gt;Your product marketing can be more functional but your brand marketing needs to be emotive; it’s about how you make people feel. The best marketing focuses on the problem, not the solution.&lt;/p&gt;

&lt;p&gt;In terms of pricing, consumption based pricing is all the rage currently, while people have been predicting the downfall of SaaS for the last couple of years. But the sentiment I heard is that the pendulum will probably swing back to some form of bundle pricing because consumption based pricing is hard for enterprises to control. The trick here will be creating different consumption buckets that work for your customers, so the two pricing methods are merging to some degree.&lt;/p&gt;
&lt;h2 id="future-founders"&gt;
  
    Future founders
  
&lt;/h2&gt;

&lt;p&gt;Given this was Startup Grind, a lot of the advice was focused on founders. This is an exciting time to be a founder, &lt;a href="https://www.youtube.com/watch?v=mU0mMcnW6cQ"&gt;comparable to the opportunities that existed around the iPhone in 2010&lt;/a&gt;. As a founder, you have an opportunity to create an entirely new future and to bring customers along for the ride. The next great founders won’t just be bolting AI on something people already use, but they’ll be changing what people do completely. To pull this off, you need to be bold, opinionated and even contrarian.&lt;/p&gt;

&lt;p&gt;Entrepreneurial spirit is in high demand in early stage teams too. With the pace of change, &lt;a href="https://www.youtube.com/watch?v=Plstngz-SGM"&gt;finding people who are resourceful&lt;/a&gt;, hungry and who get things done is more important than specific skills or impressive backgrounds.&lt;/p&gt;

&lt;p&gt;Finally, if you are heading down the fundraising route, it is almost impossible to raise money with just a pitch deck (for software products at least). The conventional wisdom seems to be that, with AI coding agents, you need a working prototype and customers to raise capital.&lt;/p&gt;
&lt;h2 id="agentic-havoc"&gt;
  
    Agentic havoc
  
&lt;/h2&gt;

&lt;p&gt;While agents can be helpful, they can also create devastating problems. One example is supply chain attacks, &lt;a href="https://fortune.com/2026/04/02/mercor-ai-startup-security-incident-10-billion/"&gt;like the recent one at Mercor&lt;/a&gt;. These types of attacks are becoming more prevalent and can be introduced, for example, when someone uses Claude Code to install packages that inadvertently create security issues.&lt;/p&gt;

&lt;p&gt;The advice is to &lt;a href="https://www.youtube.com/watch?v=Plstngz-SGM"&gt;never connect a coding agent to production data&lt;/a&gt; because it can install, run or, worst of all, delete anything. Incident responses, design reviews, and auditing and tracking who made changes &lt;a href="https://youtu.be/v4KX-WfO2YA?si=nTGAF0sKEamKl2kA"&gt;are all becoming even more important with agents&lt;/a&gt; in the mix. Security, therefore, is a real area of opportunity for companies to exploit.&lt;/p&gt;
&lt;h2 id="the-future-of-designers"&gt;
  
    The future of designers
  
&lt;/h2&gt;

&lt;p&gt;As a Product Designer, I was particularly interested in hearing about the future of design at this conference. In the lead up to it, with the release of Claude Design, there have been a lot of click-bait articles and videos online predicting the demise of the design field.&lt;/p&gt;

&lt;p&gt;While the “no UI” concept is a trendy idea, I saw &lt;a href="https://youtu.be/v4KX-WfO2YA?si=nTGAF0sKEamKl2kA"&gt;some pushback against it&lt;/a&gt;. The feeling seems to be that someone, somewhere during the process, will have to do something, so there’s still going to be a need for a clean, human-centered UI. If we reach a point where an individual is managing a fleet of agents, having a simple, easy and beautiful UI for managing these agents will be the frontier of design.&lt;/p&gt;

&lt;p&gt;In terms of UX, in a world where anyone can create anything, the experts actually felt &lt;a href="https://www.youtube.com/watch?v=Plstngz-SGM"&gt;UX is going to be more important than ever&lt;/a&gt;. So good design isn’t going away.&lt;/p&gt;

&lt;p&gt;My favourite talk of the conference was &lt;a href="https://www.youtube.com/watch?v=ju7_5eOiWPI"&gt;a fireside chat&lt;/a&gt; between Karri Saarinen (CEO and co-founder of Linear) and Stephanie Zhan (a Partner in Sequoia Capital). They discussed design and AI. Karri began his career as a designer so I was particularly interested in what he had to say on this topic. While I recommend watching the talk in full, the key takeaways I pulled from it were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Good design is a way to build trust and could be a competitive advantage. It shows you put lots of thought into your product, which is reassuring for potential customers. You still need to ship fast to test, but there’s a balance to be struck. This point was actually made during the Q&amp;amp;A they did after the original talk, so it’s not in the recording above.&lt;/li&gt;
&lt;li&gt;In relation to AI design tools, Karri made the point that even if these tools can generate designs that look good, it doesn’t mean those designs work well. He still uses Figma at the planning stage when he designs because writing something out helps him organise his thoughts. This act gives you some real value that shouldn’t be overlooked in favour of “vibe-designed” applications.&lt;/li&gt;
&lt;li&gt;Karri believes that &lt;a href="https://www.linkedin.com/pulse/output-isnt-design-karri-saarinen-ayhnc/"&gt;output isn’t design&lt;/a&gt;. It’s not the act of producing that is valuable, it’s about understanding the problem well enough to understand what, how and if something should exist. Karri felt there could be a pendulum swing back, moving away from building loads of things quickly and towards being more thoughtful and intentional about what is being built.&lt;/li&gt;
&lt;li&gt;Undoubtedly some aspects of design will change. AI is increasing the floor of design in some areas and automating others. The drawing of rectangles will be less important in future. But Karri made the point that if you don’t understand design you’ll use these AI design tools incorrectly. If you don’t trust AI to do your legal work, then why would you trust it to do design?&lt;/li&gt;
&lt;li&gt;Finally, the default career direction seems to be that design and designers move closer to code. But Karri felt there is an opportunity for ambitious designers to move upstream into leadership positions where they can answer questions like what we should be building, whether we should build something at all, what’s the product direction and so on.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="3-cool-companies"&gt;
  
    3 cool companies:
  
&lt;/h2&gt;

&lt;p&gt;Finally, here are three cool companies that stood out to me from the conference that you may not have heard of. Definitely work checking out!&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://hydram.is/"&gt;Hydram Research&lt;/a&gt; - An Icelandic company building novel, large-scale hardware that makes it more energy efficient to produce steam, which is critical in nearly all material manufacturing processes, from plastics to paper.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://samaya.ai/"&gt;Samaya AI&lt;/a&gt; - As thoughtbot are experts in the regulated industries, including financial services, Samaya caught my eye. Samaya equips financial professionals with secure, market-fluent AI agents to answer questions, deliver insights, and automate workflows.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://condor.pnotp.ai/"&gt;Condor&lt;/a&gt; - An AI-powered early detection system to prevent the spread of wildfires. They claim to reduce response time from between 30 and 120 minutes to between 1 and 10 minutes.&lt;/li&gt;
&lt;/ul&gt;

&lt;aside class="related-articles"&gt;&lt;h2&gt;If you enjoyed this post, you might also like:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/how-to-use-chatgpt-to-find-custom-software-consultants"&gt;How to Use ChatGPT to Find Custom Software Consultants&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/from-idea-to-impact-the-role-of-rapid-prototyping-in-agetech"&gt;From idea to impact: The role of rapid prototyping in AgeTech&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/using-machine-learning-to-answer-questions-from-internal-documentation"&gt;Using Machine Learning to Answer Questions from Internal Documentation&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/aside&gt;
</content>
  <summary>Here are 6 key insights I took from the Startup Grind Global conference 2026 along with 3 cool companies worth checking out!</summary>
  <thoughtbot:auto_social_share>true</thoughtbot:auto_social_share>
</entry>
<entry>
  <title>When to use (and not use) CSS shorthand properties</title>
  <link rel="alternate" href="https://thoughtbot.com/blog/when-to-use-and-not-use-css-shorthand-properties"/>
  <author>
    <name>Elaina Natario</name>
  </author>
  <id>https://thoughtbot.com/blog/when-to-use-and-not-use-css-shorthand-properties</id>
  <published>2026-05-14T00:00:00+00:00</published>
  <updated>2026-05-12T18:35:17Z</updated>
  <content type="html">&lt;p&gt;Ana Tudor &lt;a href="https://bsky.app/profile/anatudor.bsky.social/post/3mkpbqpkr3k2e"&gt;posted about this recently&lt;/a&gt; and I agree: CSS shorthand properties are genuinely useful, but they’re not universally applicable. There are no hard and fast rules here. The question to ask yourself isn’t “can I shorthand this?” but “will someone reading this later, including future me, understand what’s happening?” It comes down to readability and intention, and those are going to look different for everyone. Verbosity isn’t always the enemy.&lt;/p&gt;
&lt;h2 id="what39s-a-shorthand-property"&gt;
  
    What’s a shorthand property?
  
&lt;/h2&gt;

&lt;p&gt;CSS shorthand properties let you set a bunch of related values in a single declaration. &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Cascade/Shorthand_properties"&gt;There are quite a few of them&lt;/a&gt;, some more widely used than others.&lt;/p&gt;

&lt;p&gt;One you may be familiar with is the &lt;code&gt;background&lt;/code&gt; property, which can set the image source, position, size, repetition rules, origin, color, clip threshold, and scroll behavior all at once:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;images&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;my-image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;jpg&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt; &lt;span class="m"&gt;75%&lt;/span&gt; &lt;span class="nb"&gt;no-repeat&lt;/span&gt; &lt;span class="nb"&gt;fixed&lt;/span&gt; &lt;span class="nb"&gt;content-box&lt;/span&gt; &lt;span class="n"&gt;padding-box&lt;/span&gt; &lt;span class="nx"&gt;orange&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Do you know what each of those values corresponds to? Some are obvious. &lt;code&gt;orange&lt;/code&gt; is clearly the background color, and the URL is the image. But the numeric values and the &lt;code&gt;content-box&lt;/code&gt;/&lt;code&gt;padding-box&lt;/code&gt; pair? I have to look those up every single time.&lt;/p&gt;

&lt;p&gt;That’s exactly the kind of situation where I’d rather just write it out.&lt;/p&gt;
&lt;h2 id="when-to-use-it-when-to-skip-it"&gt;
  
    When to use it, when to skip it
  
&lt;/h2&gt;
&lt;h3 id="when-the-ordering-is-intuitive"&gt;
  
    When the ordering is intuitive
  
&lt;/h3&gt;

&lt;p&gt;Directional properties like &lt;code&gt;padding&lt;/code&gt; and &lt;code&gt;margin&lt;/code&gt; are generally fine to shorthand. I’ve committed the ordering to memory (clockwise from the top side), which is what makes them feel safe. The number of values determines what gets applied.&lt;/p&gt;

&lt;p&gt;One value applies to all four sides:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1vw&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Two values split into y-axis then x-axis:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="m"&gt;10%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Four values apply clockwise from the top (top, right, bottom, left):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt; &lt;span class="m"&gt;10rem&lt;/span&gt; &lt;span class="m"&gt;3rem&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The three-value version, though? I always forget that the second value applies to &lt;em&gt;both&lt;/em&gt; right and left. I’d rather write them out individually than trip over that every time I read it back.&lt;/p&gt;

&lt;p&gt;So this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="m"&gt;5rem&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Becomes this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;padding-bottom&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding-left&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding-right&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;padding-top&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;An even more resilient pattern is to use &lt;a href="https://developer.mozilla.org/en-US/docs/Web/CSS/Guides/Logical_properties_and_values"&gt;logical properties&lt;/a&gt; rather than strict directional ones, to account for layout changes across different languages and writing modes. In a left-to-right language like English, &lt;code&gt;padding-inline&lt;/code&gt; maps to left and right, and &lt;code&gt;padding-block&lt;/code&gt; maps to top and bottom. In a right-to-left language like Arabic, the inline axis flips.&lt;/p&gt;

&lt;p&gt;You can get more specific with &lt;code&gt;padding-inline-start&lt;/code&gt;, &lt;code&gt;padding-inline-end&lt;/code&gt;, &lt;code&gt;padding-block-start&lt;/code&gt;, and &lt;code&gt;padding-block-end&lt;/code&gt; to target individual sides. In this example, a left-to-right reader sees &lt;code&gt;2rem&lt;/code&gt; on the left and &lt;code&gt;6rem&lt;/code&gt; on the right; a right-to-left reader sees those values swapped, with the same top and bottom padding either way:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;padding-block&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;padding-inline-start&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;padding-inline-end&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;6rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;border-radius&lt;/code&gt; falls into this category, too. One value applying to all four corners is intuitive enough that shorthand may be fine:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And when we have a variety of values, it’s good to know what we intend with longhand syntax. Sometimes I’ll even write out a zero-ed out property (like border-bottom-right-radius) in this example to communicate exactly what’s needed for this element’s shape:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-top-left-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-top-right-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;8rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-bottom-right-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-bottom-left-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;5px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="when-each-value-is-a-distinct-type"&gt;
  
    When each value is a distinct type
  
&lt;/h3&gt;

&lt;p&gt;&lt;code&gt;transition&lt;/code&gt; and &lt;code&gt;animation&lt;/code&gt; are both shorthands that pack in a lot: duration, easing, delay, and the property being targeted. For simple cases, the shorthand may hold up when each value is a distinct type: a name, a duration, an easing function.&lt;/p&gt;

&lt;p&gt;This example may be easier to parse without ambiguity:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;animation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;spin&lt;/span&gt; &lt;span class="m"&gt;1s&lt;/span&gt; &lt;span class="nb"&gt;ease-in-out&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;But even when the types are distinct, ordering can become its own problem at scale. If one part of a codebase has:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;animation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;spin&lt;/span&gt; &lt;span class="m"&gt;1s&lt;/span&gt; &lt;span class="nb"&gt;ease-in-out&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And another one has:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;animation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;linear&lt;/span&gt; &lt;span class="n"&gt;fade&lt;/span&gt; &lt;span class="m"&gt;2s&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Both are valid, but the inconsistency means you’re re-parsing the order every time you encounter the shorthand. Writing them out individually enforces a consistent structure by default. There’s no order to forget or vary.&lt;/p&gt;

&lt;p&gt;When things get specific with different delays per property or timing, I’ll pull out the individual properties anyways. Ana’s post has a great example of this: if you have multiple properties transitioning at the same duration, writing the full shorthand for each one is just repeating yourself:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;animation&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1s&lt;/span&gt; &lt;span class="nb"&gt;ease-in-out&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;animation-name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;spin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;fade&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;animation&lt;/code&gt; in particular has enough sub-properties (&lt;code&gt;animation-fill-mode&lt;/code&gt;, &lt;code&gt;animation-iteration-count&lt;/code&gt;, &lt;code&gt;animation-direction&lt;/code&gt;, and more) that the shorthand may get unwieldy fast. In practice, once I’m reaching for any of those, I just write them out all individually.&lt;/p&gt;
&lt;h3 id="when-the-syntax-has-its-own-rules"&gt;
  
    When the syntax has its own rules
  
&lt;/h3&gt;

&lt;p&gt;Some shorthands have parsing rules specific enough that you may need to have the spec loaded to read them. These are the ones I almost always write out.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;background&lt;/code&gt; is my go-to example. Unless you’re setting something dead simple like a solid color or a plain image, the full shorthand becomes a puzzle. This is still readable:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;"/images/my-image.jpg"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;no-repeat&lt;/span&gt; &lt;span class="nb"&gt;center&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nb"&gt;cover&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;But once you’re reaching for position offsets, size, origin, and clip together, the shorthand stops carrying its weight:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;"/images/my-image.jpg"&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt; &lt;span class="m"&gt;75%&lt;/span&gt; &lt;span class="nb"&gt;no-repeat&lt;/span&gt; &lt;span class="nb"&gt;fixed&lt;/span&gt; &lt;span class="nb"&gt;content-box&lt;/span&gt; &lt;span class="n"&gt;padding-box&lt;/span&gt; &lt;span class="nx"&gt;orange&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;It fails here not because there are many values, but because the values are opaque without knowing the specific syntax. The &lt;code&gt;/&lt;/code&gt; separates position from size, so &lt;code&gt;1rem 1rem / 50% 75%&lt;/code&gt; isn’t four coordinates, it’s two pairs with different meanings. The &lt;code&gt;content-box&lt;/code&gt; &lt;code&gt;padding-box&lt;/code&gt; pair sets origin and clip in that order, which isn’t something you can always intuit. And that’s a different problem from &lt;code&gt;padding&lt;/code&gt; having too many values, because at least those follow a spatial logic.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-attachment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;fixed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-clip&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;padding-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;orange&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;"/images/my-image.jpg"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;background-origin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;content-box&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-position&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt; &lt;span class="m"&gt;1rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-repeat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;no-repeat&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-size&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;50%&lt;/span&gt; &lt;span class="m"&gt;75%&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;border&lt;/code&gt; is also interesting because it’s a layered shorthand situation: &lt;code&gt;border&lt;/code&gt; is a shorthand, and so is &lt;code&gt;border-left&lt;/code&gt;. The catch is that &lt;code&gt;border&lt;/code&gt; applies to all four sides. You have to go down to the directional properties or the individual sub-properties to set different sides. I usually write &lt;code&gt;border&lt;/code&gt; shorthand when I want a consistent border all the way around, but I’ll break it out when I’m doing something more specific with colors or styles on individual sides.&lt;/p&gt;

&lt;p&gt;You can also write the sub-properties directionally, which is a nice middle ground:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;red&lt;/span&gt; &lt;span class="nx"&gt;blue&lt;/span&gt; &lt;span class="nx"&gt;green&lt;/span&gt; &lt;span class="nx"&gt;yellow&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="nb"&gt;dashed&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;border-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;10px&lt;/span&gt; &lt;span class="m"&gt;3px&lt;/span&gt; &lt;span class="m"&gt;50px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;grid&lt;/code&gt; falls into this category too. The shorthand syntax can be genuinely hard to parse at a glance:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="py"&gt;grid&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;auto-flow&lt;/span&gt; &lt;span class="n"&gt;dense&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nf"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1fr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;This feels easier to read to me:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;grid-auto-flow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;dense&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;grid-auto-rows&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;40px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;grid-template-columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;repeat&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;1fr&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;I write &lt;code&gt;grid&lt;/code&gt; and &lt;code&gt;flex&lt;/code&gt; out fully, almost every time.&lt;/p&gt;
&lt;h3 id="when-you-can’t-retain-it"&gt;
  
    When you can’t retain it
  
&lt;/h3&gt;

&lt;p&gt;Some shorthands just don’t stick, and that’s reason enough to write them out. This is also an honest admission that the thresholds I’m describing aren’t necessarily universal; they’re shaped by what I’ve internalized over time. These are conditions as I experience them and not objective rules.&lt;/p&gt;

&lt;p&gt;I use the longhand syntax for &lt;code&gt;text-decoration&lt;/code&gt; more often than not, even though the individual property names are fairly obvious. I just can’t seem to retain the shorthand structure.&lt;/p&gt;

&lt;p&gt;I always have to think about this:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;underline&lt;/span&gt; &lt;span class="nb"&gt;dotted&lt;/span&gt; &lt;span class="nx"&gt;red&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;And to me, this syntax reads like a list of decisions:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration-line&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;underline&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;text-decoration-style&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;dotted&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="py"&gt;text-decoration-thickness&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;&lt;code&gt;gap&lt;/code&gt; is another directional one: it only deals with row gap and column gap in CSS grid. I usually set the same value for both, so shorthand is fine. But when they’re different, I’ll often write &lt;code&gt;row-gap&lt;/code&gt; and &lt;code&gt;column-gap&lt;/code&gt; separately, mostly because I can never remember which order they go in. I’ve somehow committed &lt;code&gt;padding&lt;/code&gt; and &lt;code&gt;margin&lt;/code&gt; to memory but not this one.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;font&lt;/code&gt; I have literally never written shorthand in my life. It just doesn’t feel natural, especially with &lt;code&gt;font-family&lt;/code&gt;, which often has spaces and fallback stacks and needs its own line anyway.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;font-variant&lt;/code&gt; is a fancy one I reach for when handling special typefaces, usually for turning on ligatures. I can never remember all the individual values, so I write them out. And since I’m typically only tweaking one or two things, it doesn’t add much overhead.&lt;/p&gt;
&lt;h2 id="it’s-not-all-or-nothing"&gt;
  
    It’s not all or nothing
  
&lt;/h2&gt;

&lt;p&gt;You don’t have to choose between going full shorthand or writing out every individual property (spoiler though: &lt;a href="#writing-only-what-you-mean"&gt;I often &lt;em&gt;do&lt;/em&gt; make that choice&lt;/a&gt;). You can mix them by using the shorthand to set a baseline and then applying a specific longhand when you need precision for one value.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;border&lt;/code&gt; is a solid example of this. Set the baseline with shorthand, then override what changes in a variant:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.button&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;2px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="nx"&gt;navy&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.button--destructive&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;red&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The goal is always clarity. Use the version that makes your intent most obvious.&lt;/p&gt;
&lt;h2 id="writing-only-what-you-mean"&gt;
  
    Writing only what you mean
  
&lt;/h2&gt;

&lt;p&gt;Despite what I’ve just written in the &lt;a href="#it%E2%80%99s-not-all-or-nothing"&gt;previous section&lt;/a&gt;, I don’t &lt;em&gt;usually&lt;/em&gt; mix short and longhand and am most often choosing the latter.&lt;/p&gt;

&lt;p&gt;Longhand can communicate scope, and is a key reason I often err on that side rather than brevity.&lt;/p&gt;

&lt;p&gt;Even for something as simple as background color, I’d rather write:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;green&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;Instead of:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;green&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;The shorthand works, but leaves the door open. If I only mean to set a color, &lt;code&gt;background-color&lt;/code&gt; says that plainly and there’s no slot for anything else other than that to accumulate.&lt;/p&gt;

&lt;p&gt;The same logic applies when I want a handful of sub-properties. If I only want a selector to have a background image, color, and repeat value, I write exactly those three properties:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.selector&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;background-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;#b4da55&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="nl"&gt;background-image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nf"&gt;url&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="err"&gt;“&lt;/span&gt;&lt;span class="n"&gt;images&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;my-image&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;jpg&lt;/span&gt;&lt;span class="err"&gt;”&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="nl"&gt;background-repeat&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;no-repeat&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;p&gt;A &lt;code&gt;background&lt;/code&gt; shorthand would create a natural place for other sub-properties to creep in. Someone (including future me) might reasonably add &lt;code&gt;background-size&lt;/code&gt; or &lt;code&gt;background-position&lt;/code&gt; to that declaration later. And while those are fine additions, it signals intention to me when they’re written out as their sub-properties instead of values within the shorthand.&lt;/p&gt;

&lt;p&gt;At the end of the day, shorthand properties are a tool, not a mandate. And if your answer differs from mine: yeah, well you know, that’s just like uh, your opinion, man.&lt;/p&gt;

&lt;aside class="related-articles"&gt;&lt;h2&gt;If you enjoyed this post, you might also like:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/rust-doesn-t-have-named-arguments-so-what"&gt;Rust Doesn’t Have Named Arguments. So What?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/positioning"&gt;Positioning elements on the web with CSS&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/taking-the-most-out-of-stimulus"&gt;Taking the most out of Stimulus.js&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/aside&gt;
</content>
  <summary>A case for verbosity in CSS properties.</summary>
  <thoughtbot:auto_social_share>true</thoughtbot:auto_social_share>
</entry>
<entry>
  <title>Reflections on my conversation with Lord Chris Holmes MBE</title>
  <link rel="alternate" href="https://thoughtbot.com/blog/reflections-on-my-conversation-with-lord-chris-holmes"/>
  <author>
    <name>Sami Birnbaum</name>
  </author>
  <id>https://thoughtbot.com/blog/reflections-on-my-conversation-with-lord-chris-holmes</id>
  <published>2026-05-13T00:00:00+00:00</published>
  <updated>2026-05-08T10:08:14Z</updated>
  <content type="html">&lt;p&gt;One of the best things about hosting the &lt;a href="https://podcast.thoughtbot.com/"&gt;Giant Robots podcast&lt;/a&gt; is that I get to spend time talking to people that might otherwise pass me by. It’s an opportunity to turn casual small talk into meaningful conversation. After meeting Lord Chris Holmes at the DigiGov Expo in 2024, where I was &lt;del&gt;collecting free merch&lt;/del&gt; attending on behalf of thoughtbot, I felt I wanted to dig deeper into our brief chat about AI.&lt;/p&gt;

&lt;p&gt;It only took a year or two but it was a privilege to sit down with Lord Chris Holmes, a member of the UK House of Lords and a former Paralympic swimmer.&lt;/p&gt;

&lt;p&gt;Much has changed across the AI landscape since we first met which made our conversation even more pertinent. Lord Holmes is an active voice in the UK’s conversations around artificial intelligence regulation and digital policy. In Parliament, he has focused heavily on technology and inclusion, including introducing a &lt;a href="https://bills.parliament.uk/bills/3942"&gt;Private Member’s Bill&lt;/a&gt; on AI regulation.&lt;/p&gt;

&lt;p&gt;It’s been nearly two months since &lt;a href="https://podcast.thoughtbot.com/605"&gt;our conversation&lt;/a&gt; which has given me some time to reflect.&lt;/p&gt;

&lt;iframe src="https://player.fireside.fm/v3/DiNRb69N+OV9qNhNE?theme=dark" width="100%" height="200" frameborder="0" scrolling="no"&gt;&lt;/iframe&gt;
&lt;h2 id="we-can39t-do-nothing"&gt;
  
    We can’t do nothing
  
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;The UK is desperately in need of some AI legislation&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This still rings true for me. I am sometimes surprised at the lack of conversation or guidance on such a society-shifting tool as AI. In my opinion, I feel like this is one of the major roles of government, to have a good overview of the big picture. What does society look like? Where is it heading? And what does it mean?&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;There’s been an unfortunate lack of political will when it comes to artificial intelligence in the UK. It’s not a party political point because it was the previous government as much as it was this government. It’s largely been a wait-and-see approach.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I find this slightly infuriating because I feel like these are the conversations that many of us are having around the country.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;So we’re left suboptimal, confusing, opaque, abandoned…
&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;For economic, for social, for psychological reasons, it can’t be allowed to continue. That’s the approach from our UK government.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="pragmatic-approach"&gt;
  
    Pragmatic Approach
  
&lt;/h2&gt;

&lt;p&gt;I found Lord Holmes approach incredibly pragmatic and reasonable. This is by no means a conversation about anti-AI or heavy regulation.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Thus, good for investor, for innovator, for consumer, for customer, for creative, good for the country, and really to wrestle to the ground once and for all, that tedious falsehood that recurs time and again, that you can either have regulation or innovation, you can’t have both. You can, and in fact, it’s the role of parliamentarians and regulators to consider all of these factors, so we can bring about pro-innovation, pro-consumer protection, pro-investor, pro-citizen, pro-creative regulation legislation.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This is not about stifling growth or heavy-handed regulation, and it seems to me that the key to this is a principle based approach that Lord Holmes described, which removes the need for micromanagement.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Critical to take a principles based rather than a prescriptive approach, I think. It’s tempting always to be prescriptive, to think, if we can write everything down to the last dot and comma and spell it out, that will be the best control we can have.
&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;But unfortunately, though beguilingly appealing, it’s an unfortunate trap which traps us at that moment in time, because we don’t live in a static society, technology, economy, polity. None of these things are static. But to have a principles-based approach, which can adapt, develop and be agile through time, through technologies.
&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;We know how to do this. We have the great good fortune of common law, which is well constructed and understood in that sort of approach. So we can.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It’s worth reading the &lt;a href="https://lordchrisholmes.com/ai-regulation-report/"&gt;AI Regulation Report&lt;/a&gt; to get a better understanding of these principles.&lt;/p&gt;
&lt;h2 id="we-have-agency"&gt;
  
    We have agency
  
&lt;/h2&gt;

&lt;p&gt;I do sometimes find myself feeling a sense of fatalism about where this technology might be taking us. I think it would be unnatural not to be concerned at times, when the narrative indicates abrupt change. However, it was somewhat reassuring to be reminded that we are not just passengers in this societal journey.&lt;/p&gt;

&lt;p&gt;We spoke about some of the lack of guidance we felt around social media as a comparison.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What you set out there about social media is well observed. But here’s the thing. None of that was inevitable.
&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;And none of that had anything to do with the technology per se. It was programmed, constructed, operationalized and monetized to do what it now does. Technology didn’t do that.
&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;Humans determined to structure it in that way. Horrific, but not inevitable. Not inevitable at all, and the same with AI.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id="looking-forward-with-optimism"&gt;
  
    Looking forward with optimism
  
&lt;/h2&gt;

&lt;p&gt;I still feel a sense of optimism following our conversation. I love the idea that we can be a part of shaping this technology and removing the existential threat perception that it sometimes brings.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;We have a stunning opportunity to make a success of these technologies, but it’s down to all of us playing our part.
&lt;br&gt;&lt;br&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So much so that we have to take responsibility as well.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If it goes wrong, that won’t be a failure of the technology.
&lt;br&gt;&lt;br&gt;&lt;/p&gt;

&lt;p&gt;That will be a failure of us by not human leading, by everyone not playing their part.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;hr&gt;

&lt;p&gt;I highly recommend taking a listen to the full conversation and if you live in the UK and would like to discuss the regulation of AI with Lord Holmes, you can &lt;a href="https://www.linkedin.com/in/lord-chris-holmes/"&gt;connect with him via LinkedIn&lt;/a&gt;.&lt;/p&gt;

&lt;aside class="related-articles"&gt;&lt;h2&gt;If you enjoyed this post, you might also like:&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/we-build-politics"&gt;I Work in Politics&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/how-to-build-an-ai-startup-and-do-you-really-need-to"&gt;How to Build an AI Startup, and Do You Really Need To?&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://thoughtbot.com/blog/what-llms-are-in-ai"&gt;What is Generative AI and LLMs, really?&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;&lt;/aside&gt;
</content>
  <summary>Two months ago I sat down with Lord Chris Holmes MBE to talk about his AI regulation private members bill.</summary>
  <thoughtbot:auto_social_share>true</thoughtbot:auto_social_share>
</entry>
</feed>
