Martian Chronicles
- Devs in mind 2025: how to design interfaces for developer tools
Devs in mind 2025: how to design interfaces for developer tools
Editors’ choice![Cover for Devs in mind 2025: how to design interfaces for developer tools]()
- Railing against time: tools and techniques that got us 5X faster tests
Railing against time: tools and techniques that got us 5X faster tests
Editors’ choice![Cover for Railing against time: tools and techniques that got us 5X faster tests]()
- Debug AI fast with this open source library to visualize agent traces
Debug AI fast with this open source library to visualize agent traces
![Cover for Debug AI fast with this open source library to visualize agent traces]()
- How to add fast, client-side search to Astro static sites
How to add fast, client-side search to Astro static sites
![Cover for How to add fast, client-side search to Astro static sites]()
- How to make complex Chrome extensions: a zero gravity guide
How to make complex Chrome extensions: a zero gravity guide
Editors’ choice![Cover for How to make complex Chrome extensions: a zero gravity guide]()
- Martian Summer: blog, talks, open source, and ready for SFRuby in Nov
Martian Summer: blog, talks, open source, and ready for SFRuby in Nov
![Cover for Martian Summer: blog, talks, open source, and ready for SFRuby in Nov]()
- Contract shock therapy: the way to API-first documentation bliss
Contract shock therapy: the way to API-first documentation bliss
![Cover for Contract shock therapy: the way to API-first documentation bliss]()
- Don't just slap on a chatbot: building AI that works before you ask
Don't just slap on a chatbot: building AI that works before you ask
Editors’ choice![Cover for Don't just slap on a chatbot: building AI that works before you ask]()
- How to detect Safari and iOS versions with ease in 2025
How to detect Safari and iOS versions with ease in 2025
![Cover for How to detect Safari and iOS versions with ease in 2025]()
- Flaky tests, be gone: long-lasting relief for chronic CI retry irritation!
Flaky tests, be gone: long-lasting relief for chronic CI retry irritation!
![Cover for Flaky tests, be gone: long-lasting relief for chronic CI retry irritation!]()
- PostCSS creator shares how to make your open source popular
PostCSS creator shares how to make your open source popular
Editors’ choice![Cover for PostCSS creator shares how to make your open source popular]()
- Baking with Rails at scale: recipes in Ruby, cookware from Go, C, and Rust
Baking with Rails at scale: recipes in Ruby, cookware from Go, C, and Rust
![Cover for Baking with Rails at scale: recipes in Ruby, cookware from Go, C, and Rust]()
- Inertia.js in Rails: a new era of effortless integration
Inertia.js in Rails: a new era of effortless integration
Editors’ choice![Cover for Inertia.js in Rails: a new era of effortless integration]()
- Exploring Active Agent, or can we build AI features the Rails way?
Exploring Active Agent, or can we build AI features the Rails way?
![Cover for Exploring Active Agent, or can we build AI features the Rails way?]()
- The Whop chop: how we cut a Rails test suite and CI time in half
The Whop chop: how we cut a Rails test suite and CI time in half
![Cover for The Whop chop: how we cut a Rails test suite and CI time in half]()
- Hey, AnyCable speaking! Needing help with a Twilio-OpenAI connection?
Hey, AnyCable speaking! Needing help with a Twilio-OpenAI connection?
Editors’ choice![Cover for Hey, AnyCable speaking! Needing help with a Twilio-OpenAI connection?]()
- The scenic route: lessons building an IntelliJ IDEA plugin for Luau
The scenic route: lessons building an IntelliJ IDEA plugin for Luau
![Cover for The scenic route: lessons building an IntelliJ IDEA plugin for Luau]()
- The Long Game: why Rails survived the hype cycle and what it means for your startup
The Long Game: why Rails survived the hype cycle and what it means for your startup
![Cover for The Long Game: why Rails survived the hype cycle and what it means for your startup]()
- 5 best practices for preventing chaos in Tailwind CSS
5 best practices for preventing chaos in Tailwind CSS
Editors’ choice![Cover for 5 best practices for preventing chaos in Tailwind CSS]()
- Circuit breakers and Ruby in 2025: don't break your launch
Circuit breakers and Ruby in 2025: don't break your launch
![Cover for Circuit breakers and Ruby in 2025: don't break your launch]()
- Redprints CFP: an open source CFP management app built with Rails + Inertia.js
Redprints CFP: an open source CFP management app built with Rails + Inertia.js
![Cover for Redprints CFP: an open source CFP management app built with Rails + Inertia.js]()
- Ruby on Whales: Dockerizing Ruby and Rails development
Ruby on Whales: Dockerizing Ruby and Rails development
Editors’ choice![Cover for Ruby on Whales: Dockerizing Ruby and Rails development]()
- Simplicity, vanished?! Solving the mystery with Inertia.js + Rails
Simplicity, vanished?! Solving the mystery with Inertia.js + Rails
![Cover for Simplicity, vanished?! Solving the mystery with Inertia.js + Rails]()
- AnyCable for Laravel: reliable WebSocket infrastructure
AnyCable for Laravel: reliable WebSocket infrastructure
![Cover for AnyCable for Laravel: reliable WebSocket infrastructure]()
- Gemfile of dreams: the libraries we use to build Rails apps
Gemfile of dreams: the libraries we use to build Rails apps
Editors’ choice![Cover for Gemfile of dreams: the libraries we use to build Rails apps]()
- API contracts and everything I wish I knew: a frontend survival guide
API contracts and everything I wish I knew: a frontend survival guide
![Cover for API contracts and everything I wish I knew: a frontend survival guide]()
- We studied 100 dev tool landing pages—here’s what really works in 2025
We studied 100 dev tool landing pages—here’s what really works in 2025
![Cover for We studied 100 dev tool landing pages—here’s what really works in 2025]()
- The early validation lesson: designing Quotient’s prompt sandbox
The early validation lesson: designing Quotient’s prompt sandbox
![Cover for The early validation lesson: designing Quotient’s prompt sandbox]()
- The Hotwire-Rails summit, or interactive multi-step forms at peak UX
The Hotwire-Rails summit, or interactive multi-step forms at peak UX
![Cover for The Hotwire-Rails summit, or interactive multi-step forms at peak UX]()
- How to Favicon in 2025: Three files that fit most needs
How to Favicon in 2025: Three files that fit most needs
![Cover for How to Favicon in 2025: Three files that fit most needs]()
- Phone inputs and you: the designer's essential UI guide
Phone inputs and you: the designer's essential UI guide
![Cover for Phone inputs and you: the designer's essential UI guide]()
- Better dynamic themes in Tailwind with OKLCH color magic
Better dynamic themes in Tailwind with OKLCH color magic
![Cover for Better dynamic themes in Tailwind with OKLCH color magic]()
- How to quickly (and weightlessly) convert Chrome extensions to Safari
How to quickly (and weightlessly) convert Chrome extensions to Safari
![Cover for How to quickly (and weightlessly) convert Chrome extensions to Safari]()
- imgproxy: Resize your images instantly and securely
imgproxy: Resize your images instantly and securely
![Cover for imgproxy: Resize your images instantly and securely]()
- 5 cool (and surprising) ways to configure Lefthook for automation joy
5 cool (and surprising) ways to configure Lefthook for automation joy
![Cover for 5 cool (and surprising) ways to configure Lefthook for automation joy]()
- ViewComponent in the Wild II: supercharging your components
ViewComponent in the Wild II: supercharging your components
![Cover for ViewComponent in the Wild II: supercharging your components]()
- Soft deletion with PostgreSQL: but with logic on the database!
Soft deletion with PostgreSQL: but with logic on the database!
![Cover for Soft deletion with PostgreSQL: but with logic on the database!]()
- How to make next-level Figma plugins: auth, routing, storage, and more
How to make next-level Figma plugins: auth, routing, storage, and more
![Cover for How to make next-level Figma plugins: auth, routing, storage, and more]()
- OK, OKLCH: a color picker made to help think perceptively
OK, OKLCH: a color picker made to help think perceptively
![Cover for OK, OKLCH: a color picker made to help think perceptively]()
- The art of Turbo Mount: Hotwire meets modern JS frameworks
The art of Turbo Mount: Hotwire meets modern JS frameworks
![Cover for The art of Turbo Mount: Hotwire meets modern JS frameworks]()
- How to make web videos way smaller in 2025 using the AV1 codec
How to make web videos way smaller in 2025 using the AV1 codec
![Cover for How to make web videos way smaller in 2025 using the AV1 codec]()
- ViewComponent in the Wild I: building modern Rails frontends
ViewComponent in the Wild I: building modern Rails frontends
![Cover for ViewComponent in the Wild I: building modern Rails frontends]()
- A taste of Go code generator magic: a quick guide to getting started
A taste of Go code generator magic: a quick guide to getting started
![Cover for A taste of Go code generator magic: a quick guide to getting started]()
- Let there be docs! Generating an OpenAPI schema across the Rails stack
Let there be docs! Generating an OpenAPI schema across the Rails stack
![Cover for Let there be docs! Generating an OpenAPI schema across the Rails stack]()
- System of a test: Proper browser testing in Ruby on Rails
System of a test: Proper browser testing in Ruby on Rails
![Cover for System of a test: Proper browser testing in Ruby on Rails]()
- Making desktop apps with revved-up potential: Rust + Tauri + sidecar
Making desktop apps with revved-up potential: Rust + Tauri + sidecar
![Cover for Making desktop apps with revved-up potential: Rust + Tauri + sidecar]()
- Designing Tegon: a signature vision for the AI-driven issue tracker
Designing Tegon: a signature vision for the AI-driven issue tracker
- TestProf III: guided and automated Ruby test profiling
TestProf III: guided and automated Ruby test profiling
![Cover for TestProf III: guided and automated Ruby test profiling]()
- RuboCoping with legacy: Bring your Ruby code up to Standard
RuboCoping with legacy: Bring your Ruby code up to Standard
![Cover for RuboCoping with legacy: Bring your Ruby code up to Standard]()
- Let there be docs! A documentation-first approach to Rails API development
Let there be docs! A documentation-first approach to Rails API development
![Cover for Let there be docs! A documentation-first approach to Rails API development]()
- Woah, opacity! A full guide to this badass hero of efficient UI design
Woah, opacity! A full guide to this badass hero of efficient UI design
![Cover for Woah, opacity! A full guide to this badass hero of efficient UI design]()
- ViewComponent in the Wild III: TailwindCSS classes & HTML attributes
ViewComponent in the Wild III: TailwindCSS classes & HTML attributes
![Cover for ViewComponent in the Wild III: TailwindCSS classes & HTML attributes]()
- It deserved its own tome: Layered Design and the Extended Rails Way
It deserved its own tome: Layered Design and the Extended Rails Way
![Cover for It deserved its own tome: Layered Design and the Extended Rails Way]()
- The lion's den: NestJS and authentication with AWS Cognito
The lion's den: NestJS and authentication with AWS Cognito
![Cover for The lion's den: NestJS and authentication with AWS Cognito]()
- The 16 most active developer tool investors and VCs going into 2025
The 16 most active developer tool investors and VCs going into 2025
![Cover for The 16 most active developer tool investors and VCs going into 2025]()
- Ruby on Rails on WebAssembly: a guide to full-stack in‑browser action
Ruby on Rails on WebAssembly: a guide to full-stack in‑browser action
![Cover for Ruby on Rails on WebAssembly: a guide to full-stack in‑browser action]()
- CLI UX best practices: 3 patterns for improving progress displays
CLI UX best practices: 3 patterns for improving progress displays
![Cover for CLI UX best practices: 3 patterns for improving progress displays]()
- Dev tools AI‑fication 101: lessons from Martian robots
Dev tools AI‑fication 101: lessons from Martian robots
![Cover for Dev tools AI‑fication 101: lessons from Martian robots]()
- Weeks → days: a case for expert-led, AI-driven design engineering
Weeks → days: a case for expert-led, AI-driven design engineering
![Cover for Weeks → days: a case for expert-led, AI-driven design engineering]()
- Vite-lizing Rails: get live reload and hot replacement with Vite Ruby
Vite-lizing Rails: get live reload and hot replacement with Vite Ruby
- Icon transcendence: customizing icons to complement fonts
Icon transcendence: customizing icons to complement fonts
![Cover for Icon transcendence: customizing icons to complement fonts]()
- Wrapping JSON-based ActiveRecord attributes with classes
Wrapping JSON-based ActiveRecord attributes with classes
- Object Detection with Create ML: images and dataset
Object Detection with Create ML: images and dataset
![Cover for Object Detection with Create ML: images and dataset]()
- Hire better, 10X faster: how we screen 50 engineers weekly with no HR
Hire better, 10X faster: how we screen 50 engineers weekly with no HR
![Cover for Hire better, 10X faster: how we screen 50 engineers weekly with no HR]()
- Real-time stress: AnyCable, k6, WebSockets, and Yabeda
Real-time stress: AnyCable, k6, WebSockets, and Yabeda
![Cover for Real-time stress: AnyCable, k6, WebSockets, and Yabeda]()
- Asynchronous adventures: Aborting queries and mutations in react-apollo
Asynchronous adventures: Aborting queries and mutations in react-apollo
- Variable fonts in real life: how to use and love them
Variable fonts in real life: how to use and love them
![Cover for Variable fonts in real life: how to use and love them]()
- Figma plugin API: diving into advanced algorithms & data structures
Figma plugin API: diving into advanced algorithms & data structures
![Cover for Figma plugin API: diving into advanced algorithms & data structures]()
- Kamal: hot deployment tool to watch—or a total game changer?
Kamal: hot deployment tool to watch—or a total game changer?
![Cover for Kamal: hot deployment tool to watch—or a total game changer?]()
- How to make an AI clone of your CEO for the world's biggest hackathon
How to make an AI clone of your CEO for the world's biggest hackathon
![Cover for How to make an AI clone of your CEO for the world's biggest hackathon]()
- How to GraphQL with Ruby, Rails, Active Record, and no N+1
How to GraphQL with Ruby, Rails, Active Record, and no N+1
- Object Detection with Create ML: training and demo app
Object Detection with Create ML: training and demo app
![Cover for Object Detection with Create ML: training and demo app]()
- Care beyond code: 7 best design practices for frontend developers
Care beyond code: 7 best design practices for frontend developers
![Cover for Care beyond code: 7 best design practices for frontend developers]()
- A slice of life: table partitioning in PostgreSQL databases
A slice of life: table partitioning in PostgreSQL databases
![Cover for A slice of life: table partitioning in PostgreSQL databases]()
- System of a test II: Robust Rails browser testing with SitePrism
System of a test II: Robust Rails browser testing with SitePrism
![Cover for System of a test II: Robust Rails browser testing with SitePrism]()
- Martian Kubernetes Kit: unboxing our toolkit's technical secrets
Martian Kubernetes Kit: unboxing our toolkit's technical secrets
![Cover for Martian Kubernetes Kit: unboxing our toolkit's technical secrets]()
- Faster WebGL/Three.js 3D graphics with OffscreenCanvas and Web Workers
Faster WebGL/Three.js 3D graphics with OffscreenCanvas and Web Workers
- 3 smart ways to highlight features for landing pages or launch weeks
3 smart ways to highlight features for landing pages or launch weeks
![Cover for 3 smart ways to highlight features for landing pages or launch weeks]()
- One row, many threads: How to avoid database duplicates in Rails applications
One row, many threads: How to avoid database duplicates in Rails applications
- UI for Quotient AI: the developer tool for prompt engineers
UI for Quotient AI: the developer tool for prompt engineers
![Cover for UI for Quotient AI: the developer tool for prompt engineers]()
- Keep it together: 5 essential design patterns for dev tool UIs
Keep it together: 5 essential design patterns for dev tool UIs
![Cover for Keep it together: 5 essential design patterns for dev tool UIs]()
- SPA hexagon: Robust app architecture for mobile and web
SPA hexagon: Robust app architecture for mobile and web
![Cover for SPA hexagon: Robust app architecture for mobile and web]()
- What I learned as a developer from accidents in space
What I learned as a developer from accidents in space
![Cover for What I learned as a developer from accidents in space]()
- Recapping the first Local‑First conference in 15 minutes
Recapping the first Local‑First conference in 15 minutes
![Cover for Recapping the first Local‑First conference in 15 minutes]()
- bolt.new from StackBlitz: how they surfed the AI wave—with no wipeouts
bolt.new from StackBlitz: how they surfed the AI wave—with no wipeouts
![Cover for bolt.new from StackBlitz: how they surfed the AI wave—with no wipeouts]()
- Demo app design for Medplum, open source healthcare developer platform
Demo app design for Medplum, open source healthcare developer platform
- Images done right: Web graphics, good to the last byte
Images done right: Web graphics, good to the last byte
![Cover for Images done right: Web graphics, good to the last byte]()
- How to make absolutely any app look like a macOS app
How to make absolutely any app look like a macOS app
![Cover for How to make absolutely any app look like a macOS app]()
- Railsmas on Mars: 12 Days of Mandatory Developer Joy and Challenge
Railsmas on Mars: 12 Days of Mandatory Developer Joy and Challenge
![Cover for Railsmas on Mars: 12 Days of Mandatory Developer Joy and Challenge]()
- How a year-long LeetCode habit upped my professional game
How a year-long LeetCode habit upped my professional game
![Cover for How a year-long LeetCode habit upped my professional game]()
- Custom "cops" for RuboCop: an emergency service for your Ruby code
Custom "cops" for RuboCop: an emergency service for your Ruby code
- The future of full-stack Rails II: Turbo View Transitions
The future of full-stack Rails II: Turbo View Transitions
![Cover for The future of full-stack Rails II: Turbo View Transitions]()
- Serverless TypeScript: A complete setup for AWS SAM Lambdas
Serverless TypeScript: A complete setup for AWS SAM Lambdas
![Cover for Serverless TypeScript: A complete setup for AWS SAM Lambdas]()
- Cool frontend arts of local-first: storage, sync, conflicts
Cool frontend arts of local-first: storage, sync, conflicts
![Cover for Cool frontend arts of local-first: storage, sync, conflicts]()
- Lefthook, Crystalball, and git magic for smooth development experience
Lefthook, Crystalball, and git magic for smooth development experience
- Climbing Steep hills, or adopting Ruby 3 types with RBS
Climbing Steep hills, or adopting Ruby 3 types with RBS
- Build images on GitHub Actions with Docker layer caching
Build images on GitHub Actions with Docker layer caching
![Cover for Build images on GitHub Actions with Docker layer caching]()
- Don’t wait, let’s use the browser Contact Picker API now
Don’t wait, let’s use the browser Contact Picker API now
![Cover for Don’t wait, let’s use the browser Contact Picker API now]()
- Enter AnyCable v1.4: reliable real-time features for apps of any size
Enter AnyCable v1.4: reliable real-time features for apps of any size
![Cover for Enter AnyCable v1.4: reliable real-time features for apps of any size]()
- “Fair” multi-tenant prioritization of Sidekiq jobs—and our gem for it!
“Fair” multi-tenant prioritization of Sidekiq jobs—and our gem for it!
![Cover for “Fair” multi-tenant prioritization of Sidekiq jobs—and our gem for it!]()
- First steps with ruby.wasm: or how we built Ruby Next Playground
First steps with ruby.wasm: or how we built Ruby Next Playground
![Cover for First steps with ruby.wasm: or how we built Ruby Next Playground]()
- Beyond monospace: the search for the perfect coding font
Beyond monospace: the search for the perfect coding font
![Cover for Beyond monospace: the search for the perfect coding font]()
- How to manifest streamlined authentication: AWS Cognito in a React app
How to manifest streamlined authentication: AWS Cognito in a React app
![Cover for How to manifest streamlined authentication: AWS Cognito in a React app]()
- Before your next frontend pull request, use this checklist
Before your next frontend pull request, use this checklist
![Cover for Before your next frontend pull request, use this checklist]()
- What could Go wrong with a mutex, or the Go profiling story
What could Go wrong with a mutex, or the Go profiling story
![Cover for What could Go wrong with a mutex, or the Go profiling story]()
- A broader picture: A guide on imgproxy for businesses
A broader picture: A guide on imgproxy for businesses
![Cover for A broader picture: A guide on imgproxy for businesses]()
- TimescaleDB: integrating time-series data with Ruby on Rails
TimescaleDB: integrating time-series data with Ruby on Rails
![Cover for TimescaleDB: integrating time-series data with Ruby on Rails]()
- UI design for HTTPie: macOS vibes for the API testing client
UI design for HTTPie: macOS vibes for the API testing client
![Cover for UI design for HTTPie: macOS vibes for the API testing client]()
- Pulling the trigger: How to update counter caches in your Rails app without Active Record callbacks
Pulling the trigger: How to update counter caches in your Rails app without Active Record callbacks
- How AI startups use changelogs to win developer trust
How AI startups use changelogs to win developer trust
![Cover for How AI startups use changelogs to win developer trust]()
- Squash N+1 queries early with n_plus_one_control test matchers for Ruby and Rails
Squash N+1 queries early with n_plus_one_control test matchers for Ruby and Rails
- Martian Kubernetes Kit: running apps—and running them well
Martian Kubernetes Kit: running apps—and running them well
![Cover for Martian Kubernetes Kit: running apps—and running them well]()
- It’s dangerous to go alone: take our guide to the “IDEAL” HTTP client!
It’s dangerous to go alone: take our guide to the “IDEAL” HTTP client!
![Cover for It’s dangerous to go alone: take our guide to the “IDEAL” HTTP client!]()
- GMI Cloud meets Webflow and speeds ahead in the AI compute race
GMI Cloud meets Webflow and speeds ahead in the AI compute race
- Martian Kubernetes Kit: a smooth-sailing toolkit from our SRE team
Martian Kubernetes Kit: a smooth-sailing toolkit from our SRE team
![Cover for Martian Kubernetes Kit: a smooth-sailing toolkit from our SRE team]()
- How to build a better React map with Pigeon Maps and Mapbox
How to build a better React map with Pigeon Maps and Mapbox
![Cover for How to build a better React map with Pigeon Maps and Mapbox]()
- Down the caching‑hole: adventures in 'HTTP caching and Faraday' land
Down the caching‑hole: adventures in 'HTTP caching and Faraday' land
![Cover for Down the caching‑hole: adventures in 'HTTP caching and Faraday' land]()
- Rails, hacking, and Stripe as a scoreboard: Marc Köhlbrugge’s playbook
Rails, hacking, and Stripe as a scoreboard: Marc Köhlbrugge’s playbook
![Cover for Rails, hacking, and Stripe as a scoreboard: Marc Köhlbrugge’s playbook]()
- Want to make a great developer tool UI? Follow this fundamental rule!
Want to make a great developer tool UI? Follow this fundamental rule!
![Cover for Want to make a great developer tool UI? Follow this fundamental rule!]()
- Reusable development containers with Docker Compose and Dip
Reusable development containers with Docker Compose and Dip
- Simple Declarative Presence for Hotwire apps with AnyCable
Simple Declarative Presence for Hotwire apps with AnyCable
![Cover for Simple Declarative Presence for Hotwire apps with AnyCable]()
- Midjourney vs. human illustrators: has AI already won?
Midjourney vs. human illustrators: has AI already won?
![Cover for Midjourney vs. human illustrators: has AI already won?]()
- The joy of Variable Fonts: getting started on the Frontend
The joy of Variable Fonts: getting started on the Frontend
![Cover for The joy of Variable Fonts: getting started on the Frontend]()
- Collaborative real-time security: Logux for Akeero
Collaborative real-time security: Logux for Akeero
![Cover for Collaborative real-time security: Logux for Akeero]()
- How to turn an open source project into a profitable business
How to turn an open source project into a profitable business
![Cover for How to turn an open source project into a profitable business]()
- Keeping OSS documentation in check with docsify, Lefthook, and friends
Keeping OSS documentation in check with docsify, Lefthook, and friends
- Crafting user notifications in Rails with Active Delivery
Crafting user notifications in Rails with Active Delivery
- Logidze 1.0: Active Record, Postgres, Rails, and time travel
Logidze 1.0: Active Record, Postgres, Rails, and time travel
![Cover for Logidze 1.0: Active Record, Postgres, Rails, and time travel]()
- New feature in Rails 5: Render views outside of actions
New feature in Rails 5: Render views outside of actions
![Cover for New feature in Rails 5: Render views outside of actions]()
- UX research for dev tools must not be neglected: our quick-start guide
UX research for dev tools must not be neglected: our quick-start guide
![Cover for UX research for dev tools must not be neglected: our quick-start guide]()
- eBaymag magic: under the hood of the international eBay spinoff
eBaymag magic: under the hood of the international eBay spinoff
![Cover for eBaymag magic: under the hood of the international eBay spinoff]()
- Freezolite: the magic gem for keeping Ruby literals safely frozen
Freezolite: the magic gem for keeping Ruby literals safely frozen
![Cover for Freezolite: the magic gem for keeping Ruby literals safely frozen]()
- How to avoid tricky async state manager pitfalls in React
How to avoid tricky async state manager pitfalls in React
![Cover for How to avoid tricky async state manager pitfalls in React]()
- How Doximity brought real-time Go power to their Rails app
How Doximity brought real-time Go power to their Rails app
![Cover for How Doximity brought real-time Go power to their Rails app]()
- Ease and epiphany: 4 ways to stop misguided dev tools user onboarding
Ease and epiphany: 4 ways to stop misguided dev tools user onboarding
![Cover for Ease and epiphany: 4 ways to stop misguided dev tools user onboarding]()
- Realtime text analysis with Word Tagger: recipe reader, part 2
Realtime text analysis with Word Tagger: recipe reader, part 2
![Cover for Realtime text analysis with Word Tagger: recipe reader, part 2]()
- Why should developers write? 3 reasons and 3 common blocks
Why should developers write? 3 reasons and 3 common blocks
![Cover for Why should developers write? 3 reasons and 3 common blocks]()
- AnyCable Goes Pro: Fast WebSockets for Ruby, at scale
AnyCable Goes Pro: Fast WebSockets for Ruby, at scale
![Cover for AnyCable Goes Pro: Fast WebSockets for Ruby, at scale]()
- The silence of the Ruby exceptions: a Rails/PostgreSQL database transaction thriller
The silence of the Ruby exceptions: a Rails/PostgreSQL database transaction thriller
- How to do launch weeks for developer tools, startups, and small teams
How to do launch weeks for developer tools, startups, and small teams
![Cover for How to do launch weeks for developer tools, startups, and small teams]()
- Smartly contracted: UI design and frontend for Certora
Smartly contracted: UI design and frontend for Certora
![Cover for Smartly contracted: UI design and frontend for Certora]()
- Figma Auto Layout: Practical tips for dynamic designs
Figma Auto Layout: Practical tips for dynamic designs
- Startups on Rails in 2024: my keynote at RailsConf
Startups on Rails in 2024: my keynote at RailsConf
![Cover for Startups on Rails in 2024: my keynote at RailsConf]()
- AnyCable off Rails: connecting Twilio streams with Hanami
AnyCable off Rails: connecting Twilio streams with Hanami
![Cover for AnyCable off Rails: connecting Twilio streams with Hanami]()
- How Recraft's lean team is challenging the AI image generation giants
How Recraft's lean team is challenging the AI image generation giants
![Cover for How Recraft's lean team is challenging the AI image generation giants]()
- Hey developer tool teams, don’t copy these copywriting clichés!
Hey developer tool teams, don’t copy these copywriting clichés!
![Cover for Hey developer tool teams, don’t copy these copywriting clichés!]()
- A no-go fantasy: writing Go in Ruby with Ruby Next
A no-go fantasy: writing Go in Ruby with Ruby Next
![Cover for A no-go fantasy: writing Go in Ruby with Ruby Next]()
- How to make complex serverless file processing a piece of cake
How to make complex serverless file processing a piece of cake
![Cover for How to make complex serverless file processing a piece of cake]()
- Decentralized app design: first aid for common dApp UI pains
Decentralized app design: first aid for common dApp UI pains
![Cover for Decentralized app design: first aid for common dApp UI pains]()
- Taking off the Heroku training wheels: the Rails preflight checklist
Taking off the Heroku training wheels: the Rails preflight checklist
![Cover for Taking off the Heroku training wheels: the Rails preflight checklist]()
- Realtime text analysis with Word Tagger: pro computer vision, part 1
Realtime text analysis with Word Tagger: pro computer vision, part 1
![Cover for Realtime text analysis with Word Tagger: pro computer vision, part 1]()
- Figma plugin magic tricks: mixing colors with SVG and Canvas API
Figma plugin magic tricks: mixing colors with SVG and Canvas API
![Cover for Figma plugin magic tricks: mixing colors with SVG and Canvas API]()
- Our slice of the metaverse: 7 key AR features for iOS devs
Our slice of the metaverse: 7 key AR features for iOS devs
![Cover for Our slice of the metaverse: 7 key AR features for iOS devs]()
- Beyond bars and lines: 7 cool ways to visualize data in your dev tool
Beyond bars and lines: 7 cool ways to visualize data in your dev tool
![Cover for Beyond bars and lines: 7 cool ways to visualize data in your dev tool]()
- Easy multi-language, multi-version documentation with Docsify, Git, and GitHub Actions
Easy multi-language, multi-version documentation with Docsify, Git, and GitHub Actions
- Hiring a product designer: 1 hard skill and 3 soft skills to look for
Hiring a product designer: 1 hard skill and 3 soft skills to look for
![Cover for Hiring a product designer: 1 hard skill and 3 soft skills to look for]()
- Desktop frontier: Video app optimization for Lowkey
Desktop frontier: Video app optimization for Lowkey
![Cover for Desktop frontier: Video app optimization for Lowkey]()
- Extremely open and incredibly close: should you go open source?
Extremely open and incredibly close: should you go open source?
![Cover for Extremely open and incredibly close: should you go open source?]()
- “Design first, then build”: let’s bury this myth forevermore
“Design first, then build”: let’s bury this myth forevermore
![Cover for “Design first, then build”: let’s bury this myth forevermore]()
- Cloud Teleport: Building access plugins for Gravitational
Cloud Teleport: Building access plugins for Gravitational
![Cover for Cloud Teleport: Building access plugins for Gravitational]()
- Fullstaq Ruby: First impressions, and how to migrate your Docker/Kubernetes Ruby apps today
Fullstaq Ruby: First impressions, and how to migrate your Docker/Kubernetes Ruby apps today
- How to kill conversions on your developer tool's landing page
How to kill conversions on your developer tool's landing page
![Cover for How to kill conversions on your developer tool's landing page]()
- Founders, if you want A+ startup success, do the homework first!
Founders, if you want A+ startup success, do the homework first!
![Cover for Founders, if you want A+ startup success, do the homework first!]()
- Pen, paper, IDE: a DevTool Founder’s early-stage product design guide
Pen, paper, IDE: a DevTool Founder’s early-stage product design guide
![Cover for Pen, paper, IDE: a DevTool Founder’s early-stage product design guide]()
- Martians unveiled: infusing a new site with extraterrestrial tech and soul
Martians unveiled: infusing a new site with extraterrestrial tech and soul
![Cover for Martians unveiled: infusing a new site with extraterrestrial tech and soul]()
- Catch a batch: Making Mayhem 5 times more responsive
Catch a batch: Making Mayhem 5 times more responsive
![Cover for Catch a batch: Making Mayhem 5 times more responsive]()
- Big on Heroku: Scaling Fountain without losing a drop
Big on Heroku: Scaling Fountain without losing a drop
![Cover for Big on Heroku: Scaling Fountain without losing a drop]()
- Realtime diagnostic logging, or how to really spy on your Go web apps
Realtime diagnostic logging, or how to really spy on your Go web apps
![Cover for Realtime diagnostic logging, or how to really spy on your Go web apps]()
- The complete guide to multi-tenant SaaS, part 1: collaboration
The complete guide to multi-tenant SaaS, part 1: collaboration
![Cover for The complete guide to multi-tenant SaaS, part 1: collaboration]()
- Pro becomes smart: imgproxy Pro engages machine learning
Pro becomes smart: imgproxy Pro engages machine learning
![Cover for Pro becomes smart: imgproxy Pro engages machine learning]()
- Connection avalanche safety tips and prepping for real-time applications
Connection avalanche safety tips and prepping for real-time applications
![Cover for Connection avalanche safety tips and prepping for real-time applications]()
- MVPs, prototypes, results: how to win with a Martian Design Sprint
MVPs, prototypes, results: how to win with a Martian Design Sprint
![Cover for MVPs, prototypes, results: how to win with a Martian Design Sprint]()
- Real-time magic, no elixirs: optimizing Sera with AnyCable
Real-time magic, no elixirs: optimizing Sera with AnyCable
![Cover for Real-time magic, no elixirs: optimizing Sera with AnyCable]()
- Kubing Rails: stressless Kubernetes deployments with Kuby
Kubing Rails: stressless Kubernetes deployments with Kuby
![Cover for Kubing Rails: stressless Kubernetes deployments with Kuby]()
- Introducing JavaScript and TypeScript client for AnyCable
Introducing JavaScript and TypeScript client for AnyCable
- Persisted queries in GraphQL: Slim down Apollo requests to your Ruby application
Persisted queries in GraphQL: Slim down Apollo requests to your Ruby application
- Exposing permissions in GraphQL APIs with Action Policy
Exposing permissions in GraphQL APIs with Action Policy
- A letter to founders: join the local-first movement!
A letter to founders: join the local-first movement!
![Cover for A letter to founders: join the local-first movement!]()
- Let's have more tech meetups! A quick-start guide to holding your own
Let's have more tech meetups! A quick-start guide to holding your own
![Cover for Let's have more tech meetups! A quick-start guide to holding your own]()
- imgproxy goes solo: unveiling a bold future for this new company
imgproxy goes solo: unveiling a bold future for this new company
![Cover for imgproxy goes solo: unveiling a bold future for this new company]()
- The Martian Design Sprint: starting and running projects faster
The Martian Design Sprint: starting and running projects faster
![Cover for The Martian Design Sprint: starting and running projects faster]()
- AnyCable 1.0: Four years of real-time web with Ruby and Go
AnyCable 1.0: Four years of real-time web with Ruby and Go
![Cover for AnyCable 1.0: Four years of real-time web with Ruby and Go]()
- From Ruby to Crystal? Writing and distributing a CLI tool
From Ruby to Crystal? Writing and distributing a CLI tool
![Cover for From Ruby to Crystal? Writing and distributing a CLI tool]()
- Social background: Martians behind eBay Social's tech
Social background: Martians behind eBay Social's tech
![Cover for Social background: Martians behind eBay Social's tech]()
- Reporting non-nullable violations in graphql-ruby properly
Reporting non-nullable violations in graphql-ruby properly
- A fixture-based approach to interface testing in Rails
A fixture-based approach to interface testing in Rails
- An invitation system using URL Schemes and Universal Links
An invitation system using URL Schemes and Universal Links
![Cover for An invitation system using URL Schemes and Universal Links]()
- Flying free: a tale of partitioning with canaries in PostgreSQL
Flying free: a tale of partitioning with canaries in PostgreSQL
![Cover for Flying free: a tale of partitioning with canaries in PostgreSQL]()
- How does your chatbot UX size up? The 5 laws of ChatRobotics
How does your chatbot UX size up? The 5 laws of ChatRobotics
![Cover for How does your chatbot UX size up? The 5 laws of ChatRobotics]()
- Value pricing for Dev Tools: a strategy beneficial for both sides
Value pricing for Dev Tools: a strategy beneficial for both sides
![Cover for Value pricing for Dev Tools: a strategy beneficial for both sides]()
- Super GitHub Pages: budget frontend staging, with Storybook and more
Super GitHub Pages: budget frontend staging, with Storybook and more
![Cover for Super GitHub Pages: budget frontend staging, with Storybook and more]()
- Blend to my will! Fonts on cylinder objects in Blender
Blend to my will! Fonts on cylinder objects in Blender
![Cover for Blend to my will! Fonts on cylinder objects in Blender]()
- Midjourney vs. human illustrators II: more Martians join the battle!
Midjourney vs. human illustrators II: more Martians join the battle!
![Cover for Midjourney vs. human illustrators II: more Martians join the battle!]()
- AI and the auteur: using neural networks as artistic tools
AI and the auteur: using neural networks as artistic tools
![Cover for AI and the auteur: using neural networks as artistic tools]()
- Danger on Rails: make robots do some code review for you!
Danger on Rails: make robots do some code review for you!
- Anonymous web authentication with Stellar blockchain
Anonymous web authentication with Stellar blockchain
![Cover for Anonymous web authentication with Stellar blockchain]()
- “AI” marks the spot: a quick AI treasure map for businesses
“AI” marks the spot: a quick AI treasure map for businesses
![Cover for “AI” marks the spot: a quick AI treasure map for businesses]()
- Finding growth: how to hack eBaymag with Growth Hacking
Finding growth: how to hack eBaymag with Growth Hacking
![Cover for Finding growth: how to hack eBaymag with Growth Hacking]()
- The sword is yours: transferring projects to another team unscathed
The sword is yours: transferring projects to another team unscathed
![Cover for The sword is yours: transferring projects to another team unscathed]()
- Try Astrograph: Your GraphQL lens for Stellar blockchain
Try Astrograph: Your GraphQL lens for Stellar blockchain
![Cover for Try Astrograph: Your GraphQL lens for Stellar blockchain]()
- Next-level docs with Next.js: Teleport’s new customer acquisition channel
Next-level docs with Next.js: Teleport’s new customer acquisition channel
![Cover for Next-level docs with Next.js: Teleport’s new customer acquisition channel]()
- One does not simply design: designers as product owners
One does not simply design: designers as product owners
![Cover for One does not simply design: designers as product owners]()
- Lefthook: refactoring the Git Hooks automation tool back into shape
Lefthook: refactoring the Git Hooks automation tool back into shape
- Sorbetting a gem, or the story of the first adoption
Sorbetting a gem, or the story of the first adoption
- Attention: An Important Brand Update From The Evil Martians Blog
Attention: An Important Brand Update From The Evil Martians Blog
- New home for Logux: Pouring love into an OSS documentation website
New home for Logux: Pouring love into an OSS documentation website
![Cover for New home for Logux: Pouring love into an OSS documentation website]()
- Rails profiling story, or how I caught Faker trying to teach my app Australian Slang
Rails profiling story, or how I caught Faker trying to teach my app Australian Slang
- How Ruby 2.2 can cause an out-of-memory server crash
How Ruby 2.2 can cause an out-of-memory server crash
![Cover for How Ruby 2.2 can cause an out-of-memory server crash]()
- Creating a winning sales flow with authentic writing from engineers
Creating a winning sales flow with authentic writing from engineers
![Cover for Creating a winning sales flow with authentic writing from engineers]()
- Engineering connections: a conference talk primer for humans
Engineering connections: a conference talk primer for humans
![Cover for Engineering connections: a conference talk primer for humans]()
- How to cultivate capital: 6 tips from developer tools founders and VCs
How to cultivate capital: 6 tips from developer tools founders and VCs
![Cover for How to cultivate capital: 6 tips from developer tools founders and VCs]()
- Apollo launch: Building a migration architecture for 2U
Apollo launch: Building a migration architecture for 2U
![Cover for Apollo launch: Building a migration architecture for 2U]()
- Active Storage meets GraphQL pt. 2: exposing attachment URLs
Active Storage meets GraphQL pt. 2: exposing attachment URLs
- 5 tips for dealing with heavy ActiveRecord dashboards in Rails
5 tips for dealing with heavy ActiveRecord dashboards in Rails
![Cover for 5 tips for dealing with heavy ActiveRecord dashboards in Rails]()
- Successful balance: gracefully and tactfully raising a dev tool price
Successful balance: gracefully and tactfully raising a dev tool price
![Cover for Successful balance: gracefully and tactfully raising a dev tool price]()
- Making a custom logger for Rails query optimization
Making a custom logger for Rails query optimization
- The SDK Imperative: why developer tools live or die by their SDKs
The SDK Imperative: why developer tools live or die by their SDKs
![Cover for The SDK Imperative: why developer tools live or die by their SDKs]()
- Web Summit 2022: what you missed and how to be ready for next year
Web Summit 2022: what you missed and how to be ready for next year
- WebSocket Director: scenario-based integration tests for realtime apps
WebSocket Director: scenario-based integration tests for realtime apps
![Cover for WebSocket Director: scenario-based integration tests for realtime apps]()
- Power for Kadenze: More performance, less cloud costs
Power for Kadenze: More performance, less cloud costs
![Cover for Power for Kadenze: More performance, less cloud costs]()
- Cables vs. malloc_trim, or yet another Ruby memory usage benchmark
Cables vs. malloc_trim, or yet another Ruby memory usage benchmark
- Set up Tailwind CSS JIT in a Rails project to compile styles 20x faster
Set up Tailwind CSS JIT in a Rails project to compile styles 20x faster
- My Ruby 2018: Around the world in nine conferences
My Ruby 2018: Around the world in nine conferences
- Deploying Ruby apps to Google Cloud Kubernetes Engine continuously with CircleCI
Deploying Ruby apps to Google Cloud Kubernetes Engine continuously with CircleCI
- RubyKaigi 2022: a report from an Evil Martian in Japan
RubyKaigi 2022: a report from an Evil Martian in Japan
- Painless migration of existing Helm’s Tiller setup to Kubernetes Secrets
Painless migration of existing Helm’s Tiller setup to Kubernetes Secrets











































































































































































































































































































