
Frontend First
A podcast about modern UI development on the web. Hosted by Sam Selikoff and Ryan Toronto.
Latest episodes

May 8, 2019 • 1h 28min
Nathan Selikoff on Omnimodal's real-time tech stack
Topics include:
4:23 – Overview of Omnimodal's tech stack
6:38 – Omnimodal's mission: to help cities manage transportation demand
16:10 – How to ingest open transportation data and present it in real time
21:43 – How graphics-heavy OpenGL and C++ apps can benefit from web tooling
31:06 – Why state machines are used in both video game and web development
34:55 – How JavaScript UI development compares to other paradigms
38:46 – Why Ember and Rails were chosen for Omnimodal's technology needs
42:09 – Using a prediction engine to improve on transportation schedules
44:56 - How Omnimodal gets data from its hardware trackers to the Rails server
50:55 – How services like Heroku and PubNub, custom AWS code, and the concept of a Data Lake help address scalability issues
56:40 – How deploys are coordinated across multiple services
59:47 - What the development process looks like for a multi-service tech stack
1:02:10 – What the complexity breakdown is between Omnimodal's frontend and backend
1:04:07 – Lessons learned on authentication while using Auth0
1:09:31 - Lessons learned on data modeling
1:12:21 – Tech choices, escape hatches, what's worked, and what hasn't
1:20:15 – Things Nathan loves about Ember, and things that are challenging
Links:
Nathan on Twitter
Omnimodal.io
PubNub
GTFS feed specification
Amazon Kinesis
Amazon ElastiCache
AWS AppSync
Auth0

May 1, 2019 • 54min
Frontend developers like us do things like this
Topics include:
3:12 – Getting Mirage 1.0 out the door, Mirage's roadmap, and how other communities treat domain modeling
15:18 – Seth Godin's blog post on tribal marketing
27:08 – Sustainability and project management in open source
48:06 – What benefits do products actually unlock?
Links:
Ember CLI v1.0.0-beta.1 released
"People like us do things like this" by Seth Godin
Justin Jackson on Full Stack Radio
Transistor.fm

Apr 24, 2019 • 1h 2min
Hark! The Halting problem sings
Topics include:
0:00 – Letting your yes be yes, following through on your commitments, and paying attention to opportunity cost
6:40 – When Ember releases actually become LTS versions
9:13 – Why we need "test apps" when developing Addons
16:50 – How to use newer syntax when authoring Addons that support older Ember versions
22:07 – How angle brackets change our component implementations
31:46 – How to make the APIs of our domain components more portable
38:45 – How to reuse code that has implicit data dependencies, and the Halting problem
Links:
Mirage's example test apps
Ember CLI Tailwind's example test apps
Nested Angle Bracket video
Ember Collapsible Panel

Apr 17, 2019 • 1h 54min
Edward Faulkner on Embroider, Ember CLI's modern build system
Edward Faulkner joins Sam and Ryan to chat about his work on Embroider, a new three-stage architecture that will power the next generation of the Ember CLI ecosystem. They also talk about myriad other topics, including Yarn Plug'n'Play, the benefits of debugging other people's code, how Ember is embracing the larger JavaScript ecosystem, and more.
Topics include:
0:00 – What's hard about programming, why schools are bad at teaching math, and more
10:47 – Why computers should empower ordinary people, and how we can close the gap that exists between the technologically skilled and unskilled
22:12 – How the experience level of the median JavaScript developer affects tech choices made by the community
27:54 - The npm dependency graph and Yarn plug-n-play
36:24 – How to avoid making too big of a leap when improving software
41:58 – What Embroider is, and what problems it's focused on solving
46:10 – The three stages of Embroider and the V2 Addon format
1:00:15 – What Embroider enables, like tree-shaking unused Addon modules and route-level code splitting
1:21:08 – How to try Embroider out in your projects today
1:34:39 – How Ember is embracing the larger JavaScript ecosystem
1:39:35 - Why debugging other people's code is a great way to level up as a developer
1:48:28 - What Embroider's next steps are
Links:
Ed on Twitter
Embroider
Yarn Plug'n'Play

Apr 10, 2019 • 1h 32min
Derrick Reimer on SPA architecture with Elm and GraphQL
Derrick Reimer joins Sam and Ryan to chat about building his new real-time chat product Level as an SPA using Elm, Phoenix and GraphQL. He covers domain modeling in Phoenix, his experience building his first GraphQL API, type safety in Elm, and the data fetching patterns he's using to support his application's real-time functionality.
Topics include:
2:01 – What is Level? What tech stack are you using to build it?
14:34 – Building the GraphQL API with Phoenix and Absinthe
37:40 – Building the frontend with Elm
Links:
Derrick on Twitter
Level
The Phoenix framework
GraphQL
Absinthe, GraphQL for Elixir
The Elm language

Apr 4, 2019 • 57min
Do you trust your test suite?
Sam and Ryan continue their discussion from the end of Episode 54 about how much we actually rely on our test suites versus how much implicit trust we place in semver. They also talk about some new Ember Octane features as well as a data-fetching issue.
Topics include:
2:00 – Do we trust our test suites?
10:00 – Breaking APIs in a changelog vs. in code
20:27 – Modifiers – they're kinda like mixins
37:17 – Named blocks
38:29 – Ember Octane & EmberConf trainings
43:15 – Fetching user-specific data in EmberMap's Video Views series
Links:
Chris Garrett's post on Modifiers
Yehuda's Yieldable named blocks RFC
Our Real-world Animations training repo
Our Robust Data Fetching training repo

Mar 13, 2019 • 1h 6min
Chris Garrett on Ember Octane
Chris Garrett joins Sam and Ryan to chat about what's coming to Ember in Octane, its first edition. Chris talks about how module unification, decorators, ES6 classes, named args, angle-bracket components, template imports, modifiers, and Glimmer components offer a cohesive new programming model for Ember.js developers.
Topics include:
1:18 – De-scoping Module Unification from Octane
2:25 – Run-time APIs are coming to Octane, build-time APIs are being worked on
5:04 – What's the vision behind Ember Editions, and Octane in particular?
9:41 – What's the state of decorators?
15:43 – What can't you do with static decorators that you can with dynamic decorators?
19:18 – Why do we need decorators to use ES6 classes in Ember?
20:50 – Is it possible to lint for correct usage of named args and this-dot property access?
29:30 – How did Modifiers come about, and how do they obviate the need for lifecycle methods?
38:00 – Are you concerned that a player as big as React has abandoned ES6 Classes in favor of functions? Do you think there's anything to their argument that classes are fundamentally confusing?
43:49 – What's the thinking behind the Modifier Manager API that just landed?
52:04 - Could you expand on a point you made in your blog post about how Ember.set leaks state management all across your app?
58:50 – What's the status of Glimmer components?
Links:
Chris Garrett on Twitter
Chris's blog
Modifier managers RFC
Decorators for JavaScript TC39 proposal
ember-on-modifier

Mar 6, 2019 • 56min
SPAs should do more than server-rendered apps, not less
Topics include:
0:00 - Module unification
1:20 - Component resolution
5:45 - Why we don't use angle brackets
9:35 - SPAs should do everything a server app can do
10:15 - Ember's Router
11:00 - Replicating the server's "fresh data" behavior
17:15 - Reloading stale data
23:50 - Fetching data
23:50 - Getting Mirage working with React and Vue
26:10 - Data loading components
29:41 - Knowing what queries are currently rendered
32:15 - Using cache keys to track what data is loaded
35:00 - Pushing data into the client with web sockets
39:00 - Describing Twitter's UI in queries
44:00 - When will data loading be abstracted away?
49:45 - Dependabot workflow
50:20 - Can you merge a PR from a bot if all the tests pass?
53:20 - Trust, but verify
Links:
Ember Community Survey
ember-template-component-import
Sam Selikoff on Twitter
Ryan Toronto on Twitter

Feb 27, 2019 • 1h 1min
You still have to build two apps
Topics include:
0:00 - Refreshing an Ember app when a new version is deployed
11:05 - When SPAs become too difficult
14:50 - Building an SPA never got as quick as we'd hoped
19:20 - You're now responsible for two applications
28:00 - Integration costs
32:00 - Architecture is easier within a single monolith
40:20 - Beginners should use the same tools as experts
40:50 - Rolling advanced solutions back into the framework
47:41 - Services that are used by both beginners and experts
52:32 - Can you start an SPA without making an API server decision?
Links:
Rails PR for multi database support
Sam Selikoff on Twitter
Ryan Toronto on Twitter

Feb 13, 2019 • 1h 5min
From build-time to run-time
Topics include:
01:15 - Implementing Mirage's AddonDocs blog with GitHub issues
15:30 - Discussion forum vs. GitHub issues vs. blog comments
18:18 - Moving the blog post source to a GitHub issue
23:30 - Dynamic vs. static data, and implications for changing build-time data to run-time data.
27:40 - Downsides of run-time data
37:00 - SPA architecture and distributed systems. How does React/Vue "happy path" architecture differ from Ember's?
41:45 - Testing is the only true way to know if your dependencies work.
43:31 - Where does Ember pass the Celery Test, and where does it fail?
Links:
Artsy Engineering's blog post on using GitHub issues for blog post comments
Utterances
Tailwind's discussion forum
Basecamp's vocabulary doc, from their handbook