Revelry engineering blog header image lightbulb TWIL This Week I Learned. Chalkboard style

#RevTWIL: A Week’s Worth of Slack Channel Sharing

At Revelry, we believe in sharing and learning from one another (beliefs that are rooted in our Core Values). Among the many things we do to encourage internal knowledge exchange is to have a different team member present at each week’s Engineering Meeting. These presentations don’t have to be lengthy, formal, or complicated; in fact, many are brief, but also powerful in that they teach our Revelers something new, inspire conversation, and encourage collaboration.

In the spirit of sharing, we share our This Week I Learned presentations (aka RevTWILs”) here. We hope you find them helpful.

THIS WEEK: We offer an assortment of shared learnings from our engineering team.

Circular dependencies (also known as cyclic dependencies) can occur when two or more modules reference each other, which can cause problems during deployment. It can be insidious because locally it can work well. See below. Note: I got a warning about a direct reference cycle from Vercel when I made a PR. I fixed it by making a third module and abstracted the elements common to both so I didn’t need the cyclical reference.

Direct reference (A -> B -> A)
Indirect (A -> B -> C -> A)

If you use the Repo.Preload function on an existing struct that already has the relationship preloaded, it won’t retry that preload, unless you pass the option :force

ElectricSQL is a really neat tool for syncing offline data with postgres and it’s written in Elixir!

Comm is a handy cli tool for comparing the lines of two files like Sets. You can get the intersection or unique lines from either file.

Phoenix has a new default web server called Bandit that replaces cowboy as of the latest release

Reverting to the earliest commit since the latest prod release and working backwards is an excellent way to discover the source of a bug in staging.

When you’re building up a doc site using Docusaurus, and you’re working in a markdown file, you have to use backticks to wrap things that you wouldn’t think you had to wrap.

You can sort branches by date of most recent commit and set a config to do that automatically.

*git config --global branch.sort -committerdate *
*#single dash is a minus sign not a flag *

Elixir naming convention when naming functions: Functions using the word “size” in its name will take the same amount of time whether the data structure is tiny or huge. Conversely, functions having “length” in its name will take more time as the data structure grows in size.

Check out It’s a really comprehensive test suite for testing SSL connections/certs. Bonus: Phoenix still defaults to TLS 1.2!

We're building an AI-powered Product Operations Cloud, leveraging AI in almost every aspect of the software delivery lifecycle. Want to test drive it with us? Join the ProdOps party at