RGB has been the standard color model on the web for decades. It’s widely supported and works well. But it wasn’t designed to replicate the way humans perceive color. oklch() models lightness, chroma, and hue in a way that mirrors human vision. That makes color manipulation more predictable, accessible, and expressive than RGB allows. What […] The post oklch() in…
#design
69 posts
19 May
30 Apr
At PayPalDevDay 2025, PayPal’s Nathaniel Olson discussed a familiar problem. When he asked an AI coding assistant to build a product involving APIs, it was far too common for the AI to use outdated APIs rather than the most current iterations. It’s not that the official documentation or SDKs weren’t up-to-date, it’s the fact that ...
22 Apr
At some point or another, most software developers find themselves at a career crossroads. In one direction is comfort, ease, and predictability. In the other? Challenge, intention, and responsibility. (And, yes, higher salaries to go along with them.) That second route is what happens when developers start to think more deeply about the systems behind ...
16 Apr
“Web APIs today are broken.” A bold statement made by Microsoft’s Darrel Miller during his talk at the November 2025 A2ASummit. It’s a sentiment shared by many industry leaders. The interfaces that we see as the glue holding the digital world together have become too brittle to support modern applications, especially those powered by AI. ...
9 Apr
In recent months, the hype machine around agentic API consumption has been working overtime. In 2025, Kong reported that as many as 90% of enterprises are actively adopting AI agents and 79% expect full-scale adoption within three years. The agents aren’t coming; they’re here. The importance of agent experience has taken center stage, while AI ...
7 Apr
Uncovering the Shape of Fraud with Cosmos Explorer: Visual Metaphors Behind Millions of Transactions The Data Visualization Research team is developing Cosmos Explorer, an interface that leverages universe-related visual metaphors to convey information about the billions of transactions processed by Feedzai. Pedro Cruz, professor at Northeastern University, partnered with Feedzai to bring this idea to life by contributing with his…
23 Mar
For years, designers waited on development. We’d finish research, deliver specs, hand off mockups — and then sit in a holding pattern while engineers built what we’d envisioned. The bottleneck was implementation. Design was ready. Dev needed time. That dynamic has completely flipped. Development speed has accelerated dramatically. AI coding tools, agentic workflows, and orchestrated […] The post Product Design…
19 Mar
Introduction 🔔 At Slack, notifications are how teams stay in the loop, but they can also become overwhelming when not designed with intention. Our goal was to make staying informed feel effortless. We set out to rebuild one of Slack’s most complicated systems from the ground up by bringing calm, consistency, and clarity to the…
Model Context Protocol (MCP) has been absolutely everywhere since it was first released in November 2024. Sometimes referred to as the “USB-C of AI,” MCP has come forward to help tame some of AI’s most glaring issues, namely a lack of standardization around integration as well as the context to understand what it’s accessing. Given ...
17 Mar
If you build distributed applications, you’re likely already familiar with microservices. While the definition varies across the tech industry, I prefer the one from Sam Newman’s book Building Microservices. In it, he concisely describes microservices as “small, autonomous services that work together.” The concepts of microservices have been around for about fifteen years now. However, ...
11 Mar
AI introduces many exciting developments in the software industry. However, the uncontrolled use of generative AI has the potential to undermine our mission to provide a platform for authentic voices in the API community. For this reason, we are clarifying our AI usage policy. This policy applies to anyone who contributes content to Nordic APIs, ...
24 Feb
When building agentic AI systems that interact with APIs and other services, securely managing JSON Web Tokens (JWTs) becomes a critical part of the architecture. Unlike traditional web applications, agentic AI can operate autonomously, invoking APIs, making decisions, and passing sensitive information without direct human supervision. These nuances create unique authorization challenges around how JWTs ...
12 Feb
Model Context Protocol (MCP) has made huge waves in the industry as of late. Since MCP makes it incredibly easy to point agentic implementations towards tools and resources, it’s been used for everything from context-driven customer service tools to order fulfillment backends. One of the most interesting use cases, and one that is currently emerging ...
11 Feb
Nothing frustrates a user more than a slow or non-responsive website or application. This is especially true in ecommerce, where slow-loading pages lead to high bounce rates and lower conversion rates. Often, the hidden culprit behind delays is a high-latency API. Many app developers integrate multiple third-party APIs, cumulatively adding more latency. As more APIs ...
3 Feb
Imagine you’re a developer working with multiple AI agents based on large language models (LLMs). On Monday morning, your client asks you to connect an AI coding assistant to access GitHub issues, Jira tickets, and internal documentation via MCP-powered tools. That’s where a centralized MCP tool registry comes into play. Instead of spending hours browsing ...
15 Jan
The emergence of AI coding assistants has ushered in a new era of software creation, formalized under the concept of “vibe coding.” This concept offers tremendous productivity but also introduces significant complexities, particularly when building critical APIs. Here is a comprehensive overview of what vibe coding is and the benefits it delivers. We also cover ...
13 Jan
The API community has been known to be on the lookout for shadow APIs for a number of years, as they are a common source of cybersecurity risks like unauthorized access and data leaks. It does not matter how robust your cybersecurity is when an endpoint falls outside of your protective barriers. Once an API ...
7 Jan
In OpenAPI, the industry standard API specification, small steps can have major implications. While OpenAPI 3.2.0 may not reinvent the wheel, as it still follows the same architecture and uses the JSON Schema Specification Draft 2020-12 implemented in OpenAPI 3.1.0, OpenAPI Specification v3.2.0 still has enough changes to warrant excitement while remaining compatible with older ...
1 Jan
In the last few months, multiple vendors across the agentic ecosystem have independently embraced a similar pattern referred to as code mode. Instead of thinking of Model Context Protocol (MCP) solely as a protocol for issuing JSON-RPC tool calls, the code mode pattern treats MCP schemas as a foundation for generating typed client libraries that ...
10 Dec 2025
Choosing the right architectural style isn’t just a technical detail — it’s critical to the success of your API and every application that relies on it. The architecture determines how easily developers can understand and integrate your API, profoundly impacting their experience. It dictates how clients and servers communicate, directly affecting application efficiency, performance, and ...
9 Dec 2025
The tech space is often overly concerned with the new and flashy — it seems like every day, there is a new product release, a new iteration, some big new thing that secures headlines and coverage. But the reality is that there is a whole world of old protocols that are not only alive — ...
4 Dec 2025
Technology is only as useful as it is usable. Users will only discover a product’s innovative features if it’s designed well enough for a user to first find and then use them. This is just as true with agentic AI as anything else — even if the agent’s doing a good portion of the work. ...
3 Dec 2025
Model Context Protocol (MCP), a standard for connecting AI agents to external tools and data, is still a very new tech, and as such, it’s experiencing the same growth pains that any other technology experiences. In this process, certain use and design patterns are starting to emerge — and not always for the better. One ...
25 Nov 2025
If you asked ten software developers what a contract test is, you’d get twelve different answers. One might say that it’s something to do with schema validation. Another might say that it’s something to do with API specifications. Yet another might tell you that it’s got something to do with the legal profession and kindly ...
13 Nov 2025
In modern system architectures, understanding data flow is crucial. Two fundamental concepts are north-south and east-west communications. Although both deal with APIs and services, they solve fundamentally different problems and require distinct tools. Below, we’ll explore when to use API gateways or a service mesh for north-south and east-west traffic. We’ll consider when each approach ...
11 Nov 2025
We often talk about API design here at Nordic APIs and best practices to follow. One of those best practices is clear and consistent naming conventions throughout the API — from endpoint resources and URIs to fields and parameters. Naming is often overlooked in API design, leading to a poor experience for consumers. Imagine the ...
23 Oct 2025
API documentation is the cornerstone of discoverability. Well-structured API documentation allows an API to be understood by humans as well as machines. It lets a system understand how the API is structured, what it does, and includes invaluable metadata for further filtering and sorting. This means that API documentation is equally vital for an API ...
22 Oct 2025
AI agents are increasingly autonomous in the way they interact with APIs and the systems those APIs represent. But unlike human developers, who can intuit solutions pretty readily, agents aren’t quite up to the task of reading docs, joining Slack channels, or pinging support when something breaks. They rely entirely on metadata, structure, and observed ...
14 Oct 2025
Model Context Protocol (MCP) has been the talk of the tech world in 2025, promising to unlock the next level of AI’s usefulness. It’s the next stage in autonomous AI, allowing systems to make changes directly to the real world. Autonomy is just one reason that MCP promises to be such a game-changer, though. It ...
13 Oct 2025
Real-world constraints often impact how we build digital services. This is especially true for enterprise APIs in regulated industries that transmit sensitive data across jurisdictions. Constraints around how data is managed can easily slow progress — but it doesn’t have to be that way. At Platform Summit 2025, Yinka Omole, a lead software engineer at ...
9 Oct 2025
“So it happened, Scott. An MCP server I use in one of my workflows shipped a breaking API change, and my entire workflow broke.” With this single line, Scott Feinberg illuminates a core problem that the excitement around Model Context Protocol (MCP) has fundamentally ignored: API versioning. APIs change all the time — that’s what ...
24 Jul 2025
Summary of what was discussed at the Geometry Nodes workshop in July 2025.
28 Jan 2025
Qualitative comparison of image embedding models to power a scalable similar-image replacement system for Canva designs.
3 Jan 2025
The Animation & Rigging module workshop at Blender Conference 2024 focused on creating a minimal viable product for layered animation workflows.
13 Dec 2024
Next steps for overrides: how to make them easier to use and manage.
1 Jun 2023
Exploring high-level user interfaces for Geometry Nodes assets.
9 Jan 2023
Author: Darragh Burke, Software Engineer II, Web Development at Tinder Tinder’s UI Opportunities: Wildfire When Tinder first launched in 2012, it pioneered a brand new user experience: the Swipe Right® and “Swipe Left”™ features. The app’s simplicity was a big part of what made it so appealing. An early version of Tinder We’ve emphasized building new features and moving fast…
11 May 2022
The creative journey for a new Icon.
22 Mar 2020
I really like Secure by Design. The key idea is that there is a big overlap between secure code and good software design. Code that is strict, clear and focused will be easier to reason about, and will have fewer … Continue reading →
8 Mar 2020
The Laughing Man 笑(わらい) い 男(おとこ) (warai otoko) is a fictional character in the anime series Ghost in the Shell: Stand Alone Complex. This lil’ project is an animated SVG using CSS transforms to rotate the text. The Laughing Man logo is an animated image of a smiling figure wearing a cap, with circling text quoting a line from Salinger’s…
23 Feb 2020
This article was derived from my GopherCon Israel 2020 presentation. It’s also quite long. If you’d prefer a shorter version, head over to the-zen-of-go.netlify.com. A recording of the presentation is available on YouTube. How should I write good code? Something that I’ve been thinking about a lot recently, when reflecting on the body of my […]
30 Jun 2019
This is a blog post I’ve intended to write for a very long time. (Other blog posts in that category include a recipe for tiramisu ice cream, and “knights and allies”.) It’s one of those things that’s grown in my mind over time, becoming harder and harder to start. However, there have been three recent … Continue reading Versioning limitations…
23 Apr 2018
If there was one word to describe the theme of JSConfIS it would be experience. Beyond the wonder and fantastical environment of the conference’s location and backdrop (hosted in Reykjavik, Iceland at their world-famous Harpa concert hall) – the majority of talks focused on topics relating to both the user and the developer experience too. The […]
12 Mar 2018
We held our first accessibility workshop and in this post, we highlight our approach and key takeaways.
22 Nov 2017
The four of us (Charisse, Jan, Paulo & Timur) arrived early for coffee. Right before the first talk in the morning we were welcomed by a very happy DJ. As it turned out later, he embedded snippets of the talks in his songs of vastly different genres in the breaks. Over the course of the […]
5 Sept 2017
Language: Scala TestTool: Scalatest How did we get here? When systems become reasonably complex, tests must manage cumbersome amounts of data. A test case that may test a small bit of functionality may start to require large amounts of domain knowledge about the system being tested. This is often done through the mock data used […]
30 May 2017
Recently three of our developers attended the CSSconf 2017 in Berlin. The talks have been inspiring for us and once again we got clear about what a mature language CSS has become by now. The steady addition of new features continue to amaze and the enthusiasm of the community is infectious. The conference itself was […]
8 May 2017
You might have heard that you shouldn't be using JWT. That advice is correct - you really shouldn't use it. In general, specifications that allow the attacker to choose the algorithm for negotiation have more problems than ones that don't (see TLS). N libraries need to implement M different encryption and decryption algorithms, and an […]
20 Apr 2017
There is an overwhelming amount of books available today for UX (user experience) professionals of all levels. In this post I will share the books that helped me get started in UX. The following books got me hooked on the idea of working in UX and educating myself on the topic. They helped me shape an idea of what UX…
27 Jan 2017
So many folks are wonder what they need to do to make a career of User Experience Design. As someone who interviewed many designers before, I’d say the only gate between you and a career in UX that really matters is your portfolio. Tech moves too fast and is too competitive to worry about tenure […]
25 Jan 2017
In my previous post I suggested that the best way to break the compile time coupling between the logger and the loggee was passing in a logger interface when constructing each major type in your program. The suggestion has been floated several times that logging is context specific, so maybe a logger can be passed around via […]
23 Jan 2017
This post is a spin-off from various conversations around improving (I’m trying not to say standardising, otherwise I’ll have to link to XKCD) the way logging is performed in Go projects. Consider this familiar pattern for establishing a package level log variable. package foo import “mylogger” var log = mylogger.GetLogger(“github.com/project/foo”) What’s wrong with this pattern? The first problem […]
12 Jan 2017
During Ship It Week, I took the opportunity to redesign our emails. The goal was to deliver a more modern and fluid layout in hopes of strengthening trust and creating a more pleasant user experience among our customers. Before and After Design According to research1, aesthetics play a big role on how people interact with things. And […]
16 Dec 2016
Pattern libraries sometimes fall short of helping enterprise teams build different products the same way. These palettes of components (toolbars, pop-ins) and patterns (searching, navigating) can be assembled into any number of UIs, leading to too many right answers. While the public pattern libraries like Google Material must accommodate countless unimagined applications, our private libraries […]
14 Dec 2016
Today we’re excited to announce a new makeover for the Small Improvements application; a new font family! Please welcome “Avenir Next”! This is all part of our mission to create a more enjoyable, engaging and enticing experience for Small Improvements users. The Design Team @ Small Improvements has had a big year; going responsive, updating colours, icons […]
7 Nov 2016
For the past few weeks I've been working on Logrole, a Twilio log viewer. If you have to browse through your Twilio logs, I think this is the way that you should do it. We were able to do some things around performance and resource conservation that have been difficult to accomplish with today's popular […]
3 May 2016
I was hired in December 2014 as the sixth engineer at Shyp. Shyp runs Node.js on the server. It's been a pretty frustrating journey, and I wanted to share some of the experiences we've had. There are no hot takes about the learning curve, or "why are there so many frameworks" in this post. Initially […]
1 Apr 2016
Here are my notes from day 1 of Clarity Conf. Apologies in advance to the speakers whom I am certain I misquoted and misrepresented. Also if I missed things. Also for having some personal stuff just in the middle of there. Also because there's probably like 90 typos. I may
18 Mar 2016
This post is a continuation of a suggestion I made on twitter a few days ago. In Go, for any type T, there exists a type *T which is the result of an expression that takes the address of a variable of type T1. For example: type T struct { a int; b bool } […]
6 Feb 2016
Sandi Metz’s post on abstraction struck a chord with me recently. I was working with a piece of code which looked like this (in pseudo code): func Start() { const filename = "..." createOuputFile(filename) go run(filename) } It turned out that createOutputFile was written in an obscure way which first caused me to look at […]
14 Jan 2016
Recently there's been a trend in API's to return more than one error, or to always return an array of errors, to the client, when there's a 400 or a 500 server error. From the JSON API specification: Error objects MUST be returned as an array keyed by errors in the top level of a […]
5 Nov 2015
This is a post inspired by a thread that Nate Finch started on the Go Forum. This post focuses on Go, but if you can see your way past that, I think the ideas presented here are widely applicable. Why no love ? Go’s log package doesn’t have leveled logs, you have to manually add prefixes like […]
6 Sept 2015
The Shyp API currently runs on top of the Sails JS framework. It's an extremely popular framework - the project has over 11,000 stars on Github, and it's one of the top 100 most popular projects on the site. However, we've had a very poor experience with it, and with Waterline, the ORM that runs […]
31 Aug 2015
Okay! You had an idea for how to improve the project, the maintainers indicated they'd approve it, you checked out a new branch, made some changes, and you are ready to submit it for review. Here are some tips for submitting a changeset that's more likely to pass through code review quickly, and make it […]
24 Mar 2014
"Build software like a tank." I am not sure where I read this, but I think about it a lot, especially when writing HTTP clients. Tanks are incredible machines - they are designed to move rapidly and protect their inhabitants in any kind of terrain, against enemy gunfire, or worse. HTTP clients often run in […]
19 Sept 2013
Note: this blog post has now been turned into a video by Webucator, to go alongside their C# classes. (I’ve ended up commenting on this issue on Stack Overflow quite a few times, so I figured it would be worth writing a blog post to refer to in the future.) There are lots of ways … Continue reading Casting vs…
22 Jun 2013
It seems to be quite a long time since I’ve written a genuine "code" blog post. Time to fix that. This material may well be covered elsewhere – it’s certainly not terrifically original, and I’ve been meaning to post about it for a long time. In particular, I remember mentioning it at CodeMash in 2012. … Continue reading Array covariance:…
10 Feb 2013
How should you design the controls for a shower? Let's take a quick look. Affordance A device should make clear by its design how to use it. Take a hammer for example. No one has ever looked at a hammer and wondered which end you are supposed to grab and which part you're supposed to […]
13 Sept 2012
Hi all! I am here to present my new blog theme. I know that I have to blog more but I am not having time for that. So, yesterday I was thinking in a way to blog more and decided to create a new blog theme. I think a clean and small blog theme can … Continue reading My blog’s…