Building a simple design system for engineers

The Appsmith team was mainly developers and technical staff, so creating their design system posed a whole new kind of challenge—how do you make it easy for engineers to use?

Warming up

Warming up

⭐️ Principal Designer

Design Systems

Creative Direction

Illustration

Icon Design

Experience

Interaction

Identity

When Abhishek (Appsmith’s CEO) first emailed me, their platform had already been in development for two years. They weren’t selling subscriptions but keeping it open-source and free for individuals. About a thousand backend engineers used Appsmith and regularly gave them feedback on Discord.

Appsmith was full-featured, but crude. Team members were responsible for the part of the product they were building, but there was little consistency between different sections. They had just begun making it feel like one single thing. They wanted to bring me on board to help with the UI and usability. Abhishek also asked me to come up with something for their visual language. All of this was right up my alley, so of course I immediately said yes and got to work.

Appsmith is for super-powered developers

Appsmith is for super-powered developers

The platform would let engineers plug into multiple databases at the same time, display data and modify it with JS in minutes, something that would otherwise have taken hours.

Developers made apps without writing much code, using ready-made widgets instead. Internal tools that would never have been a priority before, now got built quickly and easily. It was a fast way to get team mates on board with new ideas.

Here’s what Appsmith looked like back then

A very functional platform, but less mature and not as well-designed as competitors. The service would go down for hours, which made new users leave thinking it was unreliable. It was slow to load, and the interface felt different than the IDEs developers were used to (and who wants to learn a whole new thing?). It was designed off-hand by engineers, while their focus was on coding up components.

Even then, Appsmith already had a vague sort of design system in place. There were variables for colours, fonts, spacing. But with no clear organization or guide to use them, an audit showed a ton of inconsistency and duplication. Not cool. Every time a new component was needed, someone would copy an old one and loosely build on top of it.

This meant that there was no single source of truth, and parts of the app branched off in wildly different directions with every iteration.

Starting small & aligning things

Starting small & aligning things

Because the design system would be used primarily by developers, I wanted to make it really simple for non-designers to understand & replicate.

Beginning with tiny sections, I added a uniform grid inside and around components. I set specific heights and widths for inputs, and defined how elements would work next to each other. The whole thing immediately felt better. It became easier to lay out new panels, because spacing and alignment decisions were already baked into the design. It was a great base to develop the rest of the system on.

The typography checklist

The typography checklist

The existing typeface was commonly used by competing products, and not ownable. The font was too wide to fit an information-dense interface. Text would often fall off the edge of components. To replace it, I chose PT Root UI, an open-source font with some personality. It checked all the boxes to become a great Appsmith font.

The existing typeface was commonly used by competing products, and not ownable. The font was too wide to fit an information-dense interface. Text would often fall off the edge of components. To replace it, I chose PT Root UI, an open-source font with some personality. It checked all the boxes to become a great Appsmith font.

The new font is slightly condensed and more closely kerned to take up less room

Monospaced numerals stay aligned in columns

Letters take up the exact same space at any weight, so elements can remain a fixed size

Taller lowercase characters, in proportion to uppercase characters, make text much more readable at tiny interface sizes

Often-confused letters, like uppercase I and lowercase L, are well differentiated

The right kind of perfect icons

The right kind of perfect icons

A huge part of the UI depended on crisp icons for files, data types, layers, widgets and more sprinkled across the editor. To maintain an information dense design, we needed icons that were around 15px in size. We had decided to find a good set to use—problem was, most icon packs were made at 24px or 32px, and looked blurry at smaller sizes. And the few packs that were sharp were generic and ugly.

So I designed a set of 600 clean icons from scratch.

Picking a new primary colour

Picking a new primary colour

The brand guidelines came with a defined Appsmith Orange, and that was it. The colour was too loud for primary elements. I wanted to find something subtle enough to use everyday, but with some character.

I tried to find inspiration in programming. I read about computers & code, tried developer tools, and kept stumbling upon powers of 2 in various contexts. 8 bits to a byte, 64-bit processors, 128-bit encryption. It was interesting, and I wondered if my colour could come from one of those numbers.

I had to put on my nerd glasses 🤓 for this. A colour’s hue is a number between 0-360° on a colour wheel. I tried plugging the numbers into this property, and found Purple 256°—a nice, neutral colour that wasn’t boring. It was complementary to Appsmith Orange, worked well in light and dark modes, and became a fun easter egg for those who discovered it. The rest of the colour palette was built around it.

Now, the fun part

Now, the fun part

So far, the editor was designed to be neutral—a default daily-use app. It needed a whole lot of empty screens, error states, and contextual messages which would be too bland by themselves. It was the perfect opportunity to sprinkle in some fun illustrations.

I drew as many things as I possibly could, in a style that was far from the systematic UI. The illustrations felt wobbly, imperfect and unusual, and they were incredibly well-received. They were light and quick to load too. Win-win.

Tactile elements on many levels

Tactile elements on many levels

With every panel in the editor being packed edge-to-edge, it was important to be able to tell things apart quickly. It had to be easy to understand whether something was active, where the separation between sections was, and to see what is clickable. Users would leave if they had to think about it.

I defined the hierarchy of UI elements by simulating physical depth. Consistent levels were assigned to various components, like real things used to have before computers had a graphical interface. Yay for basic skeuomorphism!

Recessed Levels

Recessed Levels

Text inputs, checkboxes, tracks would be here. They’re elements you enter, or where other elements fall in.

Text inputs, checkboxes, tracks would be here. They’re elements you enter, or where other elements fall in.

Surface Level

Surface Level

The base panel, text, icons were assigned this level. It would be a flat shell where components originate.

The base panel, text, icons were assigned this level. It would be a flat shell where components originate.

Raised Levels

Raised Levels

Buttons, flyouts, modals and element that would logically be pressed or floating were placed on these levels.

Buttons, flyouts, modals and element that would logically be pressed or floating were placed on these levels.

Exploring all the directions!

Exploring all the directions!

There were so many ways to use these ingredients to cook up a good app. They all felt different. Some options were clean and simple, a few were way out there but could be interesting in moderation. I experimented with a few dozen variations of the same screen, picked the best ones, and gave the team a walkthrough.

I asked them to leave feedback on the canvas as we went along, and got a ton of useful information within 30 minutes.

Technical, but charming

Technical, but charming

We decided on a design direction that wasn’t too detached from the existing app, while including many of the more thoughtful details. It was minimal, with pops of colour around points of interest. I used it to flesh out a handful of screens in detail, added missing components as I went along, and made sure it all worked together.

A system is only as good as its documentation

A system is only as good as its documentation

Since the design system was pretty close to done at this point, I organized all the components into a new Figma file. It included instructions on where and how to use them, with lots of examples. I also took this time to set up tokens for colours, type and spacing.

After sharing my work with the team, I conducted a workshop to understand if the documentation was easy to follow. A few tweaks later it was a good to go.

A fresh look

A fresh look

In the end, I translated the new design into a set of layered elements that anyone could mix-and-match—especially non-designers. Along with a regular brand guide, I created Figma components out of gradients, patterns and type treatments inspired by the editor.

I also designed floating containers that could show anything from pictures of speakers on a YouTube video, screenshots and logos for blog posts, emojis, to simple icons from a pre-defined set. The guide included hundreds of examples as a starting point.

In conclusion, two years later

In conclusion, two years later

At the end of the project, I asked the people I worked with at Appsmith for their feedback. Here’s what they had to say.

At the end of the project, I asked the people I worked with at Appsmith for their feedback. Here’s what they had to say.

Stellar work on creating beautiful illustrations and razor sharp icons for Appsmith. You require minimal input and your work is of high quality. So happy to see you raising the bar!

Head of Design

He learns fast, works fast, has a sharp eye for detail and a solid quality bar. Give him a challenge and room to grow and you'll have one of the strongest designers in your team.

Principal Designer

Timeline

2022-24

Used by

1k → 10k teams

Github Stars

5k → 36k

Repo Contributors

3x ↑

“Abhay is an exceptional designer. Like top 0.1%.”

“Abhay is an exceptional designer. Like top 0.1%.”

Abhishek Nayak
CEO, Appsmith

You communicate clearly and in a friendly manner, making discussions positive and effective. You're always ready to help, and your design work is super quick - the fastest I've seen! Even though development is not your background, you understand new projects really well. Your courage in taking on big challenges is impressive.

Product Designer

You are very fast with communication and making iterations, but the quality is high at the same time. I love that.

Product Designer

I've noticed that you always work with minimal inputs and bring the utmost creative ideas to table, your ideas are always solid and you accept feedback with grace and present even more inspiring work.

Project Manager

It was very easy for me to work with you. I appreciate that you were easily approachable, listened to my technical inputs and took them into consideration.

For the love of design
2006–Now

For the love of design
2006–Now

For the love of design
2006–Now