<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/">
    <channel>
        <title>PJ Onori’s blog</title>
        <link>https://pjonori.blog</link>
        <description></description>
        <lastBuildDate>Sat, 28 Feb 2026 05:38:58 GMT</lastBuildDate>
        <docs>https://validator.w3.org/feed/docs/rss2.html</docs>
        <generator>https://github.com/jpmonette/feed</generator>
        <language>en</language>
        <copyright>All rights reserved 2024, PJ Onori</copyright>
        <category>Software design</category>
        <item>
            <title><![CDATA[Design system contributions work better when everyone knows your name]]></title>
            <link>/posts/design-system-contributions</link>
            <guid isPermaLink="false">/posts/design-system-contributions</guid>
            <pubDate>Fri, 27 Feb 2026 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[Some things work better in a small and cozy environment.]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Design systems are today’s cure and tomorrow’s cause of shitty software]]></title>
            <link>/posts/design-systems-tomorrows-cause-for-shitty-software</link>
            <guid isPermaLink="false">/posts/design-systems-tomorrows-cause-for-shitty-software</guid>
            <pubDate>Mon, 16 Feb 2026 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[Design systems have been propping up quality from collapsing. And in doing so, risk making the collapse even more spectacular.]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[The many layers of dependencies in design systems]]></title>
            <link>/posts/the-many-layers-of-dependencies-in-design-systems</link>
            <guid isPermaLink="false">/posts/the-many-layers-of-dependencies-in-design-systems</guid>
            <pubDate>Fri, 16 Jan 2026 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[Every design system is built on something. For better and for worse.]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Fame, fortune, and podcasting]]></title>
            <link>/posts/fame-fortune-and-podcasting</link>
            <guid isPermaLink="false">/posts/fame-fortune-and-podcasting</guid>
            <pubDate>Wed, 07 Jan 2026 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[A story about my time podcasting and how it's led to untold wealth and international celebrity status.]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Public design systems are worth it]]></title>
            <link>/posts/public-design-systems-are-worth-it</link>
            <guid isPermaLink="false">/posts/public-design-systems-are-worth-it</guid>
            <pubDate>Wed, 03 Dec 2025 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[It’s incredibly valuable to make a design system available to all–no matter what the bean-counters say.]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Design system ambassadors–the goldilocks of collaboration]]></title>
            <link>/posts/design-system-ambassadors</link>
            <guid isPermaLink="false">/posts/design-system-ambassadors</guid>
            <pubDate>Sat, 06 Sep 2025 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>“Ivory tower design system”. That’s a more common four-word combination than people may think. A centralized design system is, by nature, detached from the people using it. It’s a downside that I’ll take every single time. But it’s a real issue.</p>
<p>A detached design system team is risky as hell. Mainly because the symptoms of being cut off from the systems users tend to lag. Once the symptoms begin to show, it can get real bad, real fast.</p>
<p>That’s why design system teams put in a considerable time trying to limit disconnection. Here are the stages of engagement I’ve typically seen:</p>
<p><strong>First stage: Connect with everyone all the time</strong>
The team attempts to join every crit. They check in with every person. Their existence is a meeting. Welcome to Burnoutville. Population, you.</p>
<p>It’s not rocket science to conclude embedding into consumer teams improves connection. It’s also not rocket science to conclude that does not scale. At all.</p>
<p><strong>Second stage: Connect with everyone some of the time</strong>
The next logical conclusion is to meet on demand. That’s a no-brainer, right? In my experience that doesn’t work out too well either. Calendars and schedules fill up and needs typically don’t give a two-week notice. I’ve seen this model atrophy as people become unavailabl. The habit trails off–because the process isn’t habitual. Ad hoc becomes no hoc.</p>
<p><strong>Third stage: Retreat to the fortress of solitude</strong>
The next conclusion is to remove the touch points altogether. Asynchronous communication becomes the primary method. That’s far and away the most cost-effective approach.</p>
<p>But just because something can’t be measured doesn’t mean it isn’t meaningful. Efficiency comes at the cost of connection. Collaboration can wither. It’s not inevitable, but it’s easy to lose touch as a design system team without explicit collaboration.</p>
<h2>How about the right people at the right frequency?</h2>
<p>Design systems at even moderately-sized companies have to be choosy about engagement. There’s too many people to have deep touch points with every single person. It’s not personal, it’s math.</p>
<p>It’s a vibe-killer to say that some people’s opinions are more valuable than others&#8230; But it’s true. Your doctor&#8217;s diagnosis for that rash that won’t go away is way more important than some dude in line for coffee. It feels nice for everyone to have a voice. Design system teams have to prioritize the voices with the right context. That’s not to say others should <em>never</em> be heard. But proportion is important.</p>
<p>Who matters the most? That’s up to every team to decide. I don’t think it’s all about seniority. The qualities I look for engagment, commitment and a strong point of view.</p>
<p>The more focused the group is, the greater chance some real collaboration can occur. Especially if the people collaborating actually want to.</p>
<h2>Now let’s name it something fancy to make it sound important</h2>
<p>I’m not a fan of marketing, but I also am not naive enough about the allure of a fancy title. People are gravitate to the allure of status. Now, that can be bad. You don’t want people joining just to add another corporate merit badge to their collection. But it doesn’t hurt to give this role a little bling to get people’s attention.</p>
<h2>This better be worth everyone’s time</h2>
<p>Ain’t no one has time for nothing no more. Ambassador programs need to have a high bang-for-buck return. It’s important to bias towards adding the least people for the least time for the most return. Not mind-blowing, I know.</p>
<p>Roles and responsibilities for each side need to be simple, clear and actionable. I have some real mixed feelings about RACI/DACI tables, but this may be a good time to make one.</p>
<p>These meetings better be the crispest and leanest ones the team runs. I’m talking agendas, pre-reads, meeting notes, action items. All that. Hell, with any luck, most meetings end early. Keep it short, simple, productive and (ideally) fun.</p>
<p>Each side needs to get something they want–but otherwise can’t. And make no mistake, there’s no shortage of want. Let’s cover the classics:</p>
<h3>Feature teams want support and influence</h3>
<p>The people who use the design system obviously want it to support what they’re working on. That can be hilariously hard to predict ahead of time. On Monday, a team thinks they don’t need a new component. On Tuesday, they do. Immediately. Design system teams can’t pivot that quickly. In large part because it sets the expectation that every request will happen that fast. But, maybe exceptions are made for teams that with ambassadors&#8230; That can be an enticing incentive.</p>
<p>Hopefully, most support isn’t of the “need it yesterday” variety. Less urgent asks can be made during planning cycles. Knowing that a needed component/pattern will be ready ahead of time can be a huge relief for feature teams. Ambassadors can help steer the design system roadmap to ensure what they need makes it in. That can also be an enticing incentive.</p>
<p>Teams also want the system to work <em>for them</em>. Maybe the type ramp isn’t quite handling their needs. Or some button variant needs tuning. Ambassadors have the ear of the design system team to steer the direction to better meet their needs. Granted, not at the cost of other teams’ needs. But it nonetheless gives them a direct line to the people who make system decisions. Also tempting.</p>
<h3>Design system team want visibility and feedback</h3>
<p>Anyone who’s worked on design systems knows how important visibility is. It also feels impossible to get. Having a view into all in-flight design work <em>before development begins</em> is priceless. System teams can get that information from ambassadors. They’re the window into all team-level happenings–without having to join every team crit. That’s gold.</p>
<p>Speaking of visibility, design system teams often struggle with having their comms seen. This isn’t surprising given the flood of information that teams are pelted with. But ambassadors represent a liaison to an org’s collective ear holes. Simple design system cascades from team ambassadors can raise awareness significantly.</p>
<p>Then there’s feedback. Design system teams are often starving for input on new/improved components. Getting eyeballs from feature teams can prove to be a herculean feat. Ambassadors can be that reliable input that’s so very needed.</p>
<h2>Why not scratch each others’ backs?</h2>
<p>The arrangement laid out sounds transactional. Because it is. I don’t think that’s a bad thing. Corporate altruism is self-contradictory. It doesn’t mean people don’t want to work together, but it requires mutual benefit. That&#8217;s why, any ambassador program needs to be scratch both backs.</p>
<p>This tracks at the individual level as well. Expecting volunteers to put in time on top of all their other work is a recipe for low participation. I’m a big believer that there needs to be some carrot for anyone putting in the time. Fancy title aside.</p>
<p>The carrot may be a prerequisite for promotion past a certain level. It could be a yearly bonus. Or something else altogether. But extra work should come with extra compensation.</p>
<p>Will ambassadors solve poor cross-team collaboration. Hardly. But it can be a good start. Like most things, finding the right balance between competing factors is the key. But hey, you might like Burnoutville–who am I to judge?</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[What I learned from making a (second) mobile app]]></title>
            <link>/posts/what-i-learned-making-a-second-mobile-app</link>
            <guid isPermaLink="false">/posts/what-i-learned-making-a-second-mobile-app</guid>
            <pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[Some things just require a second time to fully grok.]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Writing about making a writing app]]></title>
            <link>/posts/writing-about-making-a-writing-app</link>
            <guid isPermaLink="false">/posts/writing-about-making-a-writing-app</guid>
            <pubDate>Wed, 13 Aug 2025 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[What could possibly go wrong?]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Planning and design systems–how much time you got?]]></title>
            <link>/posts/design-system-planning</link>
            <guid isPermaLink="false">/posts/design-system-planning</guid>
            <pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p><img src="crap.svg" alt="A Gnatt chart the spells out the word crap."></p>
<p>There are few things more impactful than good planning. Planning isn’t all that different for design system teams. But I do think is plays a more important role. Design systems are playing with a different time scale than feature teams. Systems think in years whereas feature teams focus more on immediate outcomes. Feature teams are most autonomous in their focus. Design systems thrive on connections.</p>
<p>It&#8217;s those differences that&#8217;s made me such a stickler for planning within a design system team. <strong>I’m no expert at planning.</strong> It’s been one of the most humbling rituals I’ve had the “pleasure” to be a part of. I’ll be in learning-mode until the day I stop working. This post doesn’t have absolute answers. I’m writing this because people in design systems don’t come from a planning background. But we’re on the hook to deliver one nonetheless. I’m hoping this may help someone that’s heading into their first planning cycle.</p>
<p>No one can/should tell another team how they should choose what to plan or prioritize. Especially me. The purpose of this post is focus on _how organizing and constructing your plan.</p>
<h2>Things I’ve picked up along the way</h2>
<p>I’ve learned a lot about planning. The hard way. Not all lessons learned are <em>correct</em>. Your mileage will vary.</p>
<h3>Define work around projects, not people</h3>
<p>It’s easy to have each individual define their focus on defining their own work. I prefer focus thinking around projects.. Teams grow, teams shift, teams can get help from other teams. Define for the work to be done independent of personnel. Once defined, it’s easy to prioritize/scope based on team capacity. Overflow can be cut, planned for the next cycle, or pitched as need for more headcount.</p>
<h3>Build in a capacity buffer</h3>
<p>Support is a big part of what design system teams do. Support takes time. That time takes away from other work. You&#8217;re going to have a big math problem, if you’re planning based on 100% capacity.</p>
<p>In an ideal world a design system team has a measurement of how much time support takes up. Subtract that measurement from the team’s capacity when planning. If that measurement doesn’t exist, ballpark it. If the team is allergic to ball-parking, set aside 20%.</p>
<h3>Planning complexity scales exponentially based on team size</h3>
<p>What works for a team of 5 will begin to buckle at a team of 10. And it’s a hell of a lot more than twice as hard…</p>
<p>The less defined process, roles and responsibilities are, the harder planning will be. Trust me, I know by experience.</p>
<h3>Aim to be cycle ahead or behind</h3>
<p>Design system work benefits from staying out of the product development fray. It’s difficult, if not impossible, for a design system team to keep up with the pivots and shifts of feature teams. It’s equally difficult for feature teams to wait on a system team to deliver a systems-based solution. Those teams think in an ASAP-level–systems teams can&#8217;t.</p>
<p>To combat this, design system teams should either:</p>
<ul>
<li>Plan a cycle ahead to enable feature teams to hit the ground running</li>
<li>Plan a cycle behind to systemize common patterns once the dust settles</li>
</ul>
<h3>Under-promise</h3>
<p>Teams often plan based on what the design system team commits to delivering. Meaning, if you say you’re going to deliver that button component, you <em>better damn well deliver it</em>. A design system team’s goals should be attainable–barring unforeseen circumstances.</p>
<p>Feature teams <em>heavily</em> rely on design systems. When a design system commits to work, there’s a good chance another team has planned around that. Missing a commitment can dramatically impact a feature team’s ability to deliver. It’s critical to make good on commitments. Better to underpromise on what’s possible to make sure it gets done. Overdelivering is always an option.</p>
<h3>Over-communicate</h3>
<p>Did I mention feature teams rely on design systems? That reliance means they need to be constantly kept in the loop. Teams need to be aware of what the design system team plans to take on. They need to be aware of progress. They should be aware when milestones are hit.</p>
<p>Also, plans change. Shit happens. When (not if) those things come up, it’s critical that everyone who relies on the system is aware. Ideally sooner than later.</p>
<h3>It’s not a democratic exercise</h3>
<p>This doesn’t mean that folks shouldn’t aim for consensus, but it isn’t necessary. The people doing the work outvote the team members who aren’t. Unless that work impact others’–that&#8217;ll need coordination.</p>
<p>Planning can be fluffy–especially early in the process. It’s critical to give everyone on the team the ability to push back. Every, “why?” should damn well have an answer. Or at least a hypothesis. If not, that&#8217;s a sign to go rethink decisions.</p>
<h3>There’s never enough time for it</h3>
<p>So make sure to constantly refine your planning process. Starting by <em>documenting your planning process</em>. I’ve also begun to consider planning a nonstop process. The second the team has landed its upcoming plan marks the moment to start organizing the next.</p>
<h3>Plans almost always falls apart to some degree the second the rubber hits the road</h3>
<p>Don’t be precious. It’s important to stick to the plan–until it’s not. What’s the turning point? That’s for everyone to figure out on their own.</p>
<h2>How I currently structure plans</h2>
<p>Most companies I’ve worked for use OKRs to structure plans. They’ve worked fine for me. I&#8217;ve made some small tweaks the based on experience and preference. There’s nothing wrong with OKRs–hell, they could be better than my tweaks. So take my structure as either a gentle consideration or cautionary tale.</p>
<p>Projects follow a structural hierarchy of: Long-term direction > Theme > Objectives > Projects > Tasks. Each child supports the parent with greater fidelity and concrete definition.</p>
<h3>A brief detour on product owners</h3>
<p>The following section discusses ownership of responsibilities–with product owner being frequently mentioned. Who should the product owner be? Whoever is willing/able to own the direction of the roadmap. It can be a product manager, a people manager or a lead designer/engineer. Any/all can work. It&#8217;s down to culture/people/capabilities.</p>
<h3>Long-term direction</h3>
<p>Everything starts with a long-term direction. It’s both the least and most required part of planning. The long-term direction is your design system&#8217;s roadmap of roadmaps. It charts a multi-year course for where it plans to go and what to achieve. The product owner drives long-term direction with input and influence from senior leadership.</p>
<p>I usually aim for a four to five year plan. I find the long-term direction to be the ideal altitude to work with senior leadership. It&#8217;s great for strategic input without disrupting the team&#8217;s day-to-day work.</p>
<p>The long-term direction won&#8217;t perfectly lay out what each year will look like. That’s impossible. The goal is to form a point of view to work towards–knowing that point of view will constantly evolve. This point of view helps the team understand how each planning cycle intends feeds into the next.</p>
<p>The fidelity and accuracy of the roadmap drops exponentially over each year. That’s expected. Again, the long-term direction’s purpose isn’t to be accurate, it’s to define an <em>actual direction</em>.</p>
<p>Planning starts with a review the long-term direction. That review helps inform the plan&#8217;s upcoming theme.</p>
<h3>Theme</h3>
<p>A theme is used to help focus a team’s work for the cycle. The theme is typically defined by mangers/product owners on the design system team. It’s guided by company business goals and senior leadership. A planning theme provides a lens to put all projects through and a filter for efforts that are on the fence. Not all work will fall perfectly under a theme, because reality doesn’t work that way. That’s absolutely OK.</p>
<h3>Objectives</h3>
<p>Objectives represent a distinct goal in service of the planning cycle’s theme. Each objective contains a collection of projects that feed into the goal. Objectives can be defined by the product owner or be driven by senior team members. All team members should have heavy input in the definition of objectives. Some objectives won’t map to the plan’s them. As mentioned, that’s OK. Just be honest about it.</p>
<p>I like objectives to have their own goal/success measure as I find this a better altitude to report upward. I also think it’s important to show how all the projects in an objective map to an single definition of success. This creates extra work from how I’ve seen others set up OKRs, but I’ve found it useful.</p>
<h3>Projects</h3>
<p>Projects are what I use instead of key results. I find it easier to wrap my head about this mapping. Projects are where the rubber hits the road. I like using projects because they’re exactly what the name suggests. They’re a logical chunk of work with clear boundaries that cleanly map to the objective it’s a part of. Projects are typically defined by the product owner and people who&#8217;ll work on the project.</p>
<p>Each project in the objective should also have a clear goal/success measure(s). Those goals should clearly feed into the success of its objective’s goal.</p>
<p>Projects are defined through a one pager or requirements doc that outlines <em>what the hell you plan to do</em>. A project should have an owner who’s responsible to drive the work forward. The project&#8217;s requirements doc are written by the product owner and/or the project owner. At the very least, the person who owns the project needs to be heavily involved.</p>
<h3>Tasks</h3>
<p>Once each project has definition and goals, the job is to scope out the work as granularly as possible. Ideally, down to the task level. This is akin to pre-visualizing a project.</p>
<p>The project owner should work with all involved to define tasks. Tasks have an assignee, rough level of effort and requirements. The product owner and the project owner weigh in on prioritization and requirements. Assignees need to own the level of effort.</p>
<h2>How does this usually play out?</h2>
<p>Planning follows a pretty straightforward process. First define the high-level direction. Then scope out the tasks to support that direction. Next, sequence the work out across the length of the roadmap. Afterwards, you tweak the roadmap based on capacity and dependences. Then you use any overflow and learnings to pre-plan the following roadmap. Lastly, you socialize it across the company.</p>
<h3>Defining</h3>
<p>The team works to set a theme for the roadmap and then work to set objectives. The goal of this step is to make sure we’re all bought in to spending a large part of our year working on what’s suggested. I usually stub out skeleton projects to act as a conversation starter. The skeletons don&#8217;t need requirements or finalized goals. They only need to kick help start the conversation. This high level definition is shared with the team for review and spirited gut-checks.</p>
<h3>Scoping</h3>
<p>Once the high level plan has been established, the team goes into scoping mode. The goal of this step is to get all the work to be done defined, prioritized, assigned and level of effort estimated. This is the onerous project of defining all the work that needs to be done for each project. The more granular the tasks are the defined, the better. Have I mentioned it’s a lot of work? Because it is.</p>
<h3>Sequencing</h3>
<p>Once tasks are created and assigned, it&#8217;s time to map them across the planning cycle. Each team member sets an order and rough start dates for their workload. This step makes sure projects are scheduled accordingly when there are hard deadlines. It also ensures that work flows in the right order. Meaning all design tasks need to be sequenced ahead of development. But most of the time, each team member is able to map this to their own personal roadmap based on how they prefer to work.</p>
<h3>Rejiggering</h3>
<p>Once tasks are scoped and sequenced, it’ll be clear what the team has time for and what’s got to go. Tasks that can’t fit within capacity are cut and project scope is reduced. Objective and project goals are adjusted to reflect what’s been removed.</p>
<h3>Future planning</h3>
<p>What do you do with all that work that got cut from the current plan? You log it for the next planning cycle. The scope and goals set for the upcoming roadmap should impact the next roadmap. And knowing what will have to spill over is a big part of shaping that future outlook.</p>
<p>So don’t feel like all those created tasks that were cut was a waste. Quite the opposite–it’s helping the team prepare for the next planning cycle.</p>
<h3>Evangelizing</h3>
<p>Once the roadmap is set, it’s time for the road tour. A design system’s roadmap has the potential to impact so many teams. So, it’s important to plan and roadmap as visible as possible. Share it in meetings. Share it in email. Share it on Slack. Share it at happy hour. Share it over and over. People should be tired of hearing about your plan.</p>
<p>Our team typically posts the planning document which contains a all the gory details. It lays out the theme, objectives, projects and tasks. It&#8217;s paired with a Gantt chart that shows the sequencing of work by each project. All this is capped by a summary document which outlines the plan in a conversational tone. I’ll also sometimes go as far as reaching out to teams to see if they have questions/concerns.</p>
<p>Without fail, something is going to come up a week after planning ends. Teams will then ask why the design system team can’t take on a specific project. That’s when you point back to the plan that everyone’s tired of hearing about.</p>
<h2>Planning is a lot of work</h2>
<p>Make no mistake, I don’t enjoy planning by nature. This isn’t what I get out of bed for. But good planning is can turn a team clinging on for dear life into one that’s hyper-effective. As much as I recoil from the tedium of the work, I <em>love</em> the outcomes produced. Like many other things that are hard work, the payoff is worth it.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Buyer beware]]></title>
            <link>/posts/buyer-beware</link>
            <guid isPermaLink="false">/posts/buyer-beware</guid>
            <pubDate>Mon, 05 May 2025 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>I’m going to Config this year. It’s my first time. These kinds of events aren’t my wheel house. I don’t like being sold and I’m not into dog and pony shows. Config’s Venn Diagram of those two would be a perfect circle.</p>
<p>To be clear, I don’t blame Figma. This is their job. We, the consumer, aren’t holding up our end of the bargain. The job of the business is to sell. To pitch everything with the rosiest tint possible. To make their product look irresistible. The consumers’ job is to be aware of this and act correspondingly. That&#8217;s not happening–at least not enough. Here&#8217;s what I observe far too often: A company pitches its wares. Customers squee in excitement at what will absolutely not disappoint in any way whatsoever. Think Cybertruck. Think Humane. I could go on.</p>
<p>Again, this isn’t a slight at Figma. It’s a slight at naive buyers. This naivety does both parties dirty. I saw untethered hype first hand at InVision. The design community was emotionally and irrationally bought in at a level that defied reason. From a company that at no point earned that right. That delusion allowed a few at the top to believe what they made was all they thought it was. It wasn’t.</p>
<p>A skeptical customer is a gift. And we, the customers, are being miserly. This isn’t a call to mob up and blast negative absurdities on social media. It’s to just do the job of a customer. Brush the sales pitch aside. Reserve judgement. And once you have enough information, tell them what you expect for what they’re asking.</p>
<p>I&#8217;d say there are two logical conclusions to make from any demo presented at conference like this:</p>
<ol>
<li>Interest is piqued, but prolonged first-hand experience is needed to make a decision</li>
<li>Not interested, but prolonged first-hand experience is needed to make a decision</li>
</ol>
<p>Tools are not an impulse purchase. They’re not a candy bar at the checkout lane. Something like Figma is a significant investment of your time and money. Don’t just consume the pitch. Ask questions. Find chinks in the talking points. Constantly ask if what you’re seeing is what’s most valuable to you. Check your emotions, check the vibe, check the atmosphere and remember that you’re being sold.</p>
<p>And respond accordingly.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Design system documentation is essential–as long as it’s good]]></title>
            <link>/posts/design-system-documentation</link>
            <guid isPermaLink="false">/posts/design-system-documentation</guid>
            <pubDate>Sun, 27 Apr 2025 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>Documentation, of all things, is a contentious topic within design systems. Never in a million years would I expect something as boring as documentation to get folks up in arms. Some people (like me) think it’s essential. Others think it’s useless.</p>
<p>Part of me thinks this is due to modern-day internet hyperbole. If something isn’t the best thing ever, it’s the worst thing ever. Another part thinks this is due to people’s experience with documentation.</p>
<p>As mentioned, I think documentation is essential. Specifically, I think <em>good</em> documentation is essential. You’ll have my full agreement on the worthlessness of <em>bad</em> documentation.</p>
<p>So I thought I’d write a short-ish articulation of what good documentation looks like and what it can do.</p>
<h2>Good documentation is short, simple, structured, and actionable</h2>
<p>Writing a bunch of stuff down may technically be documentation. But it doesn’t mean it’s good. Getting to good is hard work. Below are the qualities necessary to get to <em>good</em>.</p>
<h3>Succinct</h3>
<p>Documentation should not be flowery or poetic. Each word should have meaning. Use the fewest words needed to get the point across. It can be tempting to “fill the space” to create the feeling of rigor. No one benefits from that approach.</p>
<h3>Predictable</h3>
<p>A reader should know how to consume design system documentation in less than a day. The structure/format of content should be logical and consistent. Guidelines and best-practices will always evolve. But readers should know what to expect to see when they look for information.</p>
<p>As an example, component documentation should lead with, what it is, what it does, and what it’s for. Order the remaining content should by what readers need to know next. The goal should be to get readers using the component <em>as quick as possible</em>.</p>
<h3>Concrete</h3>
<p>Design system guidance must be explicit, objective and not subject to interpretation. Phrases like, “Use sparingly” or, “Avoid when possible” are subjective. What does “sparingly” mean? What’s the definition of “when possible”? Many words can have wildly different individual interpretations. The goal of documentation is to replace individual interpretation with shared definition. If a component should only be used once on a surface, say <em>that</em>.</p>
<h3>Exact</h3>
<p>Words in documentation must be used precisely. Use the same words to mean the same thing. For example, it’s problematic to use “quality” and “high craft” to reference the same subject. As mentioned, words have different individual interpretations. It’s already difficult to align on the meaning of one word. Don’t make it harder by using other words. Yes, this will make the writing repetitive. That’s a feature, not a bug. Repetition helps build familiarity.</p>
<p>Similarly, use different words to mean different things. Terms like “font”, “typography”, and “text” all have distinct meanings. Resist glomming terms together for the sake of convenience.</p>
<h3>Approachable</h3>
<p>Documentation doesn&#8217;t need fancy words. Use clear, simple language. Our work isn&#8217;t a science, so our language doesn’t need to be scientific.</p>
<p>Small words can have big meaning. The harder it is to read documentation, the fewer people will read it. That’s a basic, but important truth.</p>
<p>In a similar vein, avoid jargon and acronyms. Don’t make up new words that don’t need to be made up. Remember that a company’s dialect is not
inherently understood–meaning it represents a dependency for people to understand the documentation.</p>
<p>A a rule, a junior-level employee should be able to understand a design system’s documentation.</p>
<h3>Encapsulated</h3>
<p>Individual guidelines should be self-contained and understandable on their own. The reader shouldn&#8217;t have to read the entire Button component’s docs to know when to add an icon. Each specific guideline should be able to guide the reader on its own. Readers need to be able to skim and digest documentation piecemeal.</p>
<p>Principles for a design system can be helpful. But they should be able to perform basis tasks without reading them.</p>
<h3>Actionable</h3>
<p>People’s relationship with documentation is transactional. A person needs to know how to do a thing–they read the documentation to find out. 99% of the time they are not interested in design principles or mission statements. They <em>just</em> need to know how to do a thing.</p>
<p>Documentation should be tuned for action. Remove preamble. Frame guidance in a way that enables people to act with certainty in the least amount of steps.</p>
<p>Similarly, only telling readers what not to do* isn’t actionable. People aren’t interested in what _not* to do. They’re need to know what <em>to</em> do. Documentation will not have all the answers. But it’s important for documentation to avoid being the “Book of Don’ts”. “Don’t dos” should be paired with “…do <em>this</em> instead”.</p>
<h3>Justified</h3>
<p>Documentation should be able to answer, “But, why?” Recommending a reader not do something without justification is not actionable or educational. It does not guide the reader to better understand how the system works or how to interpret its rules. Including rationale is critical to help readers understand the system&#8217;s underlying logic.</p>
<p>Best practices are a clear area of opportunity for providing rationale. Ideally this rationale is rooted in evidence with cited sources. Sharing this information is a window into how the system works. It’ll drive a deeper understanding.</p>
<p>90% of the time this info will not be needed or desired. It can counter-intuitively make the documentation less actionable. To remain succinct, this may mean including footnotes or linking to an appendix. Receipts should be available when readers come asking for them.</p>
<h3>Definitive (in a chill kind of way)</h3>
<p>Remember that documentation is <em>guidance</em>. It’s a recommendation based on <em>known</em> use cases and needs. The unknowns are just that. Design system documentation will <em>always</em> be imperfect and incomplete.</p>
<p>In that spirit, the tone of documentation should always reinforce that reality. Recommendations are <em>just that</em>. They are not a dictate or an ultimatum. Words like <em>must</em> should be used with extreme care and precision.</p>
<h2>Good documentation can help transform the way work is done</h2>
<p>Yeah, those are strong words. But I believe them–strongly. Below are all things (except for one) that I’ve seen documentation do with my own two eyes.</p>
<h3>It forces a point of view</h3>
<p>A design system team without documentation is dangerous. It gives them room to waffle. Today, only one primary button on a surface is allowed. Tomorrow, maybe not. Without documentation, a point of view can change at any moment. With no accountability.</p>
<p>Design system consumers deserve a clear, stable point of view on how to use it. They should be able to push back when feedback doesn’t align with documented guidelines. Documentation keeps a design system team honest and answerable to those who use it.</p>
<h3>It improves the thinking behind the system</h3>
<p>I believe writing documentation is valuable even if no one reads it. Look, it’s been said a million times–the act of writing fortifies the thinking behind it.</p>
<p>A design system’s component or pattern isn’t complete until it’s been documented. Documentation is a design system’s mental QA. It’s one thing to think a component or pattern’s logic works in your head. It’s another to prove it by writing that logic out.</p>
<p>Writing documentation has resulted in more component revisions than I can count. The process is worth it for that reason alone.</p>
<h3>It keeps the design system team aligned</h3>
<p>It’s naive to think the entire design system team shares the same understanding of every token, component and pattern. Quite the opposite–I’d say there’s far more misalignment than there’s alignment on the average team. Documentation can correct that <em>quickly</em>.</p>
<p>Documentation acts as a team’s handbook and rallying point. It helps team members catch up on areas they have less exposure to. In times of disagreement, it can help ground conversations. Docs can be the mental glue between all team members.</p>
<h3>It keeps thinking available when people aren’t</h3>
<p>A lot of design system teams rely on Slack or Teams to answer questions as they come in. It’s common for those mediums to be the de facto form of documentation. Which, I’ll say, is the least efficient form of documentation possible. But on top of that, what happens when the person answering the questions isn’t available?</p>
<p>The thinking behind a design system is–far and away–its most valuable piece. It’s a huge risk to for all that thinking to stay bottled up in one person’s head. That person will be too busy to respond. They’ll get sick. They’ll go on vacation. Those moments represent blockers to anyone with questions about the system.</p>
<p>And someday, that person will leave. At which point that knowledge is gone <em>forever</em>.</p>
<h3>It creates a common language</h3>
<p>Design system docs help folks understand a product’s design/engineering best practices. Duh. But it also creates shared terminology and definitions. Which allows people to effectively communicate.</p>
<p>It’s hard to have conversations when people use different words with the same meaning. Or the same words with different meaning. A component with different names between design and code can screw things up big time. Take a guess at what shines a light on issues like that?</p>
<p>Words matter–now more than ever. Documentation produces a shared set of words to help generate shared understanding.</p>
<h3>It levels the playing field (maybe)</h3>
<p>This one’s a little aspirational and admittedly not proven. But I believe in it nonetheless. Documentation can be a (hypothetical) leveling agent within organizations. It’s far too common for decisions to suffer from highest-paid-opinion-In-the-room-syndrome. I see documentation as a way for people to fortify their decisions to those above them.</p>
<p>Will this always work? No. Will it work the majority of situations? Probably not. But even if it works on occasion, that’s damned valuable.</p>
<p>Naive/idealistic? Guilty as charged.</p>
<h3>It reduces team overhead</h3>
<p>Design system support is as important as it is costly. Make no mistake, support is a key part of a design system’s success. But support doesn’t need to be only handled by humans.</p>
<p><a href="/posts/everybody-reads">People do read</a>. Good documentation <em>is</em> read. Every question documentation answers is one that a person doesn’t. I’ve seen cases where growth in docs usage coincided with decreases in support volume. Cases–as in plural.</p>
<p>That decrease in support is time saved. And that saved time is free to apply elsewhere–like improving the system. Or writing <em>more</em> documentation. Time is always money. Good documentation prints it.</p>
<h3>It acts as a feeder for AI</h3>
<p>Yeah, I said it. I’ve yet to see AI perform effectively in typical design systems work. I remain uncertain what role it will play within design and engineering. But I am certain that design system documentation is an <em>ideal</em> source to train LLMs. Those who are pursuing AI in their internal processes should be documenting.</p>
<p>This is an area I continue to explore with mixed opinions. But it shows enough promise to keep chipping away at it with interest.</p>
<h2>People read good stuff. So write good stuff.</h2>
<p>There may come a day where humans invent a better form of information transfer than written text. I&#8217;ll back off this crusade once that day comes. But it ain&#8217;t here yet.</p>
<p>Until then, take the time to document your system.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Maybe this is design technologists’ time to shine]]></title>
            <link>/posts/design-technologists</link>
            <guid isPermaLink="false">/posts/design-technologists</guid>
            <pubDate>Sun, 30 Mar 2025 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>I’ve had a weird career. And before that, I had a weird education. I went from majoring in computer science to graduating with a degree in Visual Arts. I then entered a job market that was in free fall and not very interested in graphic designers. I decided paying rent was pretty important, so I dusted off my dev skills to become a front-end coder. I didn’t give up on design though. I would take on personal projects in my free time. Strangely enough, there weren’t any engineers begging to build my ideas. So it was up to me to suck it up and figure it out. Next thing I knew, I was a design technologist. In 2004. We were a rare breed.</p>
<p>Twenty years ago I said, “Ten years from now, design technologists will replace the software design role”. My bad. I maintain the opinion that design techs are the ideal role for making software. They have a fuller understanding of the software medium. That makes them more capable to design and build for it. That all seems logical in my mind. But people and society aren’t logical. Corporate America <em>definitely</em> isn’t logical. And so the hybrid role has continued to tread water–quite literally between the margins.</p>
<p>My belief in the practice has not wavered. But I had lost confidence that it would take off beyond isolated pockets. That <em>may</em> be changing due to market conditions and advancements in technology. And so I’m dusting off my optimism to discuss what makes this role so special and what qualities I look for when hiring.</p>
<h2>The design technologist role is a wide spectrum</h2>
<p>It’s important to note that design technologists come in many shapes and sizes. It’s easy to fall into the trap of thinking of them as engineers who like to dabble in design. But that’s flat out wrong. Some design technologists are 10% design and 90% engineering. Others are the complete opposite. Most are somewhere in the middle.</p>
<p>The emphasis doesn’t matter–if there even is one. What matters is that there’s a blend of the two skills. Each blend is going to bring its own strengths and weaknesses. But they all bring something valuable to the table.</p>
<h2>This role remains special–and misunderstood</h2>
<p>Yes, I’m biased. Unapologetically. I’ve seen what this role can do and it’s invaluable. It’s also undervalued. They’re typically only half-understood regardless where they exist in an org chart. Design leadership doesn’t get how the engineering skills apply to their org. Engineering leadership doesn’t see how the ability to design is useful for them. This role can feel unappreciated without the right support.</p>
<p>None of that changes that the design technologist brings a whole new set of capabilities to a team. They’re not a partial designer and a partial engineer–they’re a whole other thing entirely.</p>
<h3>Design techs get things done</h3>
<p>People in this role drive results–quickly. It may not be perfect. But it’ll happen. And let’s be honest, a lot of day-to-day work is about getting it done. Their wide skillset frees them to take an idea all the way to final execution with little to no support.</p>
<p>I’ve also noticed a common streak of pragmatism from people in this role. They’re often implementing their own designs. So, they know how uncompromised design can lead to painful engineering. They also know engineering decisions that impact design lead to a crap experience. Design technologists usually aim for the best practical blend of design and engineering. They know usually leads to the best all-round outcome.</p>
<p>On top of being able to go soup-to-nuts, they’re also incredible at filling gaps in projects. If a team is short on dev cycles, they can assist. Need some design support? They can do that as well. Need a little of both, they have that covered. Design techs are blocker killing machines. The flexibility of the role makes them a resourcing dream.</p>
<h3>They improve the ways teams work</h3>
<p>Design technologists’ have an understanding of how the sausage is made on both sides. They know how design impacts engineering (and vice-versa). They know how designers can set up engineers for success (and vice-versa). They also understand how engineers piss off designers (and, again, vice-versa).</p>
<p>They, more than most, know how design and engineering are interconnected. That understanding helps them shape ways of working that benefits all parties. Designers and engineers still struggle to work well together after decades of trying. This skill alone should have teams hiring design techs like their lives depended on it.</p>
<h3>They develop novel solutions</h3>
<p>The <a href="https://en.wikipedia.org/wiki/Law_of_the_instrument">Law of the instrument</a> is the origin of a pretty famous quote, “If all you have is a hammer, everything looks like a nail”.</p>
<p>Pure designers will always try to solve problems with design. Pure engineers will always try to solve problems with engineering. Design technologists by nature have a bigger toolbox.</p>
<p>Sometimes they’ll solve a tricky development roadblock with an alternative design. Other times they’ll fix some design challenge through technology. Sometimes it’s a blend of both.</p>
<p>They have a lot of tools at their reach and it allows them to approach problems differently. This results in solutions that neither a designer nor engineer would even consider. One design tech working on a problem is fundamentally different than a designer and engineer working on that problem in tandem. I wouldn’t say one is better than the other, but they’re absolutely different. And that difference opens up the possibility for original solutions.</p>
<h3>They make connections more specialized people don’t</h3>
<p>Design techs see patterns and make connections that most specialists won&#8217;t. Viewing software creation through a wide-angle lens makes that almost inevitable. Being in more steps of the process shows how one decision impacts every future one. In a way, working as a design technologist is a crash course in systems thinking.</p>
<p>I also don’t think it’s a coincidence that so many design technologists gravitate to design systems. My experience building with reusable code made design systems seem like only reasonable way to make software. It’s impossible to unsee.</p>
<h2>Good design techs are action-oriented, collaborative, and curious problem solvers</h2>
<p>I’ve hired a decent number of design technologists in my time. I’m typically not looking for portfolios or experience with specific tools. I’m definitely not looking for years of experience as a design technologist. I’m looking for a mindset. In my experience, there are certain qualities that thrive in this role. I look for one or more of these when hiring.</p>
<h3>Action-oriented</h3>
<p>Good design technologists bias towards action. They&#8217;d rather beg for forgiveness than ask for permission. In part, they broadened their skillset to avoid being blocked in the first place. They’d rather cut through the red tape and do it themselves than wait.</p>
<p>I’ve never met a design technologist with Initiative as their legal middle name. But it may as well have been for most I’ve worked with.</p>
<h3>Collaborative</h3>
<p>But don’t get it twisted. Sure, they may not want to wait around and do nothing. But the good design technologists are some of the best collaborators around. Their hybrid experience gives them healthy amounts of respect for each discipline. They may not be keen on waiting around. But they’re also typically the first person to want to include folks for different perspectives.</p>
<h3>Intellectually curious</h3>
<p>Design technologists are naturally interested in <em>a lot of things</em>. They see something they don’t know about and want to learn more. Many can be a little like butterflies that need space to fly around where they see fit. I try to give folks in this role a lot of space so they have room to experiment and tinker.</p>
<p>This is often their fuel and their source of greatest value. Some of our teams’ greatest achievements came from a design technologists&#8217; unplanned tinkering.</p>
<h3>Problem solvers</h3>
<p>The defining trait I’ve seen in nearly all strong design techs is an insatiable desire to solve problems. That may sound like a platitude. You may think, “Designers and engineers also want to solve problems”. And you’d be correct. But design technologists take this to another level. The drive to solve problems is the motivator to grow beyond design or engineering. That&#8217;s what got me into this mess. And many others I&#8217;ve worked with.</p>
<p>Design technologists see problems and aggressively want to fix them. That often makes them incredible enablers. They thrive in solving problems other people/teams are facing.</p>
<h2>What’s the future for this practice?</h2>
<p>I don’t know. A part of me continues to think that if it was going to take off, it would have done so by now. But we’re in a cycle of big change. Companies want to do more with less. Engineering orgs in particular seem to be slimming down. AI may not be the magic some are selling, but it’s not completely hype.</p>
<p>We may be heading to a world of dwindling headcount and tools to supplement code creation. We can debate the merits of such a future, but that’s for another day. If that’s in our future, the design technologist could be ready for its time in the sun. And frankly, it’s about damned time.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Naming things in design systems–and why it’s the worst]]></title>
            <link>/posts/design-system-naming</link>
            <guid isPermaLink="false">/posts/design-system-naming</guid>
            <pubDate>Wed, 19 Mar 2025 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>The exercise of naming can easily descend into a mindfuck death spiral. I often joke that every design system conversation devolves into a naming argument. As the years go by, it feels less and less like a joke. I vacillate between naming being performative navel-gazing and the most important part of the job. Given I consider it so critical half the time, I thought I&#8217;d write about it.</p>
<p>I hold extreme opinions on naming because I think there are really effective and equally ineffective ways to do it. The effective ways seem important. The ineffective ways seem like navel-gazing.</p>
<h2>Fun is only fun for the people having fun</h2>
<p><a href="https://gestalt.pinterest.systems/foundations/color/palette#Colors">Gestalt&#8217;s color palette</a> is probably my biggest regret. I consider it a great case study in clever, creative, fun, and <em>horrible</em> naming. I distinctly remember the meeting where everyone acknowledged how much we fucked up. You could literally hear pain in the engineer&#8217;s voice when they asked, &#8220;So I need to type Matchacado every time I want to color something green?&#8221; &#8220;Why not just call it green?&#8221;, was the next question. Which, to be fair, was a damned good question.</p>
<p>Fun names aren&#8217;t as fun as the namers think they are. Don&#8217;t get me wrong, it&#8217;s fun as hell to come up with clever new words. Even when there&#8217;s a perfectly functional existing word available. Pharmaceutical ads may well be the zenith of make-shit-up naming. Where we once had &#8220;General Steel&#8221;, in today&#8217;s marketing-driven mindset we&#8217;d have &#8220;Ferraxa&#8221;. These names are <em>creative</em> (I guess?), but I don&#8217;t think creativity is a good thing when it comes to naming. At least not in design systems.</p>
<p>Anyone reading this who&#8217;s worked with me is rolling their eyes now. I&#8217;ve been public enemy number one for creating stupid names purely for the sake of juvenile humor. Guilty as charged. My case nonetheless stands.</p>
<h2>Clear or flexible (you choose)</h2>
<p>A name should clearly and concisely describe its subject. <em>Dishwasher</em> may be the best name ever invented. &#8220;What’s a dishwasher do?&#8221;, is not a question people ask. A name has succeeded if it&#8217;s self-descriptive.</p>
<p>Concise and clear naming is all fine and dandy to say, but much harder in the realm of systems. Specifically in the realm of design tokens. Tokens are design systems&#8217; magnum opus in masochism. Design tokens defy clarity because they are abstract <em>by design</em>. Tokens shift based on context. Things like color schemes and density settings mean that what was once dark is now light. What once was big is now less big. We can&#8217;t just call a thing what it is, because it isn&#8217;t always the same thing.</p>
<p>How do you name a thing that changes? Abstraction. Terms like light/dark are replaced with negative/positive. Which is fine, but it chips away at clarity. People innately <em>get</em> &#8220;dark&#8221; faster than &#8220;positive&#8221;. Abstraction gives us flexibility at the cost of clarity.</p>
<p>To make things harder, a lot of things in design systems are relative. Think size/color ramps. Sure, we could just name each size its actual value, but what happens when that value has to change? Now that name makes no sense whatsoever. Going back to our friend abstraction, we&#8217;ve historically named ramps in relative terms (e.g., small, medium, large or light, medium, dark). This also sucks. Because what happens when you need to add a value between small and medium? You get the infamous <em>smedium</em>. Too many sizes and you get a bunch of Xs in names (e.g., xx-small, xxx-small, xxxx-small). No one will convince me those are good names.</p>
<p>So, to combat this, we&#8217;ve typically used numeric stops for ramps (e.g., size-100, size-200 and red-100, red-200). More abstraction. This fixes the issue of needing to shunt a size/color in the ramp (size-150/red-150) but it&#8217;s even more abstracted. Meaning it&#8217;s even less clear. Someone tell me what size-100 is. It&#8217;s nothing. In a way, that&#8217;s the point.</p>
<p>In real life, I can call a chair a &#8220;chair&#8221; and know that it will always be a chair. In the world of design systems, a chair could become a sofa, or a table, or a Volkswagen. I know we haven&#8217;t cracked design tokens because they continue to make no goddamned sense. Due in large part to obtuse naming conventions.</p>
<h2>Rules of thumb for naming components</h2>
<p>I don&#8217;t see a world where token naming doesn&#8217;t devolve into said mindfuck death spiral. At least not in the near future. But that doesn&#8217;t need to be the case for other areas of a system. Luckily, many other areas of systems can be much simpler. And it&#8217;s important to lean into that simplicity.</p>
<p>I think it&#8217;s important to have one name–and only one–for a thing. This seems obvious. But different platforms have different names for the same thing. What would be considered a list on Web has been called a table on iOS. There&#8217;s a million of these discrepancies once you get in the weeds. As difficult as it may be, I maintain the opinion that a design system needs to settle on one name.</p>
<p>Once that name is settled, the focus should be short, simple and clear. As few <em>simple</em> words as possible that clearly describe the thing. Mind you, this is <em>deceptively hard</em>. Maybe even <em>deceptively impossible</em>. But a few smart decisions during the naming phase can at least <em>reduce</em> pain down the road. For example, is, &#8220;Loading Spinner&#8221; a good name? What if it&#8217;s redesigned to no longer spin? What about, &#8220;Loading Indicator&#8221;? Well, &#8220;indicator&#8221; is a pretty big word for a pretty small meaning. Maybe, &#8220;Loading Sign&#8221;? What about just, &#8220;Loading&#8221;? Too vague?</p>
<p>Side note, I don&#8217;t think I&#8217;ll ever understand why &#8220;Floating Action Button&#8221; isn&#8217;t called &#8220;Floating Button&#8221;. Aren&#8217;t all buttons, <em>action buttons</em>? Floating Action Button, in particular, sticks in my craw. This overly complicated name led it to become FAB. It committed the ultimate sin of becoming an acronym. A name has failed once it&#8217;s become an acronym. I could go on and on about the blight of acronyms, but that&#8217;s for another day. I&#8217;d argue that naming simplicity is critical solely to avoid being <em>acronymed</em>.</p>
<p>Lastly, names should have decent separation between each other. The more components differ in form/function, the more their names should differ. For instance, “Tag” and “Tab” are pretty damned different components, but the sound <em>really similar</em>. That alone can cause confusion. It doesn’t help when the “G” and “B” keys are so close together. One fat-finger typo and now there are tags where there were supposed to be tabs.</p>
<h2>Think before you name</h2>
<p>I could go on and on about naming in design systems. Suffice to say, it’s important (as much as I can think otherwise). Design systems are many things. Their role as a language may be its most critical. The nomenclature used in a system is what creates common understanding or general confusion. It can bring people together or keep them siloed.</p>
<p>For as critical as naming is, it&#8217;s not always treated that way. Many teams don&#8217;t have people with the background, expertise or even general interest to deftly handle taxonomy. Think twice before you name that component Floating Upsell Card. You may end up regretting it.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[I don’t want your email]]></title>
            <link>/posts/i-dont-want-your-email</link>
            <guid isPermaLink="false">/posts/i-dont-want-your-email</guid>
            <pubDate>Sat, 08 Mar 2025 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>I don&#8217;t know who reads this. I don&#8217;t know how they find it. I don&#8217;t know if they&#8217;ll ever come back. I don&#8217;t know a damned thing. And that&#8217;s by design. I value my privacy and by extension, I value others&#8217;. That&#8217;s exactly why I don&#8217;t have newsletters. The last thing I want is someone&#8217;s email.</p>
<p>This blog is a place to get things out of my head. I write for myself. Putting it on display provides just enough social pressure to give it <em>that much more</em> care. But it&#8217;d be fine if it was read by no one. I won&#8217;t lie–that wasn&#8217;t always the case. It took me a lot of years to grind that desire out of me.</p>
<p>Social media platforms were supposed to the way for anyone to grow an audience. For many, dare I say <em>most</em>, the goal was simply to be seen. To fulfill a need to feel validated. And man, has social media preyed on that need.</p>
<p>Speaking of preying. Social media has also preyed on the tale as old as time: &#8220;you can become the next big thing&#8221;. Many folks got caught in the trap that they <em>just might</em> be able to make a living by making content. And just like every other road to fame, 99.9% of them didn&#8217;t.</p>
<p>What was once a snowball&#8217;s chance in hell is now even harder. We&#8217;ve seen a slow-motion rugpull for the past decade. Platform algorithms increasingly have more sway on content consumption. A creator&#8217;s &#8220;audience&#8221; means less than ever. Now that 99.9% looks more like 99.999%.</p>
<p>In response, we&#8217;ve seen a small, yet steady push towards independence. Content creators are experimenting with newsletters to distribute content. I get it–newsletters give creators the ability to have a direct line to their followers. No algorithms, just a direct line.</p>
<p>The problem is, it&#8217;s still flawed. First, there continues to be a middleman. There seems to <em>always</em> be a middleman nowadays. It&#8217;s easy to see for plaforms like Substack because <em>they are the middleman</em>. And that middleman can change their rules at a moment&#8217;s notice. Even &#8220;independent&#8221; newsletters use services like Mailchimp or whatever other newsletter services exist. Those too are middlemen that can also change the terms as they see fit.</p>
<p>The second and more essential issue is that the overwhelmingly vast majority of creator will <em>never</em> make real money. All the while, the people trying to consume content deal with layers, and layers, and layers of bullshit. Privacy issues, invasive advertising, increasingly aggressive dark patterns. All to make 30 cents in revenue. Which, begs the question, &#8220;Why even try?&#8221;</p>
<p>I understand the desire to grow an audience. I also understand the desire to know who your audience is. Even more so, I understand the desire to be in more control of your own destiny. But that desire comes with some serious strings. And when you cut those strings, things get <em>incredibly</em> simpler for everyone.</p>
<p>I&#8217;ll never grow a following or make a dime from this blog. That&#8217;s just fine. It keeps things clean and easy. I have a simple site that I pay nothing to host. I have no aspirations beyond what this currently is. I write the things I want to write. People may read it. If they do, awesome. If they don&#8217;t, whatever. It&#8217;s freeing.</p>
<p>But who cares about how I feel. More importantly, this approach respects readers. They&#8217;re not tracked. They&#8217;re not bothered with ads. There are no stupid GDPR labyrinths. None of their personal information is stored. They come, they read, they leave. That&#8217;s it.</p>
<p>I don&#8217;t think it&#8217;s wrong that people want to have their content seen. It&#8217;s completely logical to want a payoff for what they create. None of that in itself is &#8220;bad&#8221;. But in our current day and age, it can come with some pretty nasty consequences. We should at least go into that with our eyes wide open.</p>
<p>I don&#8217;t want anyone&#8217;s email. Even more so, I don&#8217;t want anyone to <em>want to give me their email</em>. Frankly, I want us to <em>give less</em>.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[The existential challenge of design system team morale]]></title>
            <link>/posts/design-system-morale</link>
            <guid isPermaLink="false">/posts/design-system-morale</guid>
            <pubDate>Wed, 26 Feb 2025 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<h2>What the hell do I know?</h2>
<p>Not much to be honest. I’ve been working in this industry for a long while now and I still don’t have a damned clue. But, as the years go by, I don’t think many people do either. Meaning most of us are all just figuring this out together.</p>
<p>I don’t have answers, but I do have experiences. That’s all I can share. These experiences are not profound. They’re not new. There’s no guarantee they&#8217;ll work for anyone else.</p>
<p>But I’m sharing them anyway. Because they may be useful for someone. Someone like you.</p>
<h2>Our industry is not in a good place</h2>
<p>Welcome to 2025. Layoffs are happening every other day. Companies are shifting values with shifting administrations. The future seems more opaque than ever.</p>
<p>People are frustrated. To say the least. Which means morale is more fragile than ever. This is no longer something we can “take seriously” in the air quotes kind of way. It’s become existential.</p>
<h2>Design systeming is really hard</h2>
<p>And to make matters worse, the role of a system designer is just <em>really</em> challenging. Common issues include:</p>
<ul>
<li>Chronic reactivity to requests and support needs</li>
<li>Being overwhelmed by too much to do in not enough time</li>
<li>Challenges with knowing how people use the system</li>
<li>A general sense of their work/role being misunderstood and unappreciated</li>
</ul>
<p>And much more! But you get the gist.</p>
<p>Burnout has become a rite of passage. It’s (sadly) become a problem to manage versus avoid. Every design system team I’ve worked on had these challenges. And I know my experience is not the exception. We’re all in good company. Or, maybe, bad company.</p>
<p>Design systems are hard. Because the work of design systems is hard. But guess what? So is every other discipline of design and engineering. Just hard in different ways. It’s important to remember everyone is going through challenges.</p>
<p>Avoid the “us” versus “them” mindset. Trust me, that’s not a healthy place to go.</p>
<h3>Morale is a hefty topic that can fill a book</h3>
<p>And all I have is this blog&#8230;</p>
<p>This post won&#8217;t cover everything–because it can&#8217;t. So much of morale is squishy and hyper situational. My personal experiences aren’t going to be useful to someone’s specific situations. People write whole books on this topic. I have not, nor never will, write a book. Especially about this.</p>
<p>But if there’s one thing my experiences have taught me, it’s that morale can’t grow on a shaky foundation. I might be able to help with that.</p>
<h3>It&#8217;s called work for a reason</h3>
<p>I don’t think work is supposed to be fun. I think parts of it can be. But a lot of work is, well, <em>work</em>. And other parts can be downright <em>misery</em>. Compliance training isn’t fun. Corporate jargon isn’t fun. Mandatory fun isn’t fun.</p>
<p>When I think of morale, I don’t think fun. I think morale is made up of more subtle emotions. Things like fulfillment, security, trust, stability, hope. They&#8217;re less in your face. They&#8217;re fragile. They&#8217;re important.</p>
<p>Those are what I’m aiming for when building morale.</p>
<h3>Boring is good</h3>
<p>I think our industry undervalues boring things. But my goal as a manager is to make people’s day to day as boring as humanly possible. Not “boring” as in mundane. Not soul-crushing. But “boring” as in obvious, consistent, and predictable.</p>
<p>We’re living in an “exciting” age. Nothing about today’s world is boring. Everything is changing. Yesterday’s assumptions are today’s uncertainties. We’re waking up to something new everyday. And many, <em>many</em> of us want off the fucking ride.</p>
<p>That level of unpredictability makes life (and work) difficult. I can say with increasing confidence there&#8217;s a growing consensus yearning for more boring in their life.</p>
<h3>Design systems are boring</h3>
<p>I think a little boring is good for every team, but I think it’s essential for design system teams. Because I think good design systems are boring by nature. They just work. They’re reliable. No surprises. No excitement.</p>
<p>Design systems are institutions. They&#8217;re your local utility. Think of about the last time you turned on your water faucet. You didn’t ponder what would happen. You just expected clean, running water. A surprise would&#8217;ve been a failure.</p>
<p>And that’s one of the many values design systems can bring. Like many other institutions, they can establish stability. But it’s hard for a design system to <em>establish</em> stability when its team <em>isn’t</em>…</p>
<h2>Discipline, focus and patience as the foundation for morale</h2>
<p>Strong team morale is built on being able to work effectively. I don’t think you can disconnect impact and team sentiment. So, I don’t.</p>
<p>My focus to maintain healthy morale is to maintain a healthy team working model. And the three things I’ve found to be most important are:</p>
<ul>
<li><strong>Discipline:</strong> Follow a process and stick to it</li>
<li><strong>Focus:</strong> Work with minimal distraction</li>
<li><strong>Patience:</strong> Tackle right thing at the right time</li>
</ul>
<p>None of those things are giving off the fun vibes. I know. But they create structure to avoid the typical pitfalls of design systems. They help avoid reactivity. They reduce the feeling of being overwhelmed. They give people the space to do great work.</p>
<p>And doing great work is pretty damned <em>fun</em>.</p>
<h2>Discipline to follow process</h2>
<p>I don’t know how a functioning design system team works without discipline. There’s simply so many ways to get distracted and too many jingling keys to stare at. If there’s one thing I’ve seen gut a design system team it’s a lack of discipline.</p>
<p>People who work on design systems love to help. It seems to be hard-wired into the personalities that gravitate towards the practice. That’s endearing, but dangerous. This is amplified for teams that feel misunderstood or unappreciated. Because helping is so validating. And the act of helping can satisfy that craving to be appreciated and validated. All at once.</p>
<p>That dynamic can cause a reactivity death spiral. It starts from a design system team’s craving of appreciation and validation. People over-compensate by being hyper responsive to peoples&#8217; needs. Outside teams see that behavior and say, “Oh, <em>that’s</em> what design system teams do”. Expectations are reinforced that feature teams can ask and they shall receive. The team feels even more misunderstood/unappreciated. In response, they over-over-compensate…</p>
<p>Rinse, repeat.</p>
<h3>De-spiraling death spirals</h3>
<p>Ironically, design system teams are especially knee-capped in a reactive environment. So, it&#8217;s essential to have the discipline to avoid those distractions. But that doesn’t come out of thin air.</p>
<p>The way I try to blunt reactivity is with structure. My goal is to create <em>just enough</em> friction to make reacting hard. This structure looks a little different for every team. There isn’t a single formula to follow. Rather, following <em>is the formula</em>. Meaning sticking to the chosen process is what’s most critical. Yes, you’re always improving the process, but incrementally.</p>
<p>For teams I’ve been on, the good mojo comes from sprint planning. I know, boring. But this structure helps keep the team focused on what we’ve committed to work on. Requests are always welcome. But the soonest we commit to is the following sprint. Rare is the time when that is ever a real issue. That structure helps us defer those “quick wins”. And that’s important, because quick wins can be addictive. And in my experience, most “quick wins” are neither quick nor wins.</p>
<p>This means you’ll need to be good at saying, “No”. Ideally, you’re not <em>literally</em> saying “No”, but in essence you are. Yes, this can be awkward and make people sad. It certainly won’t be fun. But discipline requires “No”.</p>
<p>And luckily, there’s a way to make “No” easier…</p>
<h3>Goals put you in a proactive state</h3>
<p>I said earlier that corporate jargon isn’t fun. Things like OKRs, and KPIs are <em>not fun</em>. But damn can they help you approach work proactively. And proactivity makes it <em>much</em> easier to say no.</p>
<p>Nothing makes someone feel less appreciated than having to drop what they’re doing because someone “said so”. Team goals, OKRs, and KPIs can act as a shield against those asks.</p>
<p>That’s why I think it’s so important to rally around team KPIs–with buy in from senior leadership. These KPIs can set the tone for how performance is evaluated. <em>And</em> they immediately give you an out for work that doesn’t fit.</p>
<p>“We’d love to help you, but we’re committed to increasing adoption by X% this half and can’t risk missing that goal.” It’s not <em>you</em> saying no, it’s the agreed upon measure of success that’s saying it.</p>
<p>Design system success metrics could be a series of novels on their own. They’re a can of worms and I have a love/hate relationship with them. But troublesome as they are, they can save a team’s ass when used the wisely.</p>
<h3>Rote through repetition</h3>
<p>So, the team has developed the discipline to follow a process day after day, week after week…</p>
<p>A funny thing begins to happen over time… All that process and structure becomes <em>second nature</em>. Now all of the sudden people aren’t thinking about how to do the work, they’re <em>just doing it</em>. Because it’s become muscle memory. It’s amazing how much friction can be removed through building up healthy muscle memory.</p>
<p>It’s equally amazing how <em>unhealthy muscle memory</em> can invisibly hurt morale. And given that much of it happens without intention, it’s difficult to even notice.</p>
<p>Spending the time on better habits goes a long way.</p>
<h2>Focus to execute (well) on one thing</h2>
<p>Discipline is the gateway drug of focus. A disciplined team should be taking on less unplanned work. Which means it should have more time. That newly-acquired time gives team members the freedom to focus.</p>
<h3>Focus drives quality</h3>
<p>Good work requires focus. This is not breaking news. And in the world of design systems, quality is pretty damned important. I’d go as far to say it’s a requirement. One bug in a highly-used component could create tens of thousands in production. The scale of design systems do not allow the luxury of half-assery.</p>
<h3>You need a focus to focus</h3>
<p>Duh. It&#8217;s basic, but important. Which brings us back to team goals, KPIs and OKRs. It’s surprising how many design system teams don’t have these. Yes, they’re boring (there’s that word again). But they create a shared focus.</p>
<p>That focus will look different for different team members. It may be more granular and atomic for people on the junior side. It may be a strategic area for more senior folks. The more important thing is that everyone has <em>something</em>.</p>
<h3>Ownership at all levels</h3>
<p>What better way to create focus than through ownership? I’m a big believer in creating domains of ownership on the team. Our team overlaps responsibility to avoid single points of failure. But there’s still an official subject-matter expert that drives the team’s thinking. This ownership gives people the freedom and expectation to go deep in their subject area.</p>
<p>And the people who own a subject, <em>own</em> it. They’re trusted to make the final decision. No micromanagement. No hovering. They’ll be supported when it’s helpful, but their hands are firmly on the wheel at all times.</p>
<p>As mentioned, focus/ownership is necessary for quality. But even more importantly, it gets people invested. Invested in the subject matter, in solving the problem, in success. Most importantly, it gets them invested in the team.</p>
<p>And in my experience, personal investment plays a major role in morale.</p>
<h2>Patience to take one step at a time</h2>
<p>And lastly, there’s patience…</p>
<p>Patience was <em>easily</em> the hardest skill for me to learn. My younger self always wanted everything to happen immediately. I wanted team to adopt immediately. I wanted leadership to fund immediately. I wanted results immediately.</p>
<p>It didn’t work–and it made me incredibly unhappy in the process. A great combo.</p>
<h3>You can’t solve every problem</h3>
<p>I still <em>want</em> to make everything happen overnight. The difference is that I know it’s just not possible. All I’ll get in return is burnout and mediocre results. Boring as it may be, I’ve learned the fastest way to get to that better place is by staying focused on one thing at a time.</p>
<p>Ultimately, this can only be solved by…</p>
<h3>Playing the long game</h3>
<p>Design systems just take time. It’s tempting to throw more resources/effort in the hopes to speed things up. Don’t bet on it. It’s not just about how fast a design system team can make a design system. It also requires designers and engineers <em>using it</em>. And that takes (you guessed it) time.</p>
<p>That makes gratification delay incredibly important. I think about progress in years, not quarters–and definitely not months.</p>
<h3>Progress is powerful</h3>
<p>Big bursts of productivity is alluring. But I’ll choose consistent, incremental, progress every day of the week. It’s safer, more predictable and typically leads to higher morale.</p>
<p>The roller coaster of big releases and big hangovers creates a roller coaster of emotions. A steady drip feed of progress creates a steadier team atmosphere. It shows that things are heading in the right direction. Plus, it helps encourage patience. It’s a lot easier to be patient when you’re seeing progress every day. It doesn’t even need to be a lot. But steady, consistent forward progress gives people hope.</p>
<h3>Roadmaps make progress visible</h3>
<p>Incremental progress can be incredibly hard to see. Sometimes it’s so small that it’s impossible to visualize. Roadmaps can help visualize a team’s accomplishment. Your team’s metrics will quantify accomplishment. Those two create a powerful combination.</p>
<p>It’s easy to say, “We’re doing great” or “We’re not doing great”. It’s also a platitude on its own. The value of having a roadmap and team metrics is that <em>you don’t have to say anything</em>. Because they speak for themselves.</p>
<p>But it doesn’t hurt to tell your team they’re doing great. Even if you don’t have it. Just saying.</p>
<h3>No → Not yet</h3>
<p>That fancy roadmap creates even more protection against reactivity. Simply adding someone’s ask onto a long-term roadmap can immediately diffuse tension. It represents that you’re taking their needs seriously and have a plan to address.</p>
<p>It instantly transforms, “No” into “Yes, but later”.</p>
<h2>This is a foundation to build on</h2>
<p>These are the things I focus on to create an environment for healthy morale. I can’t guarantee this alone will improve morale. For myself, it’s laid the groundwork to get there. In a way, it unblocks the ability to do <em>all the other work</em>. You’re still going to have to understand what motivates each person. You still need to invest time and energy into relationships. You still need to do <em>a lot of things</em>. But those things will be easier with a stronger foundation</p>
<h2>None of this matters if you don’t care</h2>
<p>If you’ve read this far, I’m admittedly shocked. I’m also assuming that you are probably disappointed because none of the things I’ve outlined are new. Or novel. Or advanced.</p>
<p>They’re boring. And they’re basic. Sometimes I wonder if that’s why they’re overlooked.</p>
<p>Ironically, many of the processes outlined are used elsewhere to disservice of morale. Creating healthy morale often comes down to caring about it. Because if you care about it, you’re going to put in the work to improve it. You’re going to keep trying things until it gets better. You’re going to come up with better ideas than what’s in this stupid blog post.</p>
<p>But if you don’t care, then none of what I’ve shared will help. Nor will the advice of much smarter people. In retrospect, I should have led with this and saved us all a lot of time.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Own what’s yours]]></title>
            <link>/posts/own-whats-yours</link>
            <guid isPermaLink="false">/posts/own-whats-yours</guid>
            <pubDate>Tue, 04 Feb 2025 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>It’s 2025. Read.cv is shutting down. WordPress is on fire. Twitter has completely melted down. Companies are changing their content policies en masse. Social networks are becoming increasingly icy towards anything outside of their walled garden. Services are using the content you post to feed proprietary LLMs. Government websites appear to be purging data. It’s a wild time.</p>
<p>It’s hard to know where this bottoms out. And those who rely on these services are just along for the ride. Web 2.0 <em>seemed</em> like such a great idea in a more innocent time. We’re at a point where it’s only prudent to view third-parties as guilty until proven innocent. Not as some abstract, principled stance, but for our own direct benefit.</p>
<p>Now, more than ever, it’s critical to own your data. <em>Really</em> own it. Like, on your hard drive and hosted on <em>your</em> website. Ideally on your own server, but one step at a time.</p>
<p>The most common advice I give to junior designers is to <a href="/posts/write-like-you-design/">write</a>. I’m doubling down in the age of AI. Unique ideas and critical thinking are more valuable than ever. The craft of writing looks like it will go the way of cursive based on our current trajectory. People who can uniquely and <em>independently</em> articulate their own ideas have an advantage.</p>
<p>If I’m right, your unique and independent ideas will be increasingly valued. Don’t give that away. Control is ceded the minute it’s published on another service. How much control? Hard to say. It’s at the whims of their EULA, product direction, policy changes, and business health The most reliable way to publish ideas and have them remained published is on a site you control.</p>
<p>Yes, AI companies will almost assuredly scrape your site to feed their LLMs. Whether that will remain legal is questionable. But there’s no question when it&#8217;s willingly posted on their platform.</p>
<p>Is taking control of your content less convenient? Yeah–of course. That’s how we got in this mess to begin with. It can be a downright pain in the ass. But it’s <em>your</em> pain in the ass. And that’s the point.</p>
<p>Plus, people over-think self-publishing. It doesn’t take much. Words–that’s all. An image of two if you’re feeling fancy. But things like search, and all the other fluff associated with modern websites–nah. Less features is a feature.</p>
<p>This isn’t the post to tell you what tools you should or should not use. It doesn’t matter as long as you own what comes from it. It can be something like Obsidian. It can be plain-ol’ HTML and CSS. It doesn’t matter–as much as folks want you to think it does.</p>
<p>And this isn’t just about blogs. This relates to portfolios, code snippets, photos. You name it. What’s made by you should be owned and controlled by you.</p>
<p>Web 2.0 failed. <em>True</em> online sharing died a long time ago. So start taking. Take your ideas, your words, your work–and go home.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Craft and tools and jigs]]></title>
            <link>/posts/crafts-and-tools-and-jigs</link>
            <guid isPermaLink="false">/posts/crafts-and-tools-and-jigs</guid>
            <pubDate>Tue, 28 Jan 2025 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>I wish I would have gotten into woodworking when I was younger and had the time to pursue. It’s a practice that I now enjoy vicariously. I watch skilled people make all sorts of interesting things. And through that process, I’ve seen how the craft of woodworking relates to the craft of making software.</p>
<p>The software design practice remains in a self-imposed existential crisis related to craft. So seeing how actual craftspeople do their work seems pretty damned worthwhile.</p>
<h2>Craftspeople are toolmakers</h2>
<p>I learned early on as a crappy DIYer that good craft requires good tools. There are simple limitations to what a human being can do. This does not mean that skill doesn’t matter. The skill comes from how it’s directed through the right tools–“right” being both in function and quality.</p>
<p>There are the off-the-shelf tools, like chisels and planers and all sorts of other things. For software designers, that’ll typically equate to Figma or Sketch. Woodworkers tend to have many single-purpose tools–not to much for software designers. I think that’s a problem, but that’s another topic for another day.</p>
<p>Getting back to the topic–craftspeople are toolmakers. For all the off-the-shelf tools there are, there&#8217;s always that specific thing they can&#8217;t do. Which brings me to <a href="https://en.wikipedia.org/wiki/Jig_(tool)">jigs</a>.</p>
<p>Jigs are the custom tools that craftspeople create to enable them to do great work. In woodworking it’s often used to help make cuts with optimal precision. But, really, it can be used for anything. Jigs are what allow craftspeople to deliver quality predictably and faster.</p>
<p>Jigs are “fine, I’ll make it myself” made manifest. The tool they need doesn’t exist or is too expensive or is too much of a pain in the ass. So a jig is born. The craftsperson has a job to do and they’re not going to let a tool not existing stop them.</p>
<h2>Designers who are not toolmakers are not (effective) craftspeople</h2>
<p>I’m not sure I agree with the above statement, but I agree with it enough to keep it in. Crafting with high quality takes time–no matter the medium. Time is not generously handed out in the software industry. Hand-crafted, from-scratch quality in software is incredibly rare.</p>
<p>And it’s not like other craftspeople enjoy burning time. A master woodworker can almost assuredly create high quality without the use of jigs. But it would take considerably more time and be prone to mistakes (which takes time).</p>
<p>It doesn’t take a genius to connect less collective design time to the steady decline of software experiences. Designers simply have less and less time to focus on craft. So craft suffers.</p>
<p>Do jigs fix this? No. But they help. A designer that can speed up their work through design jigs has a distinct advantage. And every jig that cuts out a step or improves the precision of the output gives time back to focus on craft.</p>
<h2>No, Figma plugins are not jigs</h2>
<p>More specifically third-party plugins. And don’t get me wrong, plugins are great. They’re the closest thing we have to single-purpose tools. But jigs they are not.</p>
<p>While more focused than Figma (I mean, what isn’t nowadays) most are far too broad. Jigs are usually made for one person to do one job. Many plugins–especially popular ones–are made for many people and do many things.</p>
<p>Secondly, and this is just me, but I like things the way I like them. Why would I use a plugin that doesn’t work exactly how I want it to when I can make my own that does? That’s what’s great about jigs. They’re made especially for you because they’re made by you.</p>
<p>Lastly, I don’t trust 99% of them. It’s not immediately obvious what they’re doing or tracking behind the scenes. I have no control over updates or what the tool is going to be tomorrow. Today’s free plugin is tomorrow’s SaaS asking for my email and credit card. Call me cynical, but I’ve been burned too many times to rely on a random plugin.</p>
<h2>Jigs in software design</h2>
<p>So, if community plugins aren’t jigs, then what are? Well, it’s not complicated–it’s the things a designer makes for themselves to make something else. This can take many different forms.</p>
<h3>Local components</h3>
<p>The easiest jig a designer can make is a local Figma component. No, not a library component from their friendly-neighborhood design system. I am talking about a local, custom component for a project-specific need. I am shocked at how infrequently designers use local components. I am also shocked when those designers rail at long it takes to make global changes in their design. Local components are the epitome of design jigs.</p>
<h3>Figma scripts</h3>
<p>The next level up are Figma scripts. I typically use Scripter or, in cases where it works, the developer console. My custom Figma scripts usually follow the pattern of iterating through elements to:</p>
<ul>
<li>Replace all fills in a file from one color with another (no, Figma’s built-in functionality doesn’t work for this)</li>
<li>Layer counting</li>
<li>Remove all hidden layers in a file</li>
<li>Remove layers outside of its parent’s frame bounds</li>
<li>Remove floating point values layer attributes</li>
<li>etc.</li>
</ul>
<p>Notice the pattern here. Many of the examples are focused on cleanup and file hygiene. It’s not directly enhancing the design, but it’s making it cleaner and more precise.</p>
<p>And yes, Figma plugins exist for all these things, but without fail, I’ll need to do something that the plugin doesn’t do. And I’m at the point where I can make these “jigs” faster than I can navigate the Figma community plugin labyrinth.</p>
<h3>Your own Figma plugins</h3>
<p>Every once in a while a jig becomes a repeatedly used resource. At some point it makes sense to commit to making it a tool–or in our case, a plugin. These cases are more rare than we like to believe, so don’t hoard. But in cases where something is useful over, and over, it can be worth making it more permanent as a plugin.</p>
<p>But again, be careful how much time you spend on this. Figma isn’t going to be around forever and so the minute the next “it” design tool comes out, all this work is for naught.</p>
<h3>Single-purpose CLIs</h3>
<p>For any tooling that isn’t Figma-specific, I like to write Node-based scripts that I run in the terminal. If the tool is graphics-based, I output the result as a PNG or SVG. I can then import said output into Figma or whatever tool comes next.</p>
<p>What I like about this is Node and Javascript are not going to depart this world anytime soon. I can rely on these tools working far after Figma goes offline.</p>
<p>And, by all means, don’t limit yourself to only automating design tasks. How much of our day is absorbed by not design? Build jigs for note taking, or improving focus or whatever helps you do your job better.</p>
<h2>Toolmaking is a craft–for the sake of craft</h2>
<p>I’m not a believer in “work hard or work smart”. I think good work takes hard work and smart work. I also think it requires a different line of thinking for designers who want to focus on craft. The outcome alone cannot be the focus. There needs to be as much thought and planning put into how the hell that outcome can actually be produced.</p>
<p>Designers love to create. I encourage them to do just that. Create things that help you create better things. Time is precious. White-knuckling through repetitive, error-prone tasks lead to lower quality. Use all the skills you’ve built up to help enhance the way you work. And if you don’t know how to code yet, here’s a nudge to learn. Unless you enjoy white-knuckling through repetitive, error-prone tasks.</p>
<p>If the design practice wants to elevate craft, it’s going to need a healthy dose of toolmaking.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Consistency means nothing]]></title>
            <link>/posts/consistency-means-nothing</link>
            <guid isPermaLink="false">/posts/consistency-means-nothing</guid>
            <pubDate>Mon, 30 Dec 2024 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>Words create a false sense of agreement. My line of work relies on many words loaded with meaning, but lacking concrete definition. Words like quality, craft and simplicity. These are abstract words. And in the abstract, people generally agree on their meaning. But definitions stray wildly once those abstract concepts get specific and real.</p>
<p>This is a problem–a big one. It represents a single instance of a more pervasive issue. where People use the same words to communicate different things. People assume alignment when reality is quite the opposite.</p>
<p>The word consistency is a loaded term in my work. To some it’s a mantra, to others it’s a slur. If you ask five people what consistency is, you’ll get ten different answers. Some people think it means everything looks and works <em>exactly</em> the same way. Others are a little more loosey-goosey in interpretation. These differences matter.</p>
<p>One thing I’ve come to believe in is the power of shared understanding. It seems so obvious, but it&#8217;s shockingly rare in organizations. It&#8217;s impossible to have a meaningful discussion if the words used don&#8217;t line up.</p>
<p>Consistency is a broad term. More specificity is needed to be useful for the context of design. Here’s my imperfect definition of consistency in regards to design:</p>
<blockquote>
<p>The characteristic of following a logical, perceptible, and predictable pattern.</p>
</blockquote>
<p>Those three attributes–logical, perceptible, and predictable–are all important.</p>
<ul>
<li>Logical means that decisions are intentional, rationale and rule-based. And those rules lack contradictions. In short, “2+2” always equals “4”.</li>
<li>Perceptible means that the logic is simple enough to be [discernible]. There are plenty of logical formulas that don&#8217;t seem logical. The logic needs to be clear to the end user, otherwise it&#8217;s worthless.</li>
<li>Predictable means that not only can they notice the logic, but that logic helps them know what to expect. Either consciously or subconsciously, people should be able to “finish the sentence”.</li>
</ul>
<p>This is my definition of consistency and what I use to assess consistency in a design (or lack thereof). Mind you, this alone is severely lacking in detail to be actionable. There’s still plenty of room for interpretation in this definition. This, definition, would need serve as a nucleus for examples and use cases to prove useful.</p>
<p>A definition supported by concrete examples and detail is a great start. But sadly it doesn’t make things easier. Consistency in and of itself isn’t a “thing”. It’s not a binary state. It’s a spectrum. On one side there&#8217;s the complete lack of consistency–disorder. On the other there&#8217;s absolute consistency–homogeny. And then there&#8217;s everything between. Each has its place</p>
<p><img src="spectrum.svg" alt="Disorder, homogeny and everything between"></p>
<p>Modern software is a paradox. On one hand it&#8217;s more conformist than ever. On the other hand, most are hilariously inconsistent in execution. The majority of software from large orgs leans towards disorder. This is often due to how large orgs operate. Siloed teams make siloed decisions to support their siloed goals. Most decisions are quite logical in their independent vacuum. But those independent logical decisions end up seeming quite illogical as a whole. It&#8217;s common knowledge what the negative outcomes are. It&#8217;s not a great place to be–except when it is. Sometimes a little surprise can shake things up. A little goes a long way, but it has its place.</p>
<p>Homogeny is typically not possible in a large organization. The sheer number of contributors and the pace of development make that unrealistic. I advise against even trying. I’ve observed attempts that resulted in square-pegging round holes at scale. It’s illogical to force things together that don’t logically fit. Consistency for the sake of consistency isn’t consistency–it’s circular logic. And even if absolute consistency is achieved, it could come at the cost of a boring experience. Monotony can be just as bad as chaos. That said, there are plenty of situations where you want to keep things nice and boring. Like forms.</p>
<p>There’s a time and a place for everything. A little chaos can be helpful to shake things up. On And yes, there are rules that should be inflexible.. But 90% of the time you’re aiming for the messy middle of consistency.</p>
<p>This is what makes this a difficult topic. Each organization’s relationship with consistency is going to be slightly different. Their ideal amount of consistency will vary as well. But establishing that relationship and finding that right amount doesn’t just happen. It requires conversations, debate and (healthy) conflict. Those things don&#8217;t happen without a shared understanding of <em>what the hell consistency really, actually means</em>.</p>
<p>Designers like to design. Developers like to develop. But neither can do their job well without a shared understanding and common language. Words like quality, craft, simplicity and, yes, consistency need definition. And not a dictionary-level definition. They need exhaustive, gory, and unambiguous detail. They&#8217;ll remain contentious and unreachable topics until that happens.</p>
<p>Consistency is essential. But to what degree, and in what situations? That’s up to each organization to decide. But without definition, this mess will persist.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[What I learned from making my own design system]]></title>
            <link>/posts/my-own-design-system</link>
            <guid isPermaLink="false">/posts/my-own-design-system</guid>
            <pubDate>Thu, 25 Jul 2024 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>Knowing isn’t understanding. Books are a great way to know. Understanding takes first-hand experience. A person can know that having kids will change their life. They won’t fully understand until they’re living it.</p>
<p>Design system teams are just as vulnerable to the knowing/understanding gap. A team can <em>know</em> how people use it. They can <em>know</em> what’s working and what’s not. But they may not understand due to lack of first-hand experience. The <em>why</em> behind the <em>what</em> is missing. And <em>why</em> is pretty damned important when it comes to design systems.</p>
<p>And this is why I decided to make a design system for my personal websites. It’d been a while since I drank my own kool aid. Which, for the record, I am an ardent drinker of. I wanted to once again be on the consumer side to refresh my first-hand experience. It didn&#8217;t hurt that my websites were a hot mess. And I keep telling people that design systems can fix that kind of thing…</p>
<p>This article isn’t about the design system I made. It’s about what I better understand from going through the process. Below are the things that stood out.</p>
<h2>You can make a design system too late</h2>
<p>I typically warn teams not create a system before it makes sense. Going through this process made it clear how crappy too late can be as well. I’d never been the engineer tasked to inject a design system into a mature codebase. It&#8217;s not fun. Now I <em>understand</em> even more why design system pushes often coincide with redesigns.</p>
<p>Clearly, it’s possible to adopt a design system after it’s “too late”. But it’ll be painful. Lesson learned. There’s an ideal window for injecting a design system. I don’t think that window is uniform, but I’d wager the ramifications are.</p>
<h2>Breaking changes suck</h2>
<p>People know breaking changes suck. But experiencing that suck is something else. Early in the process I made various half-baked components/patterns. Against my better judgement, I implemented them into the websites nonetheless. I then had to refactor every instance once it was clear the components weren&#8217;t ready. Not fun. That kind of work is ancillary and avoidable. Better planning would have avoided find-and-replace hell.</p>
<p>Behind every “oopsie” are people dealing with the fallout. There are two solutions:</p>
<ol>
<li>Make sure the design system cleans up after its own messes. It can be code mods or assisting with refactors. Anything to ease the pain.</li>
<li><em>Don’t make the mess to begin with</em>.</li>
</ol>
<p>There’s a time and a place for messes. Thrash can be healthy in a design system’s youth. But make sure you have a plan to blunt the impact.</p>
<h2>The least amount of technology is the best technology</h2>
<p>I didn’t use React for my design system. I didn’t use Vue, or whatever framework is cool today. I didn’t even use web components. I just used HTML and CSS. And that made this process <em>so much simpler</em>.</p>
<p>There was no installation process. No command line BS. No library dependencies. I wrote CSS, saved the file and viewed the results. There was a straight line from start to destination.</p>
<p>I never focused on framework errors or compatibility issues. We know heaping technology on top technology creates a mess. I <em>knew</em> messes weren’t a good thing, but experiencing reminded me <em>why</em>. Messes are a distraction. My focus had to include how all added technologies worked (and worked together). Sure, they were convenient, but at a cost. I understand the value of frameworks in a large team environment. But this experience further reinforced to keep things as simple as possible. Add with extreme caution.</p>
<p>Design systems aren&#8217;t immune from this. They&#8217;re an abstraction and can represent a detour from the direct line of goal to destination. The people who use your design system just want to get their job done. And your design system is yet another thing they need to keep track of.</p>
<h2>&#8220;Just because&#8221; is a viable excuse</h2>
<p>My websites had numerous instances of similar patterns with <em>slightly different executions</em>. Not out of malice to myself. <em>Just because</em>. I wasn’t thinking ahead. I forgot how I did it in the past. My focus was elsewhere. Maybe all the above.</p>
<p>Designers and engineers think of a design system like a carpenter thinks of a hammer. Which is to say they don’t. They’re thinking about the goal. So when people deviate from a design system, or miss some rule, there’s a 99.9% chance it’s because they were focused on other things&#8230; Like the goal. The more the design system is detached from their goal, the more <em>because</em> happens.</p>
<p>This was reminder that deviation isn’t usually from malice, but <em>just because</em>. The more the design system helps reach the goal, the more people will naturally use (and master) it.</p>
<h2>Not yet doesn&#8217;t mean not ever</h2>
<p>My design process focuses on getting the idea out of my head as quick as possible. I don’t want to spend time polishing a turd. Get things right, <em>then clean up</em>.</p>
<p>If I’m focused on the problem, I’m focused on <em>the problem</em>. Not hunting for components or fiddling with properties. I want the straightest path to the objective. The more the design system wrinkles that path, the less it fits in the process.</p>
<p>There’s three options to address this:</p>
<ol>
<li>Make the design system so natural to use that it becomes the default way to work.</li>
<li>Bake in time to translate rough ideation to use the system.</li>
<li>Both.</li>
</ol>
<p>I’d say the realistic answer is both. Of course it’d be great for a design system to create a flow state. That’s not how everyone works though. Some people prefer to wing it and get ideas out of their head. I am one of those people, so I can relate.</p>
<p>Seeing myself work this way reinforced that it’s OK to not use a design system. Careful pushing when folks use it, as long as it <em>eventually happens</em>.</p>
<h2>Different can be a barrier</h2>
<p>I have years of conditioning to “trust the system”. I still had a knee-jerk dislike of the subtle changes my design system had on my websites. From, <em>my own system</em>. Yes, ironic. I didn’t think the changes were <em>bad</em>. But, I was used to the <em>old thing</em>.</p>
<p>It’s fair for design system consumers to be skeptical of changes. It’s fair for them to be unhappy. Change management is part of the joy of working on a design system.</p>
<p>Be thoughtful of change. Not too much, not too frequent, not too abrupt. Change isn’t inherently good or bad. But either way, it demands others’ time.</p>
<h2>The system made me naturally sweat the details more</h2>
<p>This process exposed how much more investment I’d put into detail when it was in the system. I could shrug off a rough edge if it only showed up once. Not so much if it would be <em>everywhere</em>.</p>
<p>This can be a great forcing function for quality. It’s easier to sell investment in quality when the work will be far reaching. There’s a clearer bang for the buck. Conversely, it stings a little more to knowingly ship crap across the <em>entire product</em>.</p>
<p>This is a strong case for measuring and driving system adoption. Design systems can dramatically improve quality in a fraction of the effort. But it only if it’s used.</p>
<h2>System design is a way of thinking</h2>
<p>The design systems practice is being held back by its focus on artifacts. Tokens and components are an important part of design systems. But they are an output. They are the byproduct of unifying separate, but related patterns in an interface. The thinking behind that output is the real value&mdash;and its applications are endless.</p>
<p>This realization took the shape of my sites’ build scripts. They were unnecessarily disparate. Different build destinations, different naming conventions, some would clear the build directory, others wouldn’t. These variances didn’t lead to better outcomes. They were only a distraction.</p>
<p>I refactored my build scripts to work from a common codebase. All sites follow a standard convention and structure.This wouldn’t traditionally be considered a design system effort. But it required the same thinking and returned the same benefits. If it quacks like a duck&#8230;</p>
<p>This experience cemented my opinion. System designers should expand beyond current definitions of design systems. Find other instances of related-yet-unnecessarily-disconnected things. Connect the dots. Create order from chaos. Reap the same rewards.</p>
<p>There’s a whole world outside our little house we’re cloistered in. We just need to step out the door&#8230;</p>
<h2>Don’t take my word for it</h2>
<p>Now you <em>know</em> what I learned, but the lesson here is to <em>understand for yourself</em>. Get your hands dirty, form your own opinions based on direct experience. Don’t buy what I or anyone else is saying until you’ve lived it yourself. I bet it’ll impact your thinking more than you know.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[AI doesn’t have to be horrible]]></title>
            <link>/posts/ai-doesnt-have-to-be-horrible</link>
            <guid isPermaLink="false">/posts/ai-doesnt-have-to-be-horrible</guid>
            <pubDate>Wed, 19 Jun 2024 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>I like Dave Rupert. Never met the guy, but I like him nonetheless. I enjoyed <a href="https://daverupert.com/2024/02/robo-barf/">his thoughts on AI</a> and decided to write my own. I find writing useful to get my head in order. AI isn&#8217;t going away, therefore it&#8217;s only responsible to form a point of view. So unfortunately the world now has another AI blog post. I’m sorry.</p>
<p>I’m skeptical of AI. Less because of the tech and more because of those ushering it into the world. Behind the bluster and marketing-hallucinations is something that could provide value. But, unfortunately, it doesn&#8217;t appear headed in that direction.</p>
<p>I&#8217;ve been noodling with various AI tools off and on for a year now. Most of my experiences have not been what I&#8217;d consider extraordinary. But there are three use cases that I think have real potential.</p>
<h2>Your own brain in a jar</h2>
<p>I’ve been using Google’s NotebookLM for the past few weeks and feeding it all my public content. The results are vacillate between so-so and promising. Nonetheless, I must laud Google&#8217;s execution of AI with this tool. NotebookLM focuses on referencing existing data as opposed to conjuring up slop. I&#8217;ve seen more nuanced and sophisticated responses as the corpus of data increases. It&#8217;s becoming a useful utility to query my past thoughts/musings.  Essential? Not by a long shot, but intriguing.</p>
<p>This could be a valuable utility in the corporate setting to train on team meeting transcripts. A team can rack up dozens of meeting hours a week. Having a team brain-in-a-jar has limitless applications. It can enable quick recall, act as a temporary proxy when people aren’t available to respond&mdash;just to name couple. It also has limitless ethical risks. I’m less enthusiastic of this application given its penchant for abuse.</p>
<p>But, I see potential as a sole user my own information, I see potential here. I plan to continue exploring this avenue.</p>
<h2>Reductive AI could be incredibly helpful</h2>
<p>I have a growing belief that speed is not a problem within tech. Improved tools and processes have made productivity higher than ever. Hell, design systems can generate 20%-40% efficiency gains on their own. I’m starting to wonder if all our progress in efficiency is, in turn, creating inefficiency. Now that things can be output so quickly, we’re struggling to keep track of all that extra stuff.</p>
<p>I don’t think we need technology’s help in making more stuff. Stuff deficit isn’t our problem. The last decade of tech has been a continual slide towards more. More features, more meetings, more messages, more documents. More everything. In my experience, the majority of that stuff is unorganized and/or unnecessary. Generative AI is dousing our existing dumpster fire with napalm.</p>
<p>Instead of using AI to make stuff, we should be using it to get rid of stuff. AI can help pull signal from all our noise. I see three main themes where AI could help here:</p>
<ol>
<li><p>Aggregation: It’s hard to keep track of what everyone is working on. The larger the company, the harder this becomes. AI could improve visibility through aggregating team activity and output. I dream for a way to see what every design team is up to without resorting to hours of Figma-stalking. But it&#8217;s not only a design problem. It&#8217;s universal and acts as a constant impediment.</p>
</li>
<li><p>Organization: One thing I’ve been noodling on is the idea of corporate librarians. This imaginary role would collate company information for logical access. Our current reality of corporate wikis and document collections are a mess. If corportations won&#8217;t librarians, the second best option is to have AI take a crack at it. My hope is a well-trained AI could continually organize, index and prune company data. Maybe then finding that one HR doc wouldn&#8217;t be like embarking on an odyssey.</p>
</li>
<li><p>Extraction: We have so many documents. So many notes. So many transcripts, emails, messages. Imagine simplifying the buffet of artifacts into more digestible tapas—with citations. I worry about hallucinations, but citations should blunt this concern. And any potential to reduce information clutter is worth a bit of risk.</p>
</li>
</ol>
<h2>Outputting average as an advantage</h2>
<p>People write differently. Often very differently. There&#8217;s a slim handful of company employees that know its content/writing guidelines. Even less follow them.</p>
<p>One of the criticisms of AI is that it produces “average”. But average can be good. It&#8217;d be great if all company documents were written the same way. Same typeface, same styling, same indents. Same verbiage, same tone. Same everything. I will never let AI touch my personal writing, but I would understand and welcome it in a team environment.</p>
<p>There&#8217;s tremendous upside to removing the cognitive overhead of learning someone&#8217;s &#8220;written dialect&#8221;. There&#8217;s even greater upside to removing thousands of them.</p>
<h2>None of the above feel generative</h2>
<p>I understand the potential of AI—I’m not that much of a dummy. But the biggest AI hallucination is us thinking it&#8217;s something it isn&#8217;t. I remain stubbornly convinced that we’re steering this tech in the wrong direction. I think there&#8217;s a world where AI could provide true utility without much of the (perceived or real) SkyNet vibes. But those applications are far smaller in ambition and much more boring. So I&#8217;m not holding my breath on my ideas taking off.</p>
<p>We have made a mess of the internet—on many levels. We may have backed into a way to fix it with AI. Ironically, and also unsurprisingly, we’re choosing to double down on more of the same.</p>
<p>I’m hoping for the best and planning for the worst.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Everybody reads]]></title>
            <link>/posts/everybody-reads</link>
            <guid isPermaLink="false">/posts/everybody-reads</guid>
            <pubDate>Mon, 29 Apr 2024 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[Despite the contrary.]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Design systems and the never-ending job of buy in]]></title>
            <link>/posts/design-systems-buy-in</link>
            <guid isPermaLink="false">/posts/design-systems-buy-in</guid>
            <pubDate>Thu, 18 Apr 2024 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[Boy, I'm sure glad we figured this problem out!]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Color is a four letter word]]></title>
            <link>/posts/color-is-a-four-letter-word</link>
            <guid isPermaLink="false">/posts/color-is-a-four-letter-word</guid>
            <pubDate>Thu, 07 Mar 2024 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>Profanity can be a remarkable way to get a point across. The trick is sparse use in the right situation. The same goes for color. Yes, color turns heads. Flowers figured that out hundreds of million years ago. That can be good or bad.</p>
<p>Color is both potent and volatile. What’s vibrant to one person may be gray to another. A certain hue can mean good luck in one culture and <em>uh oh</em> in another. What reads as violet on one device looks like navy blue on another. Some people really like green. Others don’t. Why? Because.</p>
<p>Many colors clash. Put red and magenta together and look at it for 30 seconds. I dare you. Sometimes an interface controls every pixel on the screen. But usually not. A beautiful color in isolation can look like garbage placed next to the wrong photo.</p>
<p>A lot about color falls under “it depends”&mdash;which makes it tricky. It’s super effective. Except when not. That a tough foundation to build from.</p>
<h2>An interface is a white wall</h2>
<p>The folks who designed the MoMA knew what they were doing. If you haven&#8217;t been, prepare to see a lot of white walls. Those white walls are a figurative blank canvas to display art. The walls stay out of the way to let the art be art. Interfaces play the same role&mdash;a means to an end.</p>
<p>Think about some of the most-used software today. They’re galleries for content. Content made people who didn&#8217;t design the interface. Imagery, videos, avatars - all likely using a lot of color. Sure, there are situations where an interface needs snatch attention. That&#8217;s typically when I see color show up the most. But, there are more alternatives.</p>
<p>Like words. It turns out <a href="https://pjonori.blog/posts/writing-is-design/">words are <em>great</em> at communication</a>. Start there. Words are a gateway drug to typography. Those two, plus spacing, pacing, proportion, contrast and form do wonders. All without needing to dip into color.</p>
<h2>Gray goes a long way</h2>
<p>An interface that relies on color to work is an interface that doesn&#8217;t work. I advise starting design in grayscale to ensure it works there first. Yes, that limits options, but there are 256 shades of gray to work with. That’s a lot. Most folks (including myself) aren&#8217;t using those 256 options to the fullest.</p>
<p>Every single one of us are guilty of slapping down white or black and moving on. That’s a problem because white and black are hard limits. There’s no up or down to go from there. What happens when an element needs stronger emphasis than black or white? Color is the obvious fallback.</p>
<p>I avoid using black for my default positive value. I pull the shade back to <em>feel</em> like black when set on white but still maintaining separation when paired with pure black. This gives extra room to <strong>go to 11</strong> when needed. Color has a hard floor/ceiling like black and white. There’s no room for <em>11</em> once color intensity is maxed out. I recommend the same approach when using color.</p>
<p><img src="intensity-ramp.svg" alt="">
<em>Shocker: Increasing the intensity of a color intensifies its visual prominence. And this can be done in a way that will works in grayscale.</em></p>
<p>Errors come in all sorts of shapes, sizes and severity. Some errors are <em>oh shucks</em>, others are <em>OH SHIT</em>. Color can be a great supplement to distance <em>shucks</em> from <em>SHIT</em>.</p>
<h2>Restraint is key</h2>
<p>My personal style is to remove color whenever possible. I acknowledge that I&#8217;m on the extreme end of the spectrum. No, I do not think this is appropriate for all use cases. But a little color can go a long way. Think <em>better use of less</em> as opposed to <em>more on top of more</em>. That’s a <a href="https://pjonori.blog/posts/systems-math-explosions/#:~:text=Let%E2%80%99s%20take%20the%20%E2%80%9CHello%20world%E2%80%9D%20of%20complexity%20explosions%20for%20design%20systems%E2%80%94color%20palettes.">recipe for trouble</a>.</p>
<p><img src="color-combinations.svg" alt="">
<em>Keeping two colors working together isn&#8217;t too tough. Keeping 144 working together is not going to be fun.</em></p>
<p>I&#8217;m partial to <a href="https://pjonori.blog/posts/analysis-of-style/">quantitatively dissecting design</a>. It offers a different lens to put work through to separate <em>the feels</em> from <em>the reals</em>. I like applying budgets to design work. Not as a draconian, freedom-squelching overlord. Rather, something that keeps people aware of decisions to avoid going down a bad road. Sometimes a small nudge towards restraint can avoid big hassles.</p>
<p>I’ve begun to experiment with tools to color budget. These tools would track color usage on a screen and relay it&#8217;s under or over budget. But the devil is in the details. For example, gray-blue is not the same as BLUE-blue. Those two colors should have different &#8220;costs&#8221; in a budget. A lot needs to be figured out, but I&#8217;m intrigued.</p>
<p><img src="intensity-vs-area.svg" alt="">
<em>Which square draws more attention? Hint: It&#8217;s not the bigger one.</em></p>
<p>This is something I want to test out on my own work to see how it changes my process, if at all. Things like spellcheck are now a given in writing tools. I want to start trying to use spellcheck-equivalents in my design process. I&#8217;m hopeful this can ensure I&#8217;m being economical in color usage.</p>
<h2>Color is great&mdash;no, really</h2>
<p>It may seem like I have a beef with color. I guess I do to some extent. Not with color itself, but how it&#8217;s used. I think that comes down to underestimating its potency and volatility. By all means, use color. But treat it like using a four letter word in an all-hands meeting. Make it count.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Write like you design]]></title>
            <link>/posts/write-like-you-design</link>
            <guid isPermaLink="false">/posts/write-like-you-design</guid>
            <pubDate>Wed, 28 Feb 2024 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[Designers tend to be scared of writing. Which is funny because they already]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[I’m making a mobile app]]></title>
            <link>/posts/making-a-mobile-app</link>
            <guid isPermaLink="false">/posts/making-a-mobile-app</guid>
            <pubDate>Wed, 03 Jan 2024 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[I’m tired of using apps that I don’t enjoy, so I’ve decided to make my own.]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[An over-analytical analysis of style]]></title>
            <link>/posts/analysis-of-style</link>
            <guid isPermaLink="false">/posts/analysis-of-style</guid>
            <pubDate>Mon, 18 Dec 2023 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p><a href="https://stephango.com/style">Style is consistent constraint</a>. I&#8217;ve never heard a more concise and accurate description. This is a topic near and dear to my heart given I&#8217;ve worked to develop a style in design and photography.</p>
<p>You can find stimulation in strange places. I watched The Batman with comic-book-movie expectations and little anticipation. Then I watched it again. And again. Numerous times. Its style grabbed me. Then I watched the Nolan-era Batman movies to see if it caused the same reaction. Nope. It seemed worthwhile to dig into why.</p>
<p>I dissected the elements of The Batman compared to Nolan’s The Dark Knight to examine each style. With any luck, I’d glean some nugget of insight. </p>
<h2>Silence says something</h2>
<p>The Batman’s dialog is sparse. Conversations are spread out. Lines can often be one or two words. A lot is said without saying anything. The brevity alone developed a mood. The Dark Knight in comparison felt heavier in dialog. It wasn’t <em>bad</em>, but noticeably more of it. </p>
<p>I parsed the subtitles and visualized all lines of dialog in each movie to better understand their differences. The Dark Knight is visualized on the left and The Batman on the right. The diameter of each visualization reflects duration given The Batman is considerably longer (165 minutes versus 138 minutes). Each line in the visualization represents a line of dialog. Its length reflects the line’s number of words.</p>
<p><img src="dialogs.svg" alt="The subtitles of The Dark Knight and The Batman compared.">
<em>The subtitles of The Dark Knight (left) and The Batman (right) compared.</em></p>
<p>The Dark Knight is much more <em>dense</em> in dialog with far fewer breaks. In contrast, The Batman’s dialog is more spread out with more instances of shorter dialog. </p>
<p>According to <a href="https://www.kaylinpavlik.com/long-winded-actors-and-movies-with-the-most-dialogue/">this analysis</a>, The Batman is considerably lower than the median number of spoken words by any genre listed in that article.</p>
<table>
<thead>
<tr>
<th>Genre</th>
<th>Words per minute</th>
</tr>
</thead>
<tbody><tr>
<td>Comedy</td>
<td>98</td>
</tr>
<tr>
<td><strong>The Dark Knight</strong></td>
<td><strong>95</strong></td>
</tr>
<tr>
<td>Crime</td>
<td>84</td>
</tr>
<tr>
<td>Drama</td>
<td>83</td>
</tr>
<tr>
<td>Biography</td>
<td>79</td>
</tr>
<tr>
<td>Animation</td>
<td>77</td>
</tr>
<tr>
<td>Adventure</td>
<td>76</td>
</tr>
<tr>
<td>Action</td>
<td>71</td>
</tr>
<tr>
<td><strong>The Batman</strong></td>
<td><strong>65</strong></td>
</tr>
<tr>
<td>Horror</td>
<td>63</td>
</tr>
</tbody></table>
<p>The examination confirmed the initial observation&mdash;nearly a third less dialog per minute. The Batman&#8217;s skews towards a noir crime thriller which only accentuates its contrast to The Dark Knight. Less talking gave other elements prominence. The atmosphere played a larger role. I understood how succinct language impacts user interfaces, but this further reinforced the power of brevity.</p>
<h2>A persistent aesthetic</h2>
<p>The look of The Batman has been discussed ad nauseam. Of note is the narrow use of color used throughout The Batman. It’s dark, it’s desaturated save for the occasional bloom of red or orange. The Dark Knight in contrast had a wider spectrum of hues, saturations and brightnesses. Scenes’ color grading varied realistic and stylistic. The colors of The Dark Knight never felt discordant, but more varied.</p>
<p>Below are frames from similar scenes in each movie. First being The Dark Knight, the second The Batman. I observed less color continuity in The Dark Knight compared to The Batman. </p>
<p><img src="the-dark-knight-shots.jpg#tocontent" alt="Foo">
<em>Scenes from The Dark Knight &copy;Warner Bros.</em></p>
<p><img src="the-batman-shots.jpg#tocontent" alt="Foo">
<em>Scenes from The Batman &copy;Warner Bros.</em></p>
<p>I attempted to get confirmation by extracting dominant colors of every second from both movies. Each vertical line represents each second’s frame. </p>
<p>The Dark Knight has a diverse spread of hues, saturations and brightness.</p>
<p><img src="the-dark-knight-hi.svg" alt="A timeline of The Dark Knight’s dominant color palette, broken down by second.">
<em>A timeline of The Dark Knight’s dominant color palette, broken down by second.</em></p>
<p>Whereas the Batman is far more suppressed&mdash;especially in situation and brightness.</p>
<p><img src="the-batman-hi.svg" alt="A timeline of The Batman’s dominant color palette, broken down by second.">
<em>A timeline of The Batman’s dominant color palette, broken down by second.</em></p>
<p>Using the dataset of unique colors taken from a frame every second, I correlated the following color palette ordered by frequency:</p>
<p><img src="color-wheels.svg#tocontent" alt="The most prominent colors from The Dark Knight and The Batman, ordered by frequency.">
<em>The most prominent colors from The Dark Knight (left) and The Batman (right), ordered by frequency.</em></p>
<table>
<thead>
<tr>
<th></th>
<th>The Dark Knight</th>
<th>The Batman</th>
</tr>
</thead>
<tbody><tr>
<td>Unique colors</td>
<td>6059</td>
<td>2884</td>
</tr>
<tr>
<td>P10 lightness</td>
<td>5.1%</td>
<td>4.7%</td>
</tr>
<tr>
<td>Median lightness</td>
<td>10.8%</td>
<td>6.9%</td>
</tr>
<tr>
<td>P90 lightness</td>
<td>40.2%</td>
<td>12.0%</td>
</tr>
<tr>
<td>P10 saturation</td>
<td>4.3%</td>
<td>3.7%</td>
</tr>
<tr>
<td>Median saturation</td>
<td>14.9%</td>
<td>10.3%</td>
</tr>
<tr>
<td>P90 saturation</td>
<td>41.2%</td>
<td>26.7%</td>
</tr>
</tbody></table>
<p>There’s a dramatic difference in range of lightness and saturation between the two films which leads to less variance in overall palette. The Batman is dark. For some, <em>too dark</em>. But that stylistic constraint helped create a cohesive visual style. </p>
<p>The wider range of colors in The Dark Knight aren’t distracting, but they didn’t reinforce the atmosphere. Shots of Gotham’s skyline in The Dark Knight could have been a skyline from <em>any</em> city. The constant darkness of The Batman gave its environment a personality of its own. Gotham never broke character. </p>
<p>It’s tempting to inject color in the design of experiences, but this movie is a lesson in the value of <em>less</em>. It&#8217;s surprising just how little is needed.</p>
<h2>Subtraction by addition</h2>
<p>The Batman is known for its use of vintage and intentionally-detuned lenses. Those lenses introduced corner distortion and sharpness falloff which limited the frame’s &#8220;workable&#8221; area to its center. The film also went through the process of transferring digitally-recorded footage to film to introduce grain and overall softness. There&#8217;s a clear difference in acuity, which made The Batman more visually pleasing to me. </p>
<p>The Dark Knight in comparison appears technically flawless. Scenes are sharp with no distortion or aberration. I would have assumed a “cleaner” frame would be less distracting, but I had the opposite response. </p>
<p>Take this scene from The Dark Knight. The frame is technically clean and sharp. Which brings attention to the antennas, building details and Chase sign in the lower-left corner of the frame. Those details don’t add value.</p>
<p><img src="the-dark-knight-depth-of-field.png#tocontent" alt="Foo">
<em>Scene from The Dark Knight &copy;Warner Bros.</em></p>
<p>In comparison, almost <em>everything</em> in the frame below is out of focus. Its corners are heavily distorted. Paradoxically, The Batman reads cleaner in composition <em>because</em> of its lack of detail.</p>
<p><img src="the-batman-depth-of-field.png#tocontent" alt="Foo">
<em>Scene from The Batman &copy;Warner Bros.</em></p>
<p>In addition to suppressed focus, The Batman frequently shot in rain. The random streaks of rain created visual interference  further softened background detail, which gave the main subject more prominence. </p>
<p><img src="the-batman-shot-5.png#tocontent" alt="Foo">
<em>Scene from The Batman &copy;Warner Bros.</em></p>
<p>The results from a sharpness detection script confirmed just how much softer The Batman was compared to the The Dark Knight. Each column represents a minute in the film with each dot being a second’s frame sharpness. The sharper the dot, the sharper the overall frame. The Dark Knight shows a strong variation between frame sharpness.</p>
<p><img src="the-dark-knight-sharpness.png" alt="A second-by-second analysis of frame sharpness in The Dark Knight.">
<em>A second-by-second analysis of frame sharpness in The Dark Knight.</em></p>
<p>The Batman is significantly softer both in magnitude and consistency from frame to frame.</p>
<p><img src="the-batman-sharpness.png" alt="A second-by-second analysis of frame sharpness in The Batman.">
<em>A second-by-second analysis of frame sharpness in The Batman.</em></p>
<table>
<thead>
<tr>
<th></th>
<th>The Dark Knight</th>
<th>The Batman</th>
</tr>
</thead>
<tbody><tr>
<td>P10 sharpness value</td>
<td>1.06</td>
<td>0.34</td>
</tr>
<tr>
<td>Median sharpness value</td>
<td>2.49</td>
<td>0.84</td>
</tr>
<tr>
<td>P90 sharpness value</td>
<td>5.05</td>
<td>2.08</td>
</tr>
</tbody></table>
<p>As an interesting comparison, below are the sharpest frames detected from each movie. The Dark Knight has a large depth of field with seemingly everything in focus.</p>
<p><img src="the-dark-knight-cityscape.png#tocontent" alt="Foo">
<em>Scene from The Dark Knight &copy;Warner Bros.</em></p>
<p>Whereas even the sharpest frame in The Batman is considerably softer in comparison. That lack of detail ends up <em>saying more</em>.</p>
<p><img src="the-batman-cityscape-2.png#tocontent" alt="Foo">
<em>Scene from The Batman &copy;Warner Bros.</em></p>
<p>I am dogmatically reductive which made this result fascinating. I believed that simplicity relied on removal. I still believe that&mdash;but sometimes the best way to remove is to add. The Batman’s additive process of lens distortion/falloff, film grain and background visual noise removed more significant detail. I’m unsure how I will employ this in my work, but I’m eager to try.</p>
<h2>Less moving, moving parts</h2>
<p>The Batman stood out with how simple the cinematography was. There were less cuts, less camera movement. The viewer was given an unchanging scene to simply take in. It was vindicating to find this quote:</p>
<blockquote>
<p>We had such great sets. We had such great actors. It&#8217;s such a great script. I would ask the question, why do you have to move the camera for no reason? If you’re moving the camera for no good reason, I feel like you’re doing all of your parts a disservice.</p>
<p>&mdash;<cite>Greig Fraser</cite></p>
</blockquote>
<p>After watching The Batman, it felt like The Dark Knight was in constant movement. More cuts, pans, zooms and shake. It was constant stimulus. </p>
<p>I wanted to see just <em>how different</em> the style was. I ran a visual diff from a frames a second apart. I expected a difference, but the magnitude was surprising. </p>
<p>First is the second-to-second frame difference for The Dark Knight. Each column represents one minute of film. Dark purple represents small change, where bright yellow represents high change. The Dark Knight has significant deltas.</p>
<p><img src="the-dark-knight-diff-new.svg" alt="Foo">
<em>Visual diff by second in The Dark Knight.</em></p>
<p>The Batman is <em>substantially</em> muted in comparison, with only a single 3 to 4 minute stretch having the similar levels of change.</p>
<p><img src="the-batman-diff-new.svg" alt="Foo">
<em>Visual diff by second in The Batman.</em></p>
<table>
<thead>
<tr>
<th></th>
<th>The Dark Knight</th>
<th>The Batman</th>
</tr>
</thead>
<tbody><tr>
<td>Mean % of pixels changing per second</td>
<td>65.1%</td>
<td>34.9%</td>
</tr>
<tr>
<td>Median % of pixels changing per second</td>
<td>69.4%</td>
<td>28.9%</td>
</tr>
<tr>
<td>P10</td>
<td>29.3%</td>
<td>7.4%</td>
</tr>
<tr>
<td>P90</td>
<td>93.8%</td>
<td>73.6%</td>
</tr>
</tbody></table>
<p>My hypothesis is that the lack of change in The Batman is accentuated by its dark color palette and suppression of detail.  All of these elements converge to create a gestalt stillness. I think this stillness gave room for the viewer to more effectively take in its atmosphere and style.</p>
<h2>Much confirmed, but also some surprise</h2>
<p>Running these two movies through its paces clarified why I enjoyed The Batman’s style so much. The movie was long, but it employed constraint and consistency that amplified its style into something I considered noteworthy. The movie clearly had a vision that was followed from start to end. This isn’t a judgment on the worth of either movie, but I do find The Batman to be better cinematically executed based on consistent constraint. </p>
<p>This exercise wasn’t just a reinforcement of previously held beliefs. The Batman’s use of additives to simplify has weakened  some strongly held beliefs&mdash;especially in regards to my photographic work. To be honest, I wish I would have come to this conclusion roughly nine years ago, but it’s better than never.</p>
<h2>Epilogue</h2>
<p>Designers are addicted to inspiration&mdash;which isn’t a problem if it’s the first step in a larger process. Inspiration alone lacks understanding behind the reaction. Inspiration requires examination.</p>
<p>Developing a point of view on design is essential to fostering one’s own style. The things that inspire you should be broken into a million pieces to see what makes it tick. That lack of understanding keeps you at the mercy of basic mimicry. </p>
<p>This post attempts to provide an example of examination. Both for myself and others. I give designers two main suggestions to help their growth: 1) Dissect others’ work that resonates with you so you can take its elements to make something of your own. 2) Write about your thoughts to fortify your thinking and communication.</p>
<p>Do I think every designer should go through this length with design that catches their eye? Absolutely not. But I do think following an abbreviated process of observation, examination, validation is invaluable for growth. </p>
<p>It would have been easy to say, “The Batman has less dialog and <em>feels</em> simpler.” But, did it <em>actually</em> have less dialog? If so, by how much? It was important to understand if my observations were accurate. How would it help if my point of view was shaped on false pretenses? </p>
<p>I do not think everything can or should be quantified, but I do think it should be examined. While I&#8217;ve spent considerable effort quantifying these two films, this analysis remains an interpretation. And through this interpretation, I have <em>just that much</em> better of an idea of what I consider to be good design. I encourage you to do the same.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Screw it, I’m making a typeface]]></title>
            <link>/posts/making-a-typeface</link>
            <guid isPermaLink="false">/posts/making-a-typeface</guid>
            <pubDate>Fri, 03 Nov 2023 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p><em>This post intends to be a journal of my progress with the creation of my own typeface. It&#8217;ll be updated as updates are available. You can see the typeface in all it&#8217;s glory on <a href="https://pjonori.design/work/olivia-sans/">its specimen page</a>.</em></p>
<h2>Prologue</h2>
<p>I&#8217;ve wanted to design my own typeface for nearly two decades. Now seemed like as good of a time as any. I thought it may be worthwhile to document this process and therefore I&#8217;m going to chronicle my process in this post. With any luck, the final update in this post will be when I&#8217;m &#8220;finished&#8221;. </p>
<p>Why write about this? First and foremost, I want to track what I learn through this process so I can refer back to something if I&#8217;m foolish enough to do this again. Secondly, I thought this post could encourage others to give something like this a try as well. Who knows, I may just end up with something decent&mdash;and if I can do it, <em>anyone can</em>.</p>
<h2>Friday, November 3, 2023</h2>
<p>In order to prep for my foreray into type design, I watched most of <a href="https://www.youtube.com/watch?v=Qy3IGDm-0ac&list=PLRHjTXscef1KOStvmGmo8XryOs7zmCfuK">this series</a> on how to use <a href="https://glyphsapp.com">Glyphs</a> to create a typeface. I viewed close to half of the videos, so I&#8217;d say success is all but guaranteed.</p>
<p>I chose Glyphs as my tool of choice as it appears to be the best of what I&#8217;d say is a mediocre set of options. I spent the first hour or two in a cage fight with the app to understand how to draw paths. It&#8217;s <em>fine</em>, but there was still a considerable learning curve given I cut my teeth on Illustrator and still consider that to be the finest vector drawing tool I&#8217;ve used.  </p>
<p>I&#8217;ve decided to design a sans serif for this project because I&#8217;m not a complete masochist. I&#8217;m unabashedly reverse-engineering existing typefaces to help form my letter forms. The two fonts I&#8217;m using as my reference point are <a href="https://en.wikipedia.org/wiki/Avenir_(typeface">Avenir</a> and <a href="https://en.wikipedia.org/wiki/Helvetica">Helvetica Nueue</a>. Yeah, those are two <em>very different</em> typefaces, but there are distinct stylistic points of interest in each of them. I&#8217;d like to pull what I like about each into my font.</p>
<h2>Saturday, November 4, 2023</h2>
<p>I learned that all good typefaces start with the lowercase n, so that&#8217;s where I started. I don&#8217;t particularly like it. </p>
<p><img src="n.svg#tocontent" alt="Lowercase n"></p>
<p>I think thicks and thins will need more contrast, but it&#8217;s good enough for the time being. One nice thing about starting with n is that you basically get h for free. The letter m is a little more complicated. I learned that the first hump should be slightly more compressed than the second. I&#8217;m not entirely sure why yet, but I&#8217;m just going to run with it. </p>
<p>I&#8217;m starting to schedule out a letter (or two for each day). I&#8217;m hoping that I&#8217;ll be able to put one or two hours a night into this project after we get our daughters to sleep. </p>
<h2>Sunday, November 5, 2023</h2>
<p>OK, so I devised a plan and that&#8217;s to race towards a full coverage of all glyphs and refine from there. I&#8217;m trying not to dwell on how much work this is going to be&mdash;especially when taking weights and italics into account&#8230; I&#8217;m hopeful that making solid progress in the weeks to come will give me the momentum to keep this going. And speaking of progress, I&#8217;ve landed a first pass on over 40% of the glyphs I&#8217;m planning to design. Some of them are hot garbage, but they exist and that&#8217;s what I&#8217;m going for. </p>
<p>Here&#8217;s a sample of my typeface interspersed with other commonly used sans serif fonts. No, I&#8217;m not going to say which one is mine.</p>
<p><img src="romp.svg#tocontent" alt="Examples of the word romp in various typefaces"></p>
<p>Maybe I&#8217;m delusional, but I don&#8217;t think my font stands out as clearly worse than the comparing fonts. I definitely see things that need to be improved, but all very doable. I&#8217;m also starting to better leverage Glyphs as a tool. It&#8217;s by no means sparking joy, but the grudge-match phase is behind me. I&#8217;m semi-hopeful that I&#8217;ll have a first pass of letter forms complete by the end of the next weekend.</p>
<p>The most interesting tidbit I learned today was that horizontal strokes need to be a smidge thinner than vertical strokes as horzontal strokes appear optically thicker than their counterpart. Note to self: you have a lot of horizontal stroke clean up in your future&#8230;</p>
<h2>Monday, November 6, 2023</h2>
<p>Not many updates for today. However, there are two big takeaways. The first, is that I&#8217;m firmly convinced now that I can do this. I can&#8217;t guarantee that the final outcome will be anything to write home about, but it <em>will get made</em>. </p>
<p>The second is that I&#8217;m quickly coming to the conclusion that I&#8217;ll end up having to make a font testing tool for this project. I&#8217;m learning that Figma takes some coercing to detect a font update and online tools are <em>fine</em>, but nothing to write home about. I&#8217;m looking at the the following resources as a starting point:</p>
<ul>
<li><a href="https://gist.github.com/thundernixon/dda6de7732dfd6dac4a1f801022a7127">Spacing templates</a></li>
<li><a href="http://www.cyreal.org/Font-Testing-Page/">Font testing page</a></li>
<li><a href="https://www.adhesiontext.com/">adhesiontext.com</a></li>
</ul>
<h2>Tuesday, November 7, 2023</h2>
<p>I was able to fit in time to get some simple symbols out of the way. It’s the kind of no-brainer task that can happen after a full day of work that doesn’t take a ton of thinking but keeps progress humming. I&#8217;m well past the 50% mark in terms of glyph coverage. </p>
<p>I don’t think it’s even worth sharing examples given it would just be a smattering of horizontal and/or vertical lines. Lines are easy. Curves are not. I know I have a lot of pain ahead of me with the remaining lowercase letters. </p>
<h2>Thursday, November 9, 2023</h2>
<p>No work gets done when there&#8217;s a sick kiddo in the house. I&#8217;m hopeful that I can make some serious progress with the three day weekend. </p>
<p>That said, I&#8217;ve been chipping away at some of the simpler symbols here and there before I go to bed. Here&#8217;s some of the progress made since Monday.</p>
<p><img src="special-characters.svg#tocontent" alt="Examples of special characters"></p>
<p>The more I noodle on this project, the more I know this is just going to take a lot of time. </p>
<h3>Friday, November 10, 2023</h3>
<p>Today was a big day, so much so that I&#8217;m convinced I&#8217;ll have a full draft character set by the end of the weekend. I have all capital letters in a first draft phase. Capital S was a pain in the ass and will likely need numerous tweaks to get to a better place. </p>
<p><img src="caps.svg#tocontent" alt="Capital letters in the alphabet"></p>
<p>I was able to spend some general refinements related to stroke angles. I&#8217;m trying to limit the number of angles I use to help with overall visual continuity. So far I&#8217;ve limited myself to the following angles: 17°, 30°, 40°, 49°, 55°, 60°,  69°, 75°, and 83°</p>
<p>That seems like a lot (and maybe it is), but so far each has felt necessary. I&#8217;m going to try to whittle down these angles in the days/weeks to come. There&#8217;s plenty to improve upon, but I&#8217;m still pretty excited with the progress. </p>
<h3>Saturday, November 11, 2023</h3>
<p>Well, I&#8217;m a little more than a little surprised, but I got all my initial characters drawn. The lowercase a and s were major pains and they&#8217;ll need massaging. Nonetheless, I never thought I would get this far this fast.</p>
<p><img src="characters.svg#tocontent" alt="Letters and numbers for the new typeface"></p>
<p>One thing that I put a lot of effort into is to use as few vector points as possible&mdash;for a couple reasons. The first is that is makes curves cleaner in general. This is something I learned a lifetime ago when drawing a lot of icons. The second is that it keeps the font&#8217;s file size down. Less points, means less information. Less information means a smaller file size.</p>
<p>This was a major milestone and I couldn&#8217;t be happier. Next up is building the bold weight for the font!</p>
<h3>Sunday, November 12, 2023</h3>
<p>The sick kiddo got me sick, so I&#8217;m not putting any time into the typeface today. However, I started to broach the creation of a bold weight. What I&#8217;ve learned is that I have <a href="https://en.wikipedia.org/wiki/Ink_trap">ink traps</a> in my future. My lowercase a in particular is in dire need of an ink trap. </p>
<p>One thing that I&#8217;m really happy I did was to design my regular weight to be on the lighter side. I did this because I don&#8217;t use light weights a ton and so I wasn&#8217;t interested in building out versions of every glyph for something I&#8217;d never utilize. I plan to make this font variable and so I&#8217;ll likely up the weight a smidge for body copy&mdash;which is totally A-OK for me. I&#8217;m hopeful this will have cut a ton of time and effort from this project. We&#8217;ll see&#8230;</p>
<h3>Wednesday, November 15, 2023</h3>
<p>Work and sickness have slowed progress down, but major progress has still been made. My big focus has been on spacing. And I&#8217;m not going to lie, I leaned heavily into reverse-engineering the spacing of other fonts to speed up progress. Make no mistake, my final result went through my own translation, but I relied on the logic from other fonts to drive me work. This is a big part of why I knocked this out with relatively little effort.</p>
<p><img src="spacing.svg#tocontent" alt="Example of spacing in the font"></p>
<p>One important note&mdash;while I have spacing in a generally decent space, I have not touched <em>kerning</em>. And I know that&#8217;s just going to be a ball of <em>yuck</em>. An important <em>yuck</em>, mind you, but <em>yuck</em> nonetheless. Knowing myself, I&#8217;ll likely wait as long as possible to do that, so next I&#8217;m on to creating the bold weight.</p>
<h3>Thursday, November 16, 2023</h3>
<p>OK, bolding this font isn&#8217;t a <em>complete</em> cakewalk, but it&#8217;s also not as tough as I initially expected. Glyphs gives you a nice head start with the ability to offset outlines. The big thing to know about font weight management is that you need to keep the same number of points in each weight. Otherwise things break. Luckily, I made two initial design decisions which paid off nicely. The first is that I put a lot of focus in using as few points as possible in each glyph&#8217;s vector form. The second is that I started with a pretty thin (perhaps <em>too</em> thin?) stroke thickness for the regular weight. </p>
<p>This meant that there was plenty of room for each glyph to expand without colliding into itself <em>and</em> less points in the vector path meant less opportunities for points being awkwardly close to each other and creating yucky paths. I have had a few issues pop up in the process so far (ahem, lowercase a&#8230;) but far less than I thought would be the case.</p>
<p>This weight range is <em>plenty</em> for my needs, and so I&#8217;m getting oh-so-close to having Regular and Bold master weights complete. I also toyed with variable font export. And the progress? Well, look for yourself.</p>
<p><video controls width="100%"><source src="./OliviaSans.mp4" type="video/mp4" /></video></p>
<p>On a completely unrelated topic, I once again need to give a tip of the cap to <a href="https://www.remotion.dev/">Remotion</a> which enabled me to programmatically animate the font weight of my typeface and then render as a video. Such an amazingly cool tool that I plan to utilize quite a bit in the near future.</p>
<p>I&#8217;m hopeful I&#8217;ll have weights in a first-draft form by the end of the weekend. I never would have imagined I&#8217;d make this far by this point.</p>
<h3>Friday, November 17, 2023</h3>
<p>No major updates from today, but I do have my first regret which is to not have accounted for <a href="https://en.wikipedia.org/wiki/Ink_trap">ink traps</a> earlier on. I now have a ton of retrofitting of existing glyphs to include ink traps. I&#8217;m hoping like hell that doesn&#8217;t break anything&#8230;</p>
<p>I also have a roster of characters that need to be unhit by the ugly stick. Namely, <em>a</em>, <em>e</em>, <em>m</em>, <em>2</em>, <em>4</em>, <em>7</em>, and <em>&</em>. There are plenty others, but those are the most egregious&mdash;especially the <em>m</em>. </p>
<p>So, this weekend will be all about bolding, ink trapping and un-uglifying some key glyphs. I&#8217;m crossing my fingers that I make decent progress.</p>
<h3>Saturday, November 18, 2023</h3>
<p>Well, I did it. I finished up the bold weight for all glyphs in the typeface. Glyphs made this about as easy as you could expect. The unnerving part of this process was joining all overlapping shapes of each glyph into a single path. That was a point of no return. </p>
<p><img src="typeface.svg#tocontent" alt="Example of the typeface in regular and bold weights"></p>
<p>The lowercase a was a complete pain in the ass to get working due to the bold weight&#8217;s paths getting modified during the bolding process. Learning how to debug that was a whole process in and of itself. Many, if not most glyphs were easy-breezy though. </p>
<p>In addition to finishing up the first pass of the bold weight, I also un-uglied some of my worst offending designs. Below are below/after/difference screenshots.</p>
<p>Lowercase a had one curve that were way too strong. I chilled that out and while the change is hilariously subtle in the image below, I think it makes a big difference. </p>
<p><img src="a.png#tocontent" alt="Example of a"></p>
<p>Lowercase m was one of the first letters I made and it shows. The point between the two humps was way too low. That got resolved. </p>
<p><img src="m.png#tocontent" alt="Example of m"></p>
<p>The number 2 was far too curvy. I made it so that the bottom was more orthogonal. It feels far more stable now. </p>
<p><img src="2.png#tocontent" alt="Example of 2"></p>
<p>Number 4 was just too narrow. I widened it up a smidge to appear more balanced when paired with other numbers. </p>
<p><img src="4.png#tocontent" alt="Example of 4"></p>
<p>Number 7’s thins were just too thin. I just reduced the line contrast a bit. </p>
<p><img src="7.png#tocontent" alt="Example of 7"></p>
<p>So, now that those are done, I need to chip away at my new least favorite glyphs, namely &, ?, and 3. I also plan to italicize the weights next. I&#8217;m honestly a little dumbstruck that I have a semi-working typeface in this amount of time. With any luck, I’ll have something really fun to share tomorrow. </p>
<h3>Sunday, November 19, 2023</h3>
<p>Italics: Check. Kind of. </p>
<p>It turns out Glyphs makes it <em>really</em> easy to auto-magically italicize a glyph, but there clearly needs to be some more human TLC put into this. This phase hasn&#8217;t hit the TLC phase, but it&#8217;s nonetheless great to have basic italics added to the font. </p>
<p style='font-size: 2em;'><em>Here&#8217;s an example of italicized text.</em></p>

<p>I&#8217;m able to render out what italicized text looks like directly in this post because I&#8217;m now using the font on this blog. I&#8217;m going to have to alter the design a bit more to optimize for the new typeface. I&#8217;ll get to it.</p>
<p>One thing I&#8217;ve been working on behind the scenes was to build some tools to proof each glyph. There were some existing tools to export proofs as a PDF, but that just didn&#8217;t sit well with me. I wanted something more web-based to proof the typeface given it will primarily be displayed on the web. So, I wrote some build scripts to generate generic HTML that can be styled to proof a typeface. I&#8217;ll share what I have on <a href="https://pjonori.codes">pjonori.codes</a> once it&#8217;s a little cleaner.</p>
<p>Until then, I had the chance to style my proofing HTML into a <a href="https://pjonori.design/work/olivia-sans/">showcase page</a> for the typeface. Given this is my first typeface, I&#8217;ve named it Olivia Sans after our first child. I never had wild aspirations for this project. I simply wanted to make a typeface I liked that would hopefully be something my daughters could use for their own creative projects. As far as I&#8217;m concerned, that&#8217;s success.</p>
<p>And yes, our second daughter is already lobbying for her own font. I&#8217;m hopeful there&#8217;s a Gianna Serif in her future&#8230;</p>
<h3>Monday, November 20, 2023</h3>
<p>Oh man&#8230; Kerning&#8230; This is just going to be a lot of work. I&#8217;m using the <a href="https://glyphsapp.com/learn/kerning">Glyphs&#8217; kerning tutorial</a> as my starting point. My guess is this is going to just be a pain in the ass. I&#8217;m hopeful I&#8217;ll have an update by the end of the week. </p>
<h3>Monday, November 27, 2023</h3>
<p>Thanksgiving and some family issues made updates a little thin since the last post. However, I did put an ample amount of time into kerning. And, it&#8217;s <em>much better</em> than what it previously was. Most of the work was around how a, c, e and o sat next to F, K, k, P and Y. There&#8217;s still plenty to work on, but it&#8217;s less glaringly awful. </p>
<p>Kerning is a trudge at baseline, but the fact that kerning values cannot be automatically be applied to all masters makes it even worse. Luckily, there&#8217;s a script to copy all kerning values to all masters. I used the following script <a href="https://forum.glyphsapp.com/t/is-there-a-way-to-set-kerning-value-for-all-masters-at-once-via-gui/24681/18">graciously shared here</a>:</p>
<pre><code>sourceMaster = Font.masters[0]
targetMasters = [Font.masters[1], Font.masters[2], Font.masters[3]]

sourceKerning = Font.kerning[sourceMaster.id]
for targetMaster in targetMasters:
	targetKerning = sourceKerning.deepMutableCopy()
	Font.kerning[targetMaster.id] = targetKerning
</code></pre>
<p>So, now words like &#8220;walked&#8221; should look much better than <a href="https://twitter.com/_kejk/status/1726593200369123701">they used to</a>. I will continue to chip away at kerning, but it&#8217;ll likely be small, continuous improvements as I see them as opposed to some big Kernapalooza event. </p>
<p>On another note, I&#8217;ve been working to clean up my scripts for generating typeface proofs. My goal is to release the code&mdash;I can&#8217;t guarantee it&#8217;ll be useful, but it worked for me.</p>
<h3>Wednesday, November 29, 2023</h3>
<p>It&#8217;s becoming a game of nanometers now where I&#8217;m making smaller and smaller adjustments to individual glyphs based on how much they annoy me. Lowercase a will likely be in perpetual improvement mode. I look at Helvetica&#8217;s lowercase a and if I can get even infinitesimally close to its form, I&#8217;ll consider it a success. I finally isolated the thing that has been driving me nuts&mdash;the top and bottom of the letterform weren&#8217;t balanced. The top was far too recessed and once I pulled the two closer it immediately looked better.</p>
<p><img src="new-a.png#tocontent" alt="Before and after of lowercase a in regular and bold weights"></p>
<p>I was also able to remove an unnecessary point from the vector path, so not only did I improve upon the form, the font file size is now just a smidge smaller as well!</p>
<h3>Thursday, November 30, 2023</h3>
<p>No typeface updates, but I did end up <a href="https://pjonori.codes/projects/type-specimen/">publishing the generator script</a> I used to make my <a href="https://pjonori.design/work/olivia-sans/">Olivia Sans specimen page</a>. It&#8217;s <em>rough</em>, but it&#8217;s a start. I hope to make improvements as this project progresses.</p>
<h3>Thursday, December 7, 2023</h3>
<p>As you can see, updates are slowing down because progress is slowing down. I&#8217;m officially in the tuning phase. I cleaned up the ampersand, question mark and some <em>really</em> subtle adjustments to the number 3. I also found a stray spacing issue with my lowercase y. All of these are minor, but they&#8217;ll no doubt add up.</p>
<h3>Sunday, December 10, 2023</h3>
<p>One big update and a small one as well. I finally took the time to learn how to <a href="https://glyphsapp.com/learn/creating-a-variable-font">properly export the font</a>. I now have a functional typeface that I can use in my design tools. That&#8217;s been bugging me for some time. While it&#8217;s not a direct improvement to the design of the font, it&#8217;s pretty damned important nonetheless.</p>
<p>The smaller update is that I improved upon the number 2. In all honesty, nearly the whole range of numbers need work, but I&#8217;m glad I have one in a better place. My guess is that I&#8217;ll be making numerous improvements to all numbers in the following weeks.</p>
<h3>Sunday, December 21, 2023</h3>
<p>I made some minor updates to the numeral 3 and uppercase K. Both glyphs were only minimally adjusted to be completely honest. Italics remains a hot mess. That will be the next big focus in the new year.</p>
<h3>Friday, January 12, 2024</h3>
<p>Progress has slowed as you can see, but that&#8217;s because the typeface is meeting my needs for the most part. The italics remain a wart on the overall design, and so I recently cleaned up the uppercase P and the numerals 2, 3, 5, 6, and 9. That addresses <em>most</em> of my discontent, but there&#8217;s obviously ample room for improvement. Here are a couple that come to mind:</p>
<ul>
<li>My ampersand is gross. I wish I had kinder words, but I don&#8217;t. I&#8217;m mulling to take that glyph down to the studs for a full rehaul.</li>
<li>There&#8217;s literally no difference between my uppercase I and lowercase L. That&#8217;s a problem&mdash;this is the kind of thing I chirp about all the time in UI design. What is a typeface if not an interface for language? So, I need to get to that as well. </li>
<li>I&#8217;m still not entirely happy with my lowercase A. The problem is I can&#8217;t yet diagnose what about the letterform is causing that reaction. I&#8217;m hopeful I&#8217;ll get to the source of this and address in the following weeks.</li>
<li>I don&#8217;t like the full vertical bar in the dollar sign. It makes the form too busy, especially at small sizes. I&#8217;ll likely address this sooner or later.</li>
</ul>
<p>So, progress has slowed, but there&#8217;s still <em>plenty to do</em>. I also have hope that I&#8217;ll eventually break ground on a serif font. </p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Systems, math and explosions (in no particular order)]]></title>
            <link>/posts/systems-math-explosions</link>
            <guid isPermaLink="false">/posts/systems-math-explosions</guid>
            <pubDate>Thu, 29 Jun 2023 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>Any sufficiently complex system is indistinguishable from chaos<sup id='fnref1'><a href="#fn1">1</a></sup>. Systems are complex at baseline because they&#8217;re not just about collections of things, they&#8217;re <em>also</em> about connections of things. And connections add up fast. Take the following three collections of connected dots.</p>
<p><object type="image/svg+xml" data="exponential-systems.svg"></object></p>
<p>The first collection of three dots has three connections. Obvious. The second collection has nine dots, but now there are 36 connections. The last collection of dots has 27 dots, but the connections have ballooned to 351. This phenomenon is called a <a href="https://en.wikipedia.org/wiki/Combinatorial_explosion">combinatorial explosion</a>. It appears exponential in nature, but for the math nerds, it&#8217;s actually <a href="https://en.wikipedia.org/wiki/Polynomial">polynomial</a>. Honestly, for the sake of this article, it doesn&#8217;t matter.</p>
<h2>Combinatorial explosions are complexity explosions</h2>
<p>Those who work on any kind of system know what combinatorial explosions are even if they haven&#8217;t heard the term. As pieces in a system increase linearly, its connections increase much, much faster. Consequentially, the system’s complexity grows <em>much, much faster</em>. <strong>Spoiler:</strong> That&#8217;s bad. </p>
<p>Let&#8217;s take the &#8220;Hello world&#8221; of complexity explosions for design systems&mdash;color palettes. The best color palette I made for a design system had seven colors. Was it constraining? Absolutely. But it was also manageable from a systems standpoint and <em>highly</em> approachable/understandable for those who used it.  However, most systems have a hundred colors or more. Below is a visualization of all the 2-color combos in 7, 25 and 50 color palettes.</p>
<p><object type="image/svg+xml" data="color-combinations.svg#fullheight"></object></p>
<table>
<thead>
<tr>
<th>Colors</th>
<th>2-color combos</th>
</tr>
</thead>
<tbody><tr>
<td>7</td>
<td>21</td>
</tr>
<tr>
<td>25</td>
<td>300</td>
</tr>
<tr>
<td>50</td>
<td>1,225</td>
</tr>
<tr>
<td>190 <sup id='fnref2'><a href="#fn2">2</a></sup></td>
<td>17,955</td>
</tr>
</tbody></table>
<p>I threw in Material&#8217;s 190 color palette in the table above to show how complex this can get in <em>actual reality</em>. The more complex the combinations become, the more large color palettes become essentially incomprehensible. How many 7-color combinations does a 7 color palette have? One. How many does a 190 color palette have? 1,585,940,245,560.</p>
<h2>Piles of stuff are unpredictable</h2>
<p>A system <em>is a system</em> because its connections work together. As a system grows, it becomes increasingly difficult to understand how everything works&mdash;or if it works at all. This rears its head in general unintelligibility, brittleness and unpredictability. At which point the system has <em>officially</em> devolved into a pile of stuff.</p>
<p>Unpredictability in particular is scary. Because unpredictability, is well, unpredictable. Unpredictable can result in good, <em>bad</em>, or <em>horrible</em>. It can be a combination of the three one minute, then none of the above the next. Which is chaos. And chaos is bad.</p>
<h2>The ways we avoid complexity can also create complexity</h2>
<p>But have no fear! People have honed plenty of tools to stave off complexity. The bad news is that the cure can be worse than the disease. That&#8217;s not to say these tools are inherently bad, but they have limitations which are often summarily ignored. Below are a few:</p>
<h3>Compartmentalization obfuscates complexity</h3>
<p>Compartmentalization is <em>the</em> go to when trying to simplify systems. It’s a great tool to turn one big, monolithic system into a system of smaller, more manageable sub-systems. </p>
<p><object type="image/svg+xml" data="compart-motion.svg#tocontent"></object></p>
<p>Compartmentalization is your basic org chart. The org chart is the quintessential definition of breaking a huge system of things (people) into smaller, more digestible sub-systems (teams). Some may question whether the org chart is a good example given their challenges. That’s the point. </p>
<p>One problem with org charts is they can create artificial barriers between people which make it harder for them to work together. These partitions don&#8217;t <em>really</em> exist in people’s day-to-day work, but are created anyway in the goal of simplification. Teams become siloed, overly focused on their own goals and lose visibility of the greater direction. </p>
<p>That&#8217;s the rub of compartmentalization. It can be difficult to create &#8220;clean cuts&#8221; where all important connections remain intact. This can lead to a disjointed system where elements don&#8217;t feel like they&#8217;re working together&mdash;because they aren&#8217;t. </p>
<h3>Reducing connections moves complexity around</h3>
<p>Just because two pieces in a system <em>can</em> connect, doesn’t mean they should. Explicitly paring down connections between pieces is another clear cut way to reduce complexity.</p>
<p><object type="image/svg+xml" data="removed-connections.svg#tocontent"></object></p>
<p>This can be achieved by restricting component APIs to only accept a subset of options. A system may provide 100 colors, but that doesn&#8217;t mean all of them should be available for every component. This significantly reduces permutations in a system.</p>
<p>On the downside, there&#8217;s added cognitive load to understand which pieces connect, and how. This load increases by how unique each set of options are for each component. Another downside is that rules can get complicated fast. One rule of thumb is to avoid rules with clauses. Once design systems start having rules like, &#8220;Do ____ except when ____ unless ____&#8221; you should just assume someone out there is losing their mind trying to understand or already gave up.</p>
<p>It also begs the question, &#8220;Why have 100 colors in the first place if 90 of them can&#8217;t be used half the time?&#8221; Which is a good question.</p>
<h3>Abstraction creates layers of complexity</h3>
<p>Another approach is to just make a subset of the system available to use. A simple, approachable public system is made available to all&mdash;driven by a bigger, gnarlier private one.  This could also be seen as an extreme level of compartmentalization.</p>
<p><object type="image/svg+xml" data="firewall.svg#tocontent"></object></p>
<p>This approach creates less cognitive load&mdash;especially for beginners. The user benefits from a robust system under the hood, but with far less options to get themselves into trouble.</p>
<p>But of course there are downsides. First off, a public and private system means <em>more systems</em> to deal with. Secondly, abstraction risks long-term confusion as people begin to see that they aren&#8217;t provided all the options. That will beg the questions, &#8220;What are all those other options not available to me?&#8221;, &#8220;Why can&#8217;t I use them?&#8221; and, &#8220;Why does the system get to play by a different set of rules than me?&#8221; Which are all good questions. </p>
<h2>Reduction is the only <em>real</em> way to reduce complexity</h2>
<p>The tools outlined can be effective when well-employed. But math is math. Linearly remove pieces in a system and the connections decrease much, much faster. Treating the symptoms of complexity often just redistributes it. In short, the best way to avoid the pitfalls of complexity is to avoid complexity altogether.</p>
<p>But make no mistake, reduction ain&#8217;t no walk in the park&#8230;</p>
<h2>Stifling order or cataclysmic chaos</h2>
<p>Robin Rendle mentioned that <a href="https://robinrendle.com/essays/systems-mistakes-and-the-sea/">design systems are hyperobjects</a>. For the uninitiated (which included myself until a few weeks ago), hyperobjects are things so big that it&#8217;s beyond human understanding. I don&#8217;t think <em>all</em> systems are hyperobjects, but plenty are. I don&#8217;t think it&#8217;s interesting whether systems can by hyperobjects as much as how <em>quickly</em> they can become one. One second, you&#8217;re fine. The next, chaos.</p>
<p>I don&#8217;t know many people who find chaos appealing. Why then is it so prevalent? Here&#8217;s my theory: we&#8217;re willing to accept the mess because it&#8217;s comfortable. </p>
<p>Avoiding chaos seeks out conflict. Complexity explosions are fueled on &#8220;Yes&#8221; and starved by &#8220;No&#8221;. &#8220;No&#8221; brings dispute. It’s painful, exclusionary, <em>stifling</em>. It won&#8217;t make you the life of the party. And it typically takes incredible discipline to sustain. </p>
<p>Uncomfortable as &#8220;No&#8221; may be, it&#8217;s ultimately the simplest way to keep an explosion from becoming an explosion. </p>
<ul>
<li><span id="fn1"><strong>1:</strong></span> Yes, this is a blantant adaptation of Arthur C. Clarke, but there was no way I would craft a better way to say it. <a href="#fnref1">↩</a></li>
<li><span id="fn2"><strong>2:</strong></span> Total colors from Material&#8217;s color palette. <a href="#fnref2">↩</a></li>
</ul>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Simple things make things simple]]></title>
            <link>/posts/simple-things</link>
            <guid isPermaLink="false">/posts/simple-things</guid>
            <pubDate>Mon, 05 Jun 2023 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>I&#8217;m not a complicated guy. The older I get, more I&#8217;m drawn to <em>less</em>. This is best illustrated in a recent project. </p>
<p><img src="dsn.png" alt="Screenshot of designsystems.news">
<em>designsystems.news in all its glory</em></p>
<p>I launched <a href="https://designsystems.news">designsystems.news</a> in April of 2023 as a weekly editorial on design systems. I needed space for more reading and thinking, but knew that wouldn&#8217;t reliably happen without an intentional process in place. I made the site to keep me learning and accountable. But it would fail if it was too much work. </p>
<p>So why write about this? It&#8217;s certainly not for self-aggrandizement as the project isn&#8217;t worthy of it. Rather, the goal is to show what simplicity can yield in concrete terms.</p>
<h2>Simple concept begets simple design begets simple execution</h2>
<p>I had a clear constraint of time and worked backwards from that. Essentially anything that <em>could</em> be removed from the project, was. Its concept, format, structure, aesthetic and implementation all aimed for <em>extreme</em> simplicity. In practice, this meant:</p>
<ul>
<li>The concept behind the site was as straightforward as it gets. It&#8217;s editorial &#8220;news&#8221; about design systems. I got the &#8220;designsystems.news&#8221; domain to avoid the need to describe its purpose. The domain tells you all you need to know.</li>
<li>The format of a weekly links with short-form observations and quotes is, well, simple. It&#8217;s easy to mess up this format with adding imagery, summaries or whatever else. No thanks.  </li>
<li>The site is one page. It has no navigation, no search, no pagination, no categories, no <em>nothing else</em>. The layout is so simple it doesn&#8217;t require CSS breakpoints to be responsive.</li>
<li>The design of the site has three colors, no custom fonts, no sophisticate type ramps, no visuals. It&#8217;s admittedly <em>austere</em>.</li>
<li>The site is one request coming in at ~10 KB (as of May 2023). There&#8217;s no JavaScript. The (little) CSS used is added to the head and the header SVG is inlined. Any device on any connection can effortlessly access this site. Entries are compiled from (simple) Markdown meaning it unfortunately required a build script. I begrudgingly have three NPM dependencies, which ideally would be zero.</li>
<li>All of the above has enabled a simple relationship with the reader. There&#8217;s no tracking, no cookies, no upsell, no &#8220;Sign up for my newsletter&#8221;, no &#8220;Follow me some godforsaken social network&#8221;. No strings. Just come and read.</li>
</ul>
<p>Truth be told, it could be simpler. Perhaps one day it will.</p>
<h2>Shipping nearly nothing turns out to be simple</h2>
<p>Removing <em>so much</em> resulted in removing many problems typically faced when making a website. One page meant no information architecture or navigation schemes. No JavaScript meant no complicated toolchains or build scripts. Minimal NPM dependencies meant minimal maintenance. No images or fonts meant no optimization, performance-tuning or FOUT. No tracking, upsells or hidden agendas meant no GDPR compliance, marketing or general nonsense getting in the way of the content.</p>
<p>All that simplicity enabled the entire project to go from idea to deployed in <em>roughly 5 hours</em> (including 2 hours of muddling through regular expressions). Posting updates takes minutes. Reading articles is far and away the largest time commitment&mdash;as it should be.</p>
<h2>Honest and clean</h2>
<p>I don&#8217;t have much free time. Any time commitment nowadays has to be worth it. Nowadays, &#8220;worth it&#8221; often equates to money. That dynamic plays a large part in the modern web&#8217;s proclivity for bait-and-switches, &#8220;Please like/follow/subscribe&#8221;, hidden sponsorships and the ever-present invisible eye that&#8217;s collecting your personal information. I simply wasn&#8217;t going to do that. But, I had to make this site in a way where <em>that was actually feasible</em>. </p>
<p>A project that took months of time to create and required constant high-maintenance would require something substantial in return. I have no need for a return because I&#8217;ve reduced the investment to all but nothing. With essentially no overhead or maintenance, this site isn&#8217;t costing me anything. And no cost means no need to extract value.</p>
<p>I now have a site that&#8217;s encouraging me think about design system ideas. The reader gets content in return. In short, this site was designed to be clean-burning to ensure a clean relationship with its readers.</p>
<h2>Parting words</h2>
<p>Simple isn&#8217;t always fun. It&#8217;s often not inspirational. It&#8217;s <em>typically</em> not convenient. It&#8217;s not easy. But simple <em>is</em> simple. And boy is simple a breath of fresh air in today&#8217;s world. That&#8217;s why I&#8217;m so proud of of this project. It&#8217;s not beautiful to look at. It&#8217;s not a technical marvel. It isn&#8217;t solving some grand problem. It&#8217;s just a single page on the internet. </p>
<p>I&#8217;m most satisfied by what this project <em>isn&#8217;t</em>. There&#8217;s not much to it, and that&#8217;s the point. Practically speaking, it <em>had</em> to be made this way due to life&#8217;s constraints. Simple is a word so trodden over that it&#8217;s lost its meaning. Real simplicity is often unnoticed <em>by design</em>. But overlooked as it may be, incredible things can come from it. Working on this project has reaffirmed just how much can happen when you do as little as possible.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Measuring design system “adoption”]]></title>
            <link>/posts/design-system-adoption</link>
            <guid isPermaLink="false">/posts/design-system-adoption</guid>
            <pubDate>Thu, 18 May 2023 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>Measuring design system adoption is like measuring how much you love your children. It&#8217;s hand wavy, adjective-laced and head-scratching ensues once the numbers come out. However, developing an adoption metric is attainable, productive and won&#8217;t land you in family therapy. As long as your &#8220;adoption&#8221; metric isn&#8217;t measuring adoption.</p>
<h2>Measuring true adoption is impossible</h2>
<p>Design system adoption isn’t quantifiably measurable because adoption isn&#8217;t purely quantitative. It&#8217;s also one of those things I suspect we all <em>think</em> we agree in definition, but there&#8217;d be some wild disagreements once we got into brass tacks. My take is adoption that just measures amount of use is missing the amount it&#8217;s used <em>correctly</em>. And it’s that last part that&#8217;s the monkey wrench. Once <em>intended use</em> is in the picture, well, now you’re crossing quantitative and qualitative streams.</p>
<p>So, if you buy what I&#8217;m selling, true adoption measure isn&#8217;t attainable. Congratulations! You now have the freedom to define something less <em>loaded</em> than adoption while still providing useful signal.</p>
<h2>Measure aspiration instead of adoption</h2>
<p>Now is a good time to stop reading and think about what wild, unmitigated success looks like for your design system. What part of that wild, unmitigated success is: </p>
<ol>
<li>Quantifiable</li>
<li>Simple to understand</li>
<li>The most critical marker of success</li>
</ol>
<p>That&#8217;s your &#8220;adoption&#8221; measure. </p>
<p>As an example, if success looks like enabling teams to quickly develop new components on top of your system, perhaps you measure the use of your tokens/building block components in non-system components. I&#8217;m spit-balling here, you&#8217;ll come up with something better.</p>
<h2>An approachable measure helps reinforce your vision of success</h2>
<p>Simple is hard. We all know that. But an approachable metric is critical. I&#8217;d argue the <em>way you measure success</em> can be just as powerful of a narrative as the measure itself. How do you measure your view of success that&#8217;s approachable? I can tell you it&#8217;s not with <em>more math</em>. And that&#8217;s the beauty of <em>not</em> measuring adoption&#8211;you get to choose your own adventure. </p>
<p>For my work on <a href="https://gestalt.pinterest.systems/">Gestalt</a>, success has always been moving usage from the small, atomic components to the bigger, more opinionated ones. Thus, the measure I&#8217;m proposing is to divide our bigger, opinionated components by <em>everything else</em>. Meaning our own smaller components count against us. The rationale goes back to the fact that while our smaller components are critical, their usage does not equate to <em>wild, unmitigated success</em>. There&#8217;s even signal that those smaller components impede on the usage of bigger ones. Is that an accurate measure of adoption? Nope. May it even be a little controversial? Sure. But it was the clearest measure I could think of that communicates success.</p>
<h2>Metrics are a hell of a drug</h2>
<p>I love numbers. In moderation.</p>
<p>In my experience, metrics can be a gateway drug to <em>more metrics</em>. Without discipline, you end with metrics for the sake of metrics. Then one day you wake up in a pool of spreadsheets and aren&#8217;t quite sure how you got there. </p>
<p>Metrics can be fudged, manipulated and stomped on. Worst of all, metrics can abstract what you’re actually trying to accomplish. Without a thinly veiled skepticism of metrics, you can fall trap to believing that moving the metric <em>is</em> the job. It&#8217;s not. And even despite best efforts, once this measure becomes a KPI or shows up in OKRs, some people will be solely focused on it. </p>
<p>Let’s be clear, you’ve hit wild, unmitigated success when when you’ve hit wild, unmitigated success. Metrics can help validate and contextualize, but chances are, you&#8217;ll already know when you&#8217;ve done it.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Tend your garden]]></title>
            <link>/posts/tend-your-garden</link>
            <guid isPermaLink="false">/posts/tend-your-garden</guid>
            <pubDate>Fri, 14 Apr 2023 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[Stop being too busy to stop being too busy]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[The English language&mdash;A guideline for how not to make a design system]]></title>
            <link>/posts/design-systems-english-language</link>
            <guid isPermaLink="false">/posts/design-systems-english-language</guid>
            <pubDate>Wed, 27 May 2020 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p><em>This post was initially published on the <a href="https://pinterest.design/the-english-language-a-guideline-for-how-not-to-make-a-design-system-b988be81aa53">Pinterest Design blog</a>.</em></p>
<p>One of the major challenges of systems design is communicating the rationale of decisions — why you landed on certain choices, and why they make sense in the bigger picture. I’ve found language is an effective metaphor to explain my rationale: Creating a system is, in essence, creating a language.</p>
<p>Let’s look at the definition of the word “language”: The method of human communication, either spoken or written, consisting of the use of words in a structured and conventional way.</p>
<p>We can tweak that a bit to apply to design systems: The method of human communication within a user interface, consisting of interface elements in a structured and conventional way.</p>
<p>I’ve found the rules of language to be a great way to vet my own ideas…and to critique other people’s work, too. Using language metaphors to describe system tenets keeps things tangible. Language is as common a denominator as there is — the translation (no pun intended) is straightforward.</p>
<p>What’s less straightforward, however, is the English language. From first-hand experience, I know English’s rules are not fun to learn. It’s riddled with inconsistencies and irrational rules. It’s also a gold mine if you’re looking for examples on how to not design a system. Here are some ways that language can translate to and help explain your system’s design.</p>
<h2>Doppelgänger depot</h2>
<p>The words doppelgänger and depot are adopted into the English language. Doppelgänger originates from German and depot from French. By adopting these words, we’ve also adopted the rules for how those words are constructed. Now all of a sudden we have umlauts and silent t’s in our language that we need to make sense of. There’s nothing wrong with this (who doesn’t love an umlaut?), but they don’t fit the foundational rules of English. The result is they don’t feel as though they’re a natural part of the language.</p>
<p>The common equivalent in systems is the classic, “Design System ABC did XYZ — we should just do what they do!”</p>
<p><img src="material.png#tocontent" alt="Material's color palette">
<em>Material’s color system is no doubt impressive, but that doesn’t necessarily mean it’s compatible with yours.</em></p>
<p>Everything in a design system should originate from its fundamental rules. Pulling ideas from other systems is expected, but those ideas need translation to conform to your system’s underlying thinking. So it might have made more sense for Doppelgänger to become Doppleganer in English and for Depot to become Deepoe (or Deepow? or Deapoh?). Just sayin’.</p>
<h2>Flammable? Inflammable? Whatever, you choose!</h2>
<p>Flammable and inflammable mean the exact same thing — just look it up. But then…why do both exist? Should I use one over the other in certain contexts? Do people even know they mean the same thing? I have so many questions! Couldn’t we have settled on one word and moved on?</p>
<p>The go-to example of this principle in design systems is the checkbox and switch. Systems often provide both these solutions to address the same need. This makes you ask: When do I use one over the other?</p>
<p>There are good reasons to have both a checkbox and a switch. For instance, you use a switch in the mobile context and a checkbox in the web context. In that case, you’re providing a single solution (per platform) to solve a single need.</p>
<p><img src="checkbox-switch.png#tocontent" alt="Checkbox and switch">
<em>Our design system at Pinterest system has supported both checkboxes and switches on the web platform which led to unnecessary variance in usage. We’re working to consolidate to one single treatment.</em></p>
<p>When people have many options to do the same thing, they’ll usually end up using every option. That almost always leads to poor outcomes, and the design system’s job isn’t to provide a buffet of options, but to provide the solution for specific use cases.</p>
<p>Design systems, just pick “flammable” (or “inflammable”) and move on.</p>
<h2>There, their, they’re</h2>
<p>Come on…you knew this example was coming.</p>
<p>English is full of nearly identical homonyms and they cause constant confusion. It sure would be nice if English had distinct words for distinct concepts.</p>
<p>A common example of breaking this rule is link treatment. Due to accessibility, color alone isn’t enough to signify a link. There should be a clear and distinctive way to tell the user, “Hey, this text here is a link.”</p>
<p><img src="bold-links.png#tocontent" alt="Bold links">
<em>Another example using Pinterest’s design principles. We could improve upon this.</em></p>
<p>Distinct interface elements should have something which makes it distinct. Elements that look the same but are different in purpose will always cause confusion. It’s simple: If things are different, they should look, sound and feel different. Don’t go their (sorry…there).</p>
<h2>Exceptions of acceptions</h2>
<p>Accept (əkˈsept) and except (ikˈsept) have technically different pronunciations. But let’s be honest, they sound the same. Unfortunately, they mean drastically different things: “It was excepted” means something very different from, “It was accepted.” Given how diametrically opposed those two words are, it’s safe to say the words should be more clearly differentiated.</p>
<p>A similar example in design? Using color as the only differentiator between statuses like success and error. Given how fundamentally different these are, there should be a strong distinction between the two. Color is one way, but it should go well beyond just that. For maximum accessibility, we should differentiate error messages through messaging and iconography as well as color.</p>
<p><img src="toast-color-blindness.png#tocontent" alt="Pinterest Toasts with color blindness">
<em>Well, we got 1 out of 3 differentiators here. Sure, the text is different, but there aren’t any distinguishing features in how the text is constructed with our error toast’s text (something like Oops! at the beginning) to differentiate it at a glance.</em></p>
<h2>Logophobia, phobophobia, panophobia</h2>
<p>You don’t need to be a rocket scientist to know the three words above are related. The phobia suffix makes these three words immediately relatable: They share a commonality, yet represent distinct concepts.</p>
<p>Families of design components should have shared traits that make it clear they’re related. This often happens naturally, but it’s important to be intentional about what those traits are. Doing so will help you make system-friendly decisions when you add to the family.</p>
<p><img src="inputs-button.png#tocontent" alt="Comparison of Gestalt inputs and buttons.">
<em>Pinterest’s form inputs share a set of visual traits (corner radius, border treatment, sizing, etc.), but each also has a distinct trait that makes it unique. The shared visual traits also act as a contrast from other components, such as our buttons.</em></p>
<p>Elements that are a part of a family should intuitively and consistently feel that way. The more intentional you are on how related components are visually communicated, the easier it’ll be to add your next phobia.</p>
<h2>Supercalifragilisticexpialidocious</h2>
<p>Avoid being fancy when you can use a simple word — say “good” rather than “transplendent” so people stay on your page. The same goes for design: Don’t complicate basic concepts. You’re only going to make it harder for people to understand how to use the system.</p>
<p>This was one of Pinterest’s guiding principles for our initial dark mode rollout. We were set on keeping things simple and not overthinking. So our dark mode was in essence a palette flip with a super minor tweak to one of our grays for accessibility. And it worked (For the most part, I’ll get into that later.) It also allowed us to ship extremely quickly with minimal overhead.</p>
<p><img src="dark-mode.png#tocontent" alt="Comparison of light and dark mode on Pinterest.">
<em>We kept our dark mode simple and it paid off.</em></p>
<h2>I before E except after C…except when not</h2>
<p>Anyone that’s had to learn English is familiar with the classic “i before e” rule. They’re also keenly aware of how silly the rule is, and that it’s not even reliable. A language is useless if no one can learn its rules. The harder a language’s rules are to learn, the greater chance people will:</p>
<ul>
<li>Misunderstand how to use it</li>
<li>Not feel comfortable speaking to people</li>
<li>Stop trying to learn it</li>
</ul>
<p>Systems are especially difficult when components have different properties depending on its context. If you use words like “if,” “but,” and except” to explain how a component works, it’s time to reevaluate. Either streamline the component to remove conditional rules or break it up into separate, easier-to-use ones. I’m guilty of the example below.</p>
<p><img src="dark-mode-issues.png#tocontent" alt="Dark mode issues">
<em>About that dark mode effort… Our initial palette forced some unfortunate one-offs, specifically how our inputs and buttons needed to slightly lighten on elevated surfaces to remain accessible. That treatment is something I’d love to take back.</em></p>
<p>Complicated or nonsensical rules won’t be followed. If you want to make a system that no one uses, make it hard to understand.</p>
<h2>OMGLOL</h2>
<p>Slang happens. People make up words. In a perfect world, those words still feel like they’re a part of the language. But they shouldn’t rehash another word for a different meaning (see: salty) or be gibberish (see: ROFL).</p>
<p>Custom components that aren’t a part of your system are like slang — and they can and should conform to the system’s rules. Plan for design-slang deviations and find a way to guide them to be compatible with the system. This is where higher-level guidance of how to design components is so helpful. If you don’t provide guardrails, you’ll be dealing with the UI equivalent of Thicc. Come on, two Cs?</p>
<p><img src="combo-button.png#tocontent" alt="Custom combo button.">
<em>Above is an example of a custom combo button created by one of our product designers. It lets people combine a list and a button (the “OMGLOL” in this situation), and easily fits into the system’s aesthetic rules.</em></p>
<h2>Epilogue</h2>
<p>It’s easy to overthink design systems. This isn’t to say that creating a design system is a piece of cake — it’s not — but we don’t need to make it harder than it already is. At the core of a design system, we’re trying to create logical, repeatable rules that allow people to “speak the language” competently, salty slang and all.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[An opinionated guide to designing a photography site]]></title>
            <link>/posts/photo-site-design</link>
            <guid isPermaLink="false">/posts/photo-site-design</guid>
            <pubDate>Tue, 15 Oct 2019 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[So, you’re looking to make your own photography site. Oh boy, are you in for a ride...]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Making a design system is a people job]]></title>
            <link>/posts/design-systems-are-a-people-job</link>
            <guid isPermaLink="false">/posts/design-systems-are-a-people-job</guid>
            <pubDate>Wed, 06 Feb 2019 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[Think designing buttons is tough? Try convincing everyone in your company to use it.]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Writing is design]]></title>
            <link>/posts/writing-is-design</link>
            <guid isPermaLink="false">/posts/writing-is-design</guid>
            <pubDate>Tue, 05 Jan 2016 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>I have long held the opinion that writing is crucial to design. Unfortunately I did not practice it. Writing was not given much priority while I attended art school and continued to be of little concern early in my career. I took my writing seriously once my wife began editing my blog posts. The first few sessions were rough. I was failing at the most fundamental level—I wasn’t getting a point across. Ironically, design is <em>all about</em> getting a point across.</p>
<p>I am not suggesting that the design community considers writing unimportant. It is just treated as <em>something else</em>. The aesthetics of the visual and textual will continue to be disconnected until that changes. Writing is design. There is no separation.</p>
<p>Designers devote endless hours to make their solutions more elegant. They understand the importance of detail. They cherish clarity and simplicity. The same isn’t often said about their craftsmanship of words. Dieter Rams published the <a href="https://en.wikipedia.org/wiki/Dieter_Rams#Dieter_Rams:_ten_commandments_for_good_design">ten principles of design</a> which guide many in the practice. Below is a derivation of Ram’s principles to illustrate how writing and design are often one and the same.</p>
<h2>Good writing is reader-focused</h2>
<p>Your writing’s content, style and format should benefit your readers. Publishing content to fit a schedule, prop up traffic or just rant wastes readers’ time.</p>
<h2>Good writing is trustworthy</h2>
<p>Readers have to know they read is honest, genuine and fair. Writing that lacks any of those qualities erodes credibility and trust.</p>
<h2>Good writing makes its subject useful</h2>
<p>Writing has limited impact if readers can’t relate to the subject. If they can’t relate, they can’t “use” it. Informing is prerequisite, empowering is ideal.</p>
<h2>Good writing is unobtrusive</h2>
<p>Writing does not need to be verbose to be smart. Communicate with the most accurate, simple words.</p>
<h2>Good writing is focused</h2>
<p>A good piece of writing concentrates on the subject. Tangents dilute and create confusion.</p>
<h2>Good writing provides novel information and perspectives</h2>
<p>Writing should have something useful to say. Piling on a subject with nothing new to share helps no one. Better to direct readers to a well-written piece than duplicate it.</p>
<h2>Good writing is aesthetically pleasing</h2>
<p>Content should be enjoyable to read. The meaning of words should carry as much beauty as their visual representation. Well executed typography without well executed writing is missing the point.</p>
<h2>Good writing is well-crafted</h2>
<p>Typos and grammatical errors are unacceptable. Writers should strive for a technically flawless reading experience.</p>
<h2>Good writing is succinct</h2>
<p>Every word written should count. Any paragraph, sentence or word lacking significance wastes the writer’s and the readers’ time.</p>
<h2>Good writing is long-lasting</h2>
<p>Trends may affect subject matter and language. Ideas shouldn’t have an expiration date.</p>
<p>Communicating ideas has been and continues to be a primary goal of design. Designers spend considerable effort to convey complex emotions, processes and concepts through visual abstractions. These endeavors have merit and provide results. Yet a simple, well-written sentence is often more effective.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Everything is a prototype]]></title>
            <link>/posts/everything-is-a-prototype</link>
            <guid isPermaLink="false">/posts/everything-is-a-prototype</guid>
            <pubDate>Sun, 04 May 2014 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>Interaction design is in constant change. Code is becoming a design medium, making prototyping a common design process. This is a step in the right direction, but is missing the point. Prototyping is not a step that designers check off the list. It’s what designers do. Everything designed is a prototype.</p>
<p>By everything, I mean <em>everything</em>. Sketches, wireframes, visual comps, clickable demos, beta releases, version 1.0 and version 2.0. They’re all a prototype for what comes next. This could be seen as arguing over semantics, so let me explain why this distinction is important.</p>
<p>We build prototypes with the explicit purpose of learning. Good prototypes don’t get bogged down in the details until necessary. Thus, they’re streamlined and fast. There’s a clear acknowledgement of “I don’t know”. Changed is assumed and failure, to varying degrees, is an expectation. Understanding is the product of a prototype.</p>
<p>When working to make something exactly right, the blinders go on. We can spend a disproportionate amount of time fussing instead of learning. More than often you find a fundamental flaw in your thinking; all your time fussing was for not. This process is inefficient and hit-or-miss.</p>
<p>Today’s digital products have short lives. Technologies change, expectations change. The things designers obsess over today are forgotten tomorrow. What persists is the knowledge uncovered through the process of creation. It’s those learnings that will make the next manifestation better. That’s why viewing design as a constant state of prototyping is important. It puts us in a state of fluidity, a openness to learn and respond. The focus is on learning.</p>
<p>The worst kept secret about design is no one knows if something will work until it’s tried. Even time-tested approaches can fall flat given the right (or perhaps wrong) circumstances. I like to say that the first try isn’t what’s important — it’s the <em>second</em> try. What happens between those two steps is what matters.</p>
<p>You’re obviously going to apply this principle differently in a sketch than a GA launch. The experiments taken with mature products will be more subtle and focused. This approach can be applied to any of the traditional steps in the design process. It’s more a way of designing than a particular kind of output.</p>
<p>Human beings are not perfect. As such, the things we make are imperfect as well. However, we have an amazing capacity to learn and adapt from our mistakes. It only makes sense then to focus less on perfect and more on slowly, constantly better. The process of design should improve <em>yourself</em> as much as what you’re designing.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[Design for speed]]></title>
            <link>/posts/design-for-speed</link>
            <guid isPermaLink="false">/posts/design-for-speed</guid>
            <pubDate>Tue, 02 Apr 2013 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>Have you ever asked a person a question where there is an unnatural delay in the response? It’s unsettling. You’re left questioning if the person heard you, if they understood, or if they’re just ignoring you. People expect a response in a certain amount of time, otherwise things get weird. The same can be said with peoples’ expectations of software. When they click a link, they expect the page to load within a certain amount of time. When they tap a button, they expect an immediate response. Otherwise things get weird. Speed needs to be a core tenant of software design in order to make good on that contract.</p>
<h2>Why Speed is Important</h2>
<p>The breaks between loading times or interactions create breaks in experience. Speed often has a <a href="https://blog.kissmetrics.com/loading-time/">greater impact on experience</a> than what’s typically focused on in design. Page loads are more important than ever when considering mobile devices. A 500Kb page size may be annoying on desktops, but it can prove unusable on mobile. Responsive design is not just about fitting a website nicely in a smaller screen. It is also responsive to bandwidth, lower computing power and other less celebrated constraints.</p>
<h2>Tips to Shape Your Thinking</h2>
<h3>Consider time as a core dimension of user experience</h3>
<p>Speed has traditionally been considered an engineering topic and been ignored by most designers. Yet design often makes or breaks performance before a single line of code is written. The temporal experience of a product (e.g., page load speeds, app performance and anything else that impedes fluidity) is foundational to the practice of interaction design. Translation: A design is unsuccessful if it sufficiently impedes performance.</p>
<h3>Understand how design can impact speed</h3>
<p>Grasping the basics of design’s impact on speed is simple. Digging into the nitty-gritty of performance is quite difficult. The basics are obvious: large files and many requests will take more time to download. Anything delivered to the user <em>takes time</em>. The challenge is uncovering the less obvious. Issues like avoiding expensive database queries or CPU-intensive tasks. The main takeaway is that <em>every decision</em> has an impact. The goal is to take a preventative approach towards the basics and to work closely with developers to avoid the less obvious.</p>
<h3>Determine where speed resides in the hierarchy of experiences you’re designing</h3>
<p>Every designed experience has a hierarchy of needs. Those needs shift in priority based on the product’s focus or the people it&#8217;s for. While speed may not always be at the top of the list in needs, it should always be part of the equation. Understanding the importance of speed in the experience will inform your compromises.</p>
<h3>Make every element justify its existence</h3>
<p>Designers already know that every pixel on the screen needs to be accounted for; every interaction justified. That same approach should be taken towards speed. Each request, byte and query added should be intentional and markedly improving the experience. If not, it should be gone.</p>
<h3>Treat bytes like pixels</h3>
<p>It’s great to see an increased attention to craft, simplicity and a pixel-level focus in interface design. That same tenacity towards aesthetic and reduction needs to be directed towards performance. This means optimizing your images, cleaning your HTML, CSS and Javascript. Make your sites pixel-perfect <em>and</em> byte-perfect.</p>
<p>The points above are not far off from what’s typically prescribed for effective design. The difference is that designers normally talk about stripping things away to simplify interaction. Those same practices of refinement and reduction yield equally worthwhile results for faster web experiences. The world will thank you.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
        <item>
            <title><![CDATA[In defense of hard]]></title>
            <link>/posts/in-defense-of-hard</link>
            <guid isPermaLink="false">/posts/in-defense-of-hard</guid>
            <pubDate>Tue, 08 Jun 2010 00:00:00 GMT</pubDate>
            <content:encoded><![CDATA[<p>Once upon a time, software was a tool used in a professional setting. That seems like a lifetime ago. Software is now engrained in daily modern life. Far from the professional tool, it’s for everyone. Usability and ease-of-use were less of a concern (if any concern at all) before this shift. Software companies could rely on training and manuals to make up for unintuitive interfaces. That all changed as software became more consumer-focused. A strong emphasis was put on reducing friction and cognitive load to encourage adoption — and it worked. The problem is that it may have worked <em>too well</em>. As software becomes more frictionless and intuitive, there’s less inconvenience to remove. With most of the annoying and unnecessary friction gone, we’ve started to cut the kind of friction that can be vital to growth and accomplishment. In doing so, we’re stripping out the opportunities for positive experiences.</p>
<h2>When easy becomes vapid</h2>
<p>The line between simple and simplistic is subjective. No one wants unnecessary complexity. However, we cross the line when simplifying a concept negatively impacts the user. An example is the ubiquitous auto spell check feature in today’s software. While convenient, it can become a crutch leading some unable to adequately proofread.</p>
<h2>Vapidity lets people down</h2>
<p>Designers put immeasurable time and resources into removing cognitive load from our daily interactions. On the surface, there is nothing wrong with this, yet, overemphasis on easy comes at a cost. This effort often results in a shallow derivative of the subject’s original form, trivializing both subject and user. The premise for removing difficulty is justifiable. Many people feel intimidated when presented with too much complexity. Yet the conclusion to remove complexity at any cost misses the mark. The simplification-at-any-cost approach leads to potentially innovative solutions being dead on arrival if they have the unfortunate side-effect of a learning curve.</p>
<p>Simplistic products give a false impression of competence which removes the incentive to learn. This illusion of aptitude ultimately wastes peoples’ time. It either creates dependency on the product or let-down when people discover their domain knowledge was never adequate.</p>
<p>An example of trivializing important, complex experiences is found on legacy.com. The website takes the burden out of sharing your condolences by <em>writing them for you</em>.</p>
<p>There should be nothing easy about writing the condolences for the loss of a loved one. This is a prime example of how over-simplifying tasks robs opportunities for growth. When we automate something so fundamentally human, we strip out our most essential experiences. Making the naturally complex unnaturally simple treats neither the subject or the user with respect. This denies people the skills they need to perform a task when it inevitably becomes necessary.</p>
<p>No one advocates for designing solutions that are unnecessarily obtrusive or convoluted. We should not need to “walk in the snow uphill both ways” for every single thing we do in our lives. Yet we should also not create the false impression that one can walk downhill both ways.</p>
<h2>Recommendations</h2>
<p>Our goal should be to transform the <em>difficult</em> into <em>rewardingly challenging</em>. While nothing below is particularly new, they are still worth noting.</p>
<h3>Challenge people (in the right ways)</h3>
<p>Expect more of your users and make your product worth their time. Some of our most rewarding moments come from overcoming challenges. Not the convoluted, time-wasting moments, but the difficult, yet important tasks that we had to work through. Why then would we shy away from presenting these types of opportunities to our audiences? Software should expect or even a demand people to learn and grow to “get to the good stuff”.</p>
<p>Determining the correct level of difficulty is necessary for a fulfilling experience. Too elementary, and the value to engage is questionable. Too onerous and immediate frustration kicks in. Regardless of its difficulty, this equilibrium is crucial to maintaining a state of flow. <a href="https://en.wikipedia.org/wiki/Mihaly_Csikszentmihalyi">Mihaly Csikszentmihalyi</a> states one of the three conditions for flow is, “… a good balance between the perceived challenges of the task at hand and his or her own perceived skills. One must have confidence that he or she is capable to do the task at hand.”</p>
<h3>Honest trumps simple</h3>
<p>Superficially presented subjects lead to superficial understandings of them. In dumbing down our language, concepts and processes, we often warp their true form. Some tasks are just tough. Some require weeks, months, or years of practice to become proficient. That’s OK. It’s our responsibility to be upfront about this and to help encourage/empower users’ growth. It’s irresponsible to insinuate a shortcut exists when it doesn’t.</p>
<h3>Simple, with depth</h3>
<p>Some of the most successful products don’t take much time to learn, but take a long time to master. This comes from drawing out the subject’s full complexity until the user is ready for it. The elementary is obvious, the advanced is more subtle. An example of this is the OS X close button’s unsaved state. If a file has unsaved changes, the close button will have a dark dot in the middle.</p>
<p><img src="unsaved-changes.png#tosize" alt=""></p>
<p>Explicit? No. Yet I doubt that was the intention of this design decision. It was there, adding depth to the experience if/when it was noticed, but not critical if missed.</p>
<h3>Articulate the importance of complexity rather than avoid it</h3>
<p>If a subject is naturally complex, work to make it no more complex than it needs to be — but no less. People are not averse to complexity, but they need to know it’s worth their time and energy. Educating them on how to do something is not enough, there should be education on why it’s important. People enjoy learning if the subject is engaging.</p>
<p>Challenging users in the correct manner will lead to them being more self-sufficient. Informed users have a better idea of what they want and can better articulate why they want it. A person engaged with a subject is more willing and able to grow with it.</p>
<p>The task to make difficult processes simple, while preserving their true form is significant. Selling it to people can be even more difficult. For myself, the debate is not whether it is necessary, but where the line is drawn. No matter where each of us land on this line, if designers take the easy way out, we can expect no better from users.</p>
]]></content:encoded>
            <author>pj@pjonori.com (PJ Onori)</author>
        </item>
    </channel>
</rss>