Full Stack Radio

by Adam Wathan

A podcast for developers interested in building great software products. Every episode, Adam Wathan is joined by a guest to talk about everything from product design and user experience to unit testing and system administration.

  

Latest Episodes

142: Jason Cohen - Learning to Hire and Manage a Team

In this episode, Adam talks to Jason Cohen of WP Engine about hiring people to join the Tailwind team, figuring out what to focus on, and learning how to manage.

Topics include:

  • How do you decide what role to hire for?
  • Why it's so important to figure out exactly what your biggest struggle is before hiring
  • How to decide what the most important thing to focus on is when it feels like there's too much to do
  • Why it's important to consider the impact of hiring for a specific role on your own happiness vs. just the company's bottom line
  • Coming to terms with the fact that you can't do everything, and why it's important to focus on something instead of spreading yourself thin across everything
  • Mistakes people make when they start managing a team for the first time

Links:

Supporting the show:

I decided to stop taking sponsors for the show because I think advertisements are annoying and no one wants to listen to them.

If you do want to support the show, the best way to do it is to purchase one of my products:

  • Tailwind UI, a collection of professionally designed, fully responsive HTML components built with Tailwind CSS.
  • Refactoring UI, a book and video series I put together with Steve Schoger on designing beautiful user interfaces, without relying on a designer.
  • Advanced Vue Component Design, a course on designing simpler, more flexible Vue components that are both more powerful and easier to maintain.
  • Test-Driven Laravel, a massive video course on designing robust Laravel applications with TDD. Learn how to build a real-world application from scratch without writing a single line of untested code.
  • Refactoring to Collections, a book and video course that teaches you how to apply functional programming principles to break down ugly, complex code into simple transformations — free of loops, complex conditionals, and temporary variables.


Audio Download

Posted on 1 July 2020 | 2:01 pm


141: Jason Fried - Running the Tailwind Business on Basecamp

In this episode, Adam talks to Jason Fried about growing the Tailwind team and how to best use Basecamp to keep his particular company organized. He also walks through tons of real examples from their recent work on HEY, sharing lots of behind-the-scenes stuff about how Basecamp use Basecamp themselves.

Topics include:

  • How did Basecamp evolve from being a team/client communication tool to focusing on keeping your whole company organized, and is it really even that different?
  • How exactly should we set up Basecamp on day one to support a small 3-5 person remote software team? What tools should we use and which ones should we ignore for now?
  • Finding the balance between being organized enough and splitting things up too much
  • How big should projects be? Is "HEY v1" a project, or is a project something more like "HEY File Attachments"?
  • What tools do you normally enable for regular projects, and how do you use them?
  • How are you normally using chat at the individual project level?
  • Why todo lists should be created by the individuals doing the work, and not the people assigning the work
  • How should we use the company HQ project? What are some less obvious ideas we can apply there that can make a big difference?
  • Using a "what we're working on" project to keep everyone on the team in the loop and feeling connected
  • Using "heartbeats" to summarize the work a team has been doing over a period of time for the rest of the company
  • Advice on bringing on new employees and how to assign them their first project
  • When you're such a writing-driven company, how do you make sure decisions get written down when they are made in real-time instead of naturally occurring within Basecamp?

Screenshots:

Links:

Supporting the show:

I decided to stop taking sponsors for the show because I think advertisements are annoying and no one wants to listen to them.

If you do want to support the show, the best way to do it is to purchase one of my products:

  • Tailwind UI, a collection of professionally designed, fully responsive HTML components built with Tailwind CSS
  • Refactoring UI, a book and video series I put together with Steve Schoger on designing beautiful user interfaces, without relying on a designer.
  • Advanced Vue Component Design, a course on designing simpler, more flexible Vue components that are both more powerful and easier to maintain.
  • Test-Driven Laravel, a massive video course on designing robust Laravel applications with TDD. Learn how to build a real-world application from scratch without writing a single line of untested code.
  • Refactoring to Collections, a book and video course that teaches you how to apply functional programming principles to break down ugly, complex code into simple transformations — free of loops, complex conditionals, and temporary variables.


Audio Download

Posted on 10 June 2020 | 2:15 pm


140: Evan You - Reimagining the Modern Dev Server with Vite

In this episode, Adam talks to Evan You about Vite, a new dev server and build tool for modern JavaScript projects.

Topics include:

  • What is Vite and what makes it different than existing tools like Webpack?
  • How do ES Modules actually work in the browser and what are the limitations?
  • Will we ever be able to use ES Modules in production for large complex projects?
  • How does Vite work under the hood, and how does it support non-JS files like Vue files, or CSS files?
  • How hot module replacement is implemented under the hood in Vite
  • Optimizing modules with many dependencies to keep the development experience fast
  • What is VitePress and how does it compare to VuePress?
  • Bundling sites for production with Vite
  • What's the roadmap for Vite 1.0?

Links:

Supporting the show:

I decided to stop taking sponsors for the show because I think advertisements are annoying and no one wants to listen to them.

If you do want to support the show, the best way to do it is to purchase one of my products:

  • Tailwind UI, a collection of professionally designed, fully responsive HTML components built with Tailwind CSS
  • Refactoring UI, a book and video series I put together with Steve Schoger on designing beautiful user interfaces, without relying on a designer.
  • Advanced Vue Component Design, a course on designing simpler, more flexible Vue components that are both more powerful and easier to maintain.
  • Test-Driven Laravel, a massive video course on designing robust Laravel applications with TDD. Learn how to build a real-world application from scratch without writing a single line of untested code.
  • Refactoring to Collections, a book and video course that teaches you how to apply functional programming principles to break down ugly, complex code into simple transformations — free of loops, complex conditionals, and temporary variables.


Audio Download

Posted on 28 May 2020 | 1:01 pm


139: Alex DeBrie - DynamoDB for Relational Database Diehards

In this episode, Adam is talks to Alex DeBrie about DynamoDB, and how it compares to relational databases like MySQL.

Topics include:

  • Does DynamoDB only make sense for things like your cache, or is it a good choice for a primary data store?
  • An overview of the terminology used in DynamoDB and how the terminology compares to a relational database
  • How primary keys work in DynamoDB
  • What data types are available in DynamoDB
  • How DynamoDB is a schemaless database
  • Why it's important to understand your access patterns in advance with DynamoDB, unlike in a relational database
  • Understanding why and how you usually have multiple record types in a single DynamoDB table
  • What "index overloading" is in DynamoDB
  • Understanding partition keys and sort keys
  • How to structure your data in DynamoDB to make it possible to query related data, and how those queries work
  • How secondary indexes work, allowing you to access the same data in different ways
  • How to accommodate access patterns you didn't know about before you designed your schema
  • When to flatten relationships vs. nest them
  • Should you use DynamoDB if you aren't "web-scale"?
  • How local development works with DynamoDB

Links:

Supporting the show:

I decided to stop taking sponsors for the show because I think advertisements are annoying and no one wants to listen to them.

If you do want to support the show, the best way to do it is to purchase one of my products:

  • Tailwind UI, a collection of professionally designed, fully responsive HTML components built with Tailwind CSS
  • Refactoring UI, a book and video series I put together with Steve Schoger on designing beautiful user interfaces, without relying on a designer.
  • Advanced Vue Component Design, a course on designing simpler, more flexible Vue components that are both more powerful and easier to maintain.
  • Test-Driven Laravel, a massive video course on designing robust Laravel applications with TDD. Learn how to build a real-world application from scratch without writing a single line of untested code.
  • Refactoring to Collections, a book and video course that teaches you how to apply functional programming principles to break down ugly, complex code into simple transformations — free of loops, complex conditionals, and temporary variables.


Audio Download

Posted on 8 May 2020 | 12:04 pm


138: Tom Preston-Werner - Building Full-Stack JS Apps with Redwood.js

In this episode, Adam is talks to Tom Preston-Werner about Redwood.js, a new full-stack JavaScript framework for building edge-ready web applications.

Topics include:

  • What does it mean for Redwood to be a JAMStack framework?
  • What does the React layer look like? What’s new, and what’s leveraging existing community tools?
  • Why Redwood ships with it’s own routing layer
  • What “cells” are in Redwood, and how they aim to provide a declarative abstraction on top of data fetching
  • How Redwood tries to provide clear decoupling behind the front-end and back-end, even though it is providing a full-stack solution
  • What “services” are in Redwood
  • Using Prisma 2 to fetch data from your database in your services
  • What database solutions exist today that work well with Redwood in a serverless environment?

Links:

Supporting the show:

I decided to stop taking sponsors for the show because I think advertisements are annoying and no one wants to listen to them.

If you do want to support the show, the best way to do it is to purchase one of my products:

  • Tailwind UI, a collection of professionally designed, fully responsive HTML components built with Tailwind CSS
  • Refactoring UI, a book and video series I put together with Steve Schoger on designing beautiful user interfaces, without relying on a designer.
  • Advanced Vue Component Design, a course on designing simpler, more flexible Vue components that are both more powerful and easier to maintain.
  • Test-Driven Laravel, a massive video course on designing robust Laravel applications with TDD. Learn how to build a real-world application from scratch without writing a single line of untested code.
  • Refactoring to Collections, a book and video course that teaches you how to apply functional programming principles to break down ugly, complex code into simple transformations — free of loops, complex conditionals, and temporary variables.


Audio Download

Posted on 22 April 2020 | 1:56 pm


137: Tim Neutkens - Continuing to Innovate with Next.js 9.3

In this episode, Adam is talks to Tim Neutkens about what's new in Next.js 9.3 and how it's changing the way applications are built at ZEIT.

Topics include:

  • An overview of the new getStaticProps, getStaticPaths, and getServerSideProps APIs
  • How Next.js helps you serve static pages from an edge CDN automatically, without affecting the actual authoring experience
  • Using getStaticPaths to statically pregenerate dynamic routes
  • How the fallback feature of getStaticPaths works and lets you statically render pages on-demand to avoid long build times
  • How the upcoming incremental static generation feature will work in Next.js
  • Deploying Next.js to a platform other than Zeit, and how you retain all of Next’s benefits automatically
  • How getServerSideProps is different from getInitialProps
  • Why getServerSideProps actually improves performance, even though it introduces another hop
  • How getServerSideProps results in smaller bundle sizes vs. getInitialProps
  • Using getServerSideProps to safely talk directly to a database, skipping the need for an API
  • Why Zeit as a company has started to favor client-side data fetching with SWR over getInitialProps/getServerSideProps, and how they are combining that with statically pregenerated “shells” for incredibly fast feeling experiences
  • What’s coming next in future releases

Links:

Supporting the show:

I decided to stop taking sponsors for the show because I think advertisements are annoying and no one wants to listen to them.

If you do want to support the show, the best way to do it is to purchase one of my products:

  • Tailwind UI, a collection of professionally designed, fully responsive HTML components built with Tailwind CSS
  • Refactoring UI, a book and video series I put together with Steve Schoger on designing beautiful user interfaces, without relying on a designer.
  • Advanced Vue Component Design, a course on designing simpler, more flexible Vue components that are both more powerful and easier to maintain.
  • Test-Driven Laravel, a massive video course on designing robust Laravel applications with TDD. Learn how to build a real-world application from scratch without writing a single line of untested code.
  • Refactoring to Collections, a book and video course that teaches you how to apply functional programming principles to break down ugly, complex code into simple transformations — free of loops, complex conditionals, and temporary variables.


Audio Download

Posted on 8 April 2020 | 2:58 pm


136: Michael Chan - React Is Not a Rails Competitor

In this episode, Adam is joined by Michael Chan to talk about how people who identify as React developers are building real web applications, and why it seems like nobody is talking about databases or background jobs anymore.

Topics include:

  • What do people actually mean when they say "I used to use Rails, but now I use React"?
  • Why back-end development is still a crucial part of building any web application
  • What third-party services people are using to try and replace custom back-end code
  • Would you default to building a Rails back-end for a React side project, or is your instinct to try and use third-party services only?
  • How far do you think front-end-first frameworks like Next.js are going to get their hands dirty in the back-end?
  • Are new developers missing out by starting with React and not realizing how important tools like Rails and Laravel are for building complete production-ready applications?
  • Are relational databases legacy tech or are they underappreciated?

Links:

Supporting the show:

I decided to stop taking sponsors for the show because I think advertisements are annoying and no one wants to listen to them.

If you do want to support the show, the best way to do it is to purchase one of my products:

  • Tailwind UI, a collection of professionally designed, fully responsive HTML components built with Tailwind CSS
  • Refactoring UI, a book and video series I put together with Steve Schoger on designing beautiful user interfaces, without relying on a designer.
  • Advanced Vue Component Design, a course on designing simpler, more flexible Vue components that are both more powerful and easier to maintain.
  • Test-Driven Laravel, a massive video course on designing robust Laravel applications with TDD. Learn how to build a real-world application from scratch without writing a single line of untested code.
  • Refactoring to Collections, a book and video course that teaches you how to apply functional programming principles to break down ugly, complex code into simple transformations — free of loops, complex conditionals, and temporary variables.


Audio Download

Posted on 25 March 2020 | 3:42 pm


135: Lessons Learned Building Tailwind UI

In this episode, Adam is joined by Sam Selikoff to talk about some of the interesting technical challenges he faced building Tailwind UI, and how working on the project has influenced how he will build layouts in the future.

Topics include:

  • What Tailwind UI is and why we decided to build it
  • How odd numbers can wreak havoc on a user interface, and how to avoid them
  • Crafting the perfect form control
  • Unexpected benefits of working with CSS Grid
  • Abusing single column grids just to use gap, and why we desperately need gap support in Flexbox

Links:

Supporting the show:

I decided to stop taking sponsors for the show because I think advertisements are annoying and no one wants to listen to them.

If you do want to support the show, the best way to do it is to purchase one of my products:

  • Tailwind UI, a collection of professionally designed, fully responsive HTML components built with Tailwind CSS
  • Refactoring UI, a book and video series I put together with Steve Schoger on designing beautiful user interfaces, without relying on a designer.
  • Advanced Vue Component Design, a course on designing simpler, more flexible Vue components that are both more powerful and easier to maintain.
  • Test-Driven Laravel, a massive video course on designing robust Laravel applications with TDD. Learn how to build a real-world application from scratch without writing a single line of untested code.
  • Refactoring to Collections, a book and video course that teaches you how to apply functional programming principles to break down ugly, complex code into simple transformations — free of loops, complex conditionals, and temporary variables.


Audio Download

Posted on 4 March 2020 | 12:45 pm


134: Mark Dalgleish - You Should Be Using Layout Components

In this episode, Adam talks to Mark Dalgleish about common mistakes people make in their approach to constructing layouts, and how dedicated layout components can make your component system much easier to work with.

Topics include:

  • What problems you run into when baking white space into components, and why your components should never contain any surrounding white space at all
  • Layout challenges you run into due to the way the browser includes line-height in the size of text elements
  • The trick Mark's team uses to remove surrounding white space from text elements, without removing the space between wrapping lines
  • Using a "stack" component to specify the space between sibling elements
  • Issues with naively just using margin on one side of an element to space elements
  • The upcoming "gap" property in CSS and how it proves layout components are a good idea
  • Using a "content block" component for horizontal spacing/sizing at the page level
  • Tricks for maintaining vertical rhythm despite 1px borders trying to ruin it all for you
  • Why tools like React are so important for being able to implement designs in a way that matches how designers think

Links:

Supporting the show:

I decided to stop taking sponsors for the show because I think advertisements are annoying and no one wants to listen to them.

If you do want to support the show, the best way to do it is to pick up one of my books or courses:

  • Refactoring UI, a book and video series I put together with Steve Schoger on designing beautiful user interfaces, without relying on a designer.
  • Advanced Vue Component Design, a course on designing simpler, more flexible Vue components that are both more powerful and easier to maintain.
  • Test-Driven Laravel, a massive video course on designing robust Laravel applications with TDD. Learn how to build a real-world application from scratch without writing a single line of untested code.
  • Refactoring to Collections, a book and video course that teaches you how to apply functional programming principles to break down ugly, complex code into simple transformations — free of loops, complex conditionals, and temporary variables.


Audio Download

Posted on 12 February 2020 | 2:20 pm