We’re hiring a Staff Software Engineer to work on Tailwind CSS, Headless UI, and our supporting ecosystem of tools like the Tailwind CSS IntelliSense extension for VS Code.
This is a fully remote position with a salary of $275,000 USD, open to candidates in the Eastern (UTC-5) to Central European (UTC+1) timezones. We’re accepting applications until Wednesday April 3rd at 9:00pm ET.
We’re a small multidisciplinary team and you’d have a wide variety of responsibilities, including:
- Build and document new features for projects like Tailwind CSS and Headless UI.
- Contribute improvements to upstream projects like Lightning CSS, Next.js, and Vite.
- Maintain CI workflows and automations for running tests and building releases.
- Manage issues and contributions from the community to our open-source repositories.
- Define and uphold engineering standards with a focus on code quality, performance, and documentation, to make sure we’re always shipping work we can be proud of.
- Manage project priorities and adjust scope to meet project deadlines without sacrificing on top-level goals.
Here are some real examples of projects you would have worked on in the last few months:
- Create a Rust library for extracting utility class names — a tool that can scan an entire directory of template files as fast as possible and extract potential class names in parallel.
- Add support for composing variants in Tailwind CSS — make it possible to author classes like
group-has-peer-focus:underline
without an explicit group-has-peer-focus
variant.
- Write a fast CSS parser in TypeScript — to parse only the exact amount of detail needed by Tailwind’s internals, looking for domain-specific shortcuts to make it significantly faster than existing libraries for our needs.
- Fix an issue with scroll-locking in Headless UI — to make sure scrollable elements in dialogs can still be scrolled on iOS.
- Set up GitHub Actions workflows for compiling our Rust libraries — configure our release pipeline to properly build and distribute our native packages for each supported platform.
- Campaign for new APIs we need in Vite — prepare a compelling argument for improvements we need to support Tailwind CSS and collaborate with the Vite core team to prototype a solution.
- Fix an issue with loading plugins in the Tailwind CSS standalone CLI — where built-in plugins like
@tailwindcss/typography
would fail to load when writing your config file in ESM or TS.
- Support virtualized lists in Headless UI comboboxes — make it possible to render lists with thousands of items with no performance issues or loss in UI fidelity.
- Build an embedded search implementation for our documentation templates — so customers don’t need to rely on a specific hosted search solution like Algolia.
- Optimize incremental build performance in Tailwind CSS v4.0 — find ways to make rebuilds as fast as possible, not stopping until you see the microsecond symbol in your terminal.
After you start, you’d work on upcoming projects like:
- Develop a Tailwind CSS bundler plugin for Next.js — to generate your CSS using the module graph instead of scanning the file system, working with our contacts at Vercel to get it right.
- Create a JavaScript library for running Tailwind CSS v4.0 in the browser — an updated version of our Play CDN library that uses our new engine under the hood, with a focus on making it as small as possible.
- Design a set of IDE integration APIs for Tailwind CSS — first-class, stable, documented APIs that editor teams like JetBrains can rely on to add things like completions, lint warnings, class sorting, and more to their tools.
- Design, build, and document a Tooltip component for Headless UI — making sure it’s fully accessible, with a flexible but delightful API.
- Build a backwards compatibility layer for Tailwind CSS v4.0 — re-introduce support for JavaScript configuration files, explore codemod tooling, and make sure existing community plugins are as compatible as possible with the new engine.
- Campaign for simplified Tailwind CSS integration in popular frameworks and bundlers — by writing up specific implementation proposals, and creating pull requests that demonstrate how the integrations would work.
We’re looking for someone with strong engineering skills and experience leading small teams who shares our most important values:
- You like to pair on problems. You get energy from working directly with other people in code.
- You hold people to a high standard, and inspire them to do their best work. You’re candid and direct with feedback, and motivate your teammates to raise their own bar.
- You’re fanatical about polish — almost to a fault. It’s important to you that every variable name is just right, code comments are free of grammatical errors, and tests are named consistently.
- You miss when software used to be fast, and you love writing code that shows what these crazy machines we use today are actually capable of.
- You’re energized by unfamiliar territory. You enjoy the challenge of digging in to a codebase you’ve never seen before to try and troubleshoot a complex problem.
- You’re a great writer. Whether it’s a project status update, documentation, a pull request description, or a response to a GitHub issue, you think about the reader and care about communicating clearly.
- You’re good at breaking down projects. You’ve got good instincts for what to work on first, what’s safe to save for later, and how to get to a working demo as fast as possible.
- You love great design. You might not consider yourself a designer, but you kinda wish you could wave a magic wand and become one.
On the technology side, you’ll be a great fit if you have expertise in these areas:
- Node.js — almost all of the tooling we work on (like Tailwind CSS, our bundler plugins, and our IDE integrations) runs primarily in Node.js environments.
- TypeScript — most of our projects are already in TypeScript, and we always use it for new stuff. We really value that it nudges us away from writing code that’s too clever.
- React — Headless UI is a very advanced and low-level React codebase, with more
useEffect
calls than should probably be legal.
- Accessibility — building an accessible UI library like Headless UI is incredibly hard, and often requires making informed and creative trade-offs to get things right.
- Rust — we don’t write it every day, but some key components of Tailwind CSS v4.0 are written in Rust and I bet we’ll be doing more of it in the future.
- Tailwind CSS — yeah, we use this quite a bit here if you can believe it.
- We ship — we don’t do 18-month projects that are irrelevant before they’re even finished. We design projects we can deliver in two months or less so we never have to wait too long before we can make fresh decisions about priorities.
- Our work has impact — Tailwind CSS is installed almost 9 million times every week by millions of developers around the world, and used by the world’s biggest companies to build the world’s best websites. When you work here, you get to tell people “I make the thing they use to build the ChatGPT interface.”
- We’re small, on purpose — we have the resources to hire a lot more people, but we don’t want to build a big, complicated company. We’re a tight-knit team where you’d work directly with the founders every single day.
- We’re fully remote — work from wherever you want. We collaborate in real-time every day over Tuple and in Figma, but we all work from the comfort of our own homes.
- We’re independent and profitable — we don’t have investors or a board to justify our decisions to, and aren’t burning through cash trying to make the business work. Landing the next big customer or closing the next round isn’t a stress anybody has to deal with here.
- We care about doing great work — as a profitable company, we can afford to go the extra mile and take our time to be proud of the things we ship. You don’t need permission to write tests here.
- We’re not trying to make it big — we say no to great opportunities if there’s any chance it would make our days less fun. We care about making enough money to keep doing what we enjoy, not doing whatever it takes to make as much money as possible.
- We don’t take ourselves too seriously — we believe in doing great work, but we also recognize that we’re building a CSS framework, not making breakthrough medical discoveries. We hide jokes in our documentation, we don’t run our writing through a corporate PR filter, and we’re not too cool to smile in our headshots.
The compensation for this position is $275,000 USD per year, no matter where you’re based.
- Work remotely — work from wherever you’re most productive, no commuting to an office.
- 30 days paid time off — six weeks of total time off for you to use throughout the year.
- Equipment budget — $7500 when you start to spend on anything you need to do your best work.
- Annual team retreats — fun-focused trips where we get together in person to recharge and build better relationships.
- Winter break — we always shut down for at least a week at the end of the year to spend the holidays with our families, on top of our regular paid time off.
We’re a very small distributed team, so we work together as independent contractors. That means we cannot offer certain benefits like health insurance or a retirement savings plan.
You should only apply for this position if you are comfortable with being self-employed from the perspective of your local tax authority.
To apply, write something specifically for this position that tells us why you’re a great fit for the role and what you can bring to Tailwind Labs.
Examples of things we’re interested in learning about you include:
- What you’re excited about, and the work you’d be most looking forward to in this role.
- Interesting projects you’ve worked on, especially things that are relevant to the work we do here.
- Open-source contributions, whether it’s your own project, a pull request you’re proud of, or a well-written bug report you filed.
- Previous experience, especially any leadership responsibilities you’ve held in other roles.
- Technical writing, like blog posts you’ve published or documentation you’ve worked on.
This role is open to candidates in the Eastern (UTC-5) to Central European (UTC+1) timezones, and we’re accepting applications until Wednesday April 3rd at 9:00pm ET.
We’ll spend a couple of weeks reviewing applications, and we’ll let you know whether we’d like to invite you to the interview process by mid-April.
Here’s what the process looks like:
- Introduction call — a short call where we’ll ask you some questions to get to know you better, and answer any questions you have about the role.
- Take-home project — next, we invite about ten people to complete a small technical project. Expect to spend about half a day on this, and we’ll pay you $500 for this time.
- In-depth interview — after the take-home project, we do a longer interview with the top candidates where we’ll ask you questions about the project and your experience in previous roles.
- Pair programming session — the final step is a one-hour pair programming session with another engineer on our team, where you’ll work on something unfamiliar to both of you to get a better sense of what it would be like to really work together.
We’ll make an offer in May, with an aim to start working together in late May/early June.