If you're interested in keeping up with my writing, you can subscribe to my newsletter 👇, find me as germsvel on twitter, or follow my RSS feed.
Diverge then converge with LLMs
Are plan files the new 10k-line PRs?
Reflections on creating ExCrap without looking at the code
Why dead code feels hard to delete
Draw the rest of the ___ owl (software factory edition)
Stop writing code by hand (and feel the friction)
Daily writing retrospective
Thinking about the extremes to break out of local maxima
Pair-programming is a cheat code
What Managerial Economics can tell us about AI and Software Development
Your problem is (often) two problems
Why do we write tests?
🤖 ➡️ 😄 Humanize your standups
Elixir Streams hits a 100 videos! 🎉
Introducing PhoenixTest
Don’t silo your team
Refactoring has a price. Not refactoring has a cost. Either way, you pay.
The Phoenix testing pyramid
Prefer LiveView's assert_redirect over assert_redirected
Build your own lazy operation evaluator in Elixir
Phoenix 1.7's verified routes
Using `dbg/2` to replace `IO.inspect/2` and to pry into code
Elixir 1.14's new `:optional` option when deriving the `Inspect` protocol
Phoenix 1.7 is View-less! 😱
Adding `gh` to my pull request workflow
A short introduction to BDD
7 GUIs: Implementing a Circle Drawer in LiveView
They own the problem. You own the solution.
Write commit messages with the future in mind
Avoid test setup pollution (and 4 problems it creates)
How LiveView got rid of dangling processes in tests – and how we can do the same
Is the test LiveView immutable or not?
Minimize context loss when opening a Pull Request
Reduce the friction of executing a test
Ecto's uniqueness constraint vs Rails' uniqueness validation
Using ExUnit's `start_supervised/2` for better cleanup
TDD changes code design from invention to discovery
Mocking External Dependencies in Elixir
Dependency Inversion with Elixir Protocols
Using mix aliases to improve your workflow
elixir lunch is now elixir social
Testing Singleton Processes with Dependency Injection
Starting elixir lunch
Taking LiveView's JS commands for a spin
BDD and just-in-time development
New to Elixir? Beware of Date and DateTime Comparisons!
Lateral Joins Instead of Window Functions
What is Elixir? For my Ruby friends.
7 GUIs: Implementing a CRUD App in LiveView
Project-wide find and replace in Vim
CSS Selectors for Tests
7 GUIs: Implementing an Interactive Timer in LiveView
7 GUIs: Implementing a Flight Booker in LiveView
I'm going on a consulting adventure!
7 GUIs: Implementing a Temperature Converter in LiveView
7 GUIs: Implementing a Counter in LiveView
Deadlines vs Appetite
Keeping the same path helpers when turning a view into a LiveView
Culture is a 50-day moving average
Using has_element?/3 for better LiveViewTest assertions
A minimalist LiveView testing guide
TDD Phoenix Update (Nov 2020)
Testing LiveView talk and course
Break apart your features into full-stack slices
Pay the cost up front. Don't distribute it to others.
Beyond basic modal editing. Using vim's command-line mode.
TDD Phoenix — update on a work in progress
On Quitting Vim
Remote Tools and Tips in These Remote Times
Breaking Out of Ecto Schemas
Splitting a Commit
5 Tips for More Helpful Code Reviews
Faking External Services in Tests with Adapters
Supercharge Your Elixir and Phoenix Navigation with vim-projectionist
Finding the Time to Refactor
Dumpster Diving through Dotfiles: Remote Git Branches
Let's Not Misuse Refactoring
Better domain modeling in Elixir with sum types
Dumpster Diving through Dotfiles: Better Git Logging
Back to basics: psql
Say no to more process, say yes to trust
A couple of Elixir videos on Upcase
Recently, thoughtbot decided to make Upcase free. It has a lot of great learning materials, especially when it comes to Rails, vim, test-driven development, and tmux.
Do you break your Elixir eggs on the big end or the little end?
Don't forget the silent step when you squash and merge
Is Elixir a scripting language?
Write good commit messages by blaming others
Long-lived processes in Elixir
Build your own web framework in Elixir (video)
How to organize your functional code
An introduction to concurrency in Elixir
Concurrency is a first-class citizen in the Elixir platform. The concurrency model is that of isolated, independent processes that share no memory and communicate via asynchronous message passing. In other words, a process can run concurrently without concern of others, and processes communicate with each other only via send-and-forget messages.
Tests as Counselors of Design
One of the benefits of tests is that they are the first piece of code that will interact with our application. As such, they can offer valuable insights into the application's complexity.
Elixir simple_one_for_one Supervisors
Supervision trees are awesome. For a while I was a bit confused as to how to use the simple_one_for_one
supervision strategy. Let’s look at it step by step by creating a simple
bank account from which we can deposit and withdraw money.
Tests as Tools for Understanding
When working on a feature, I often find pieces of code that I have not seen before. In order to better understand the class or method, I like to use tests as documentation and as a way to explore the code's functionality.
