Git describes itself as: “...a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.

Git is easy to learn and has a tiny footprint with lightning fast performance. It outclasses SCM tools like Subversion, CVS, Perforce, and ClearCase with features like cheap local branching, convenient staging areas, and multiple workflows.”

I’m thankful for git because it makes collaborating on code much easier than in the ‘bad old days.’ Not only does it give me complete flexibility on how and when I commit code, but it it makes sharing and merging trivial. There are installers for every major platform and it is very well maintained. I like treating git commits like save points in video games, so even when I am working solo on a project the first thing I do is start a repo with git init. Git is a great tool and I love using it every day.


Metabase is a friendly and risk free way of giving your team access to your database. The Metabase toolset allows you to ask great business analyst style questions without having development write reports. With some basic knowledge of SQL anyone can jump in and start graphing data and building real-time dashboards that make your company’s or project’s data actionable. You can answer questions like: How many users signed up today? What’s the average size of an order? What connections do users create before converting from free to paid? The best part of Metabase is that it’s designed for everyone. It has a nice point and click web interface that can help you build out queries even if you aren’t a developer. Their great dashboard system lets everyone pick the data and reports that are important to their role. I’m thankful for Metabase because it has saved me countless hours of mindless report writing, while making it easy to dig into important data questions.


rubocop is a ruby static code analyzer. It follows the Ruby style guide based on the community. It's a good style guide.

I’ve liked rubocop since the first time I tried it. If you're even a beginner with Ruby or if you already have some experience in Ruby, Rubocop is always justified. If you're a beginner you will learn a ton of idiomatic ruby code and best practices. If you're not a beginner, it helps you to keep a standard for your code that the whole team can automatically follow.

Every time I start a new rails project I use my default rubocop configuration file. You can manage the configuration file however you or your team want. If you're doing it as a team, you all can spend some time planning your coding style and put the thoughts in the rubocop configuration. With this, everyone will have a standard to follow.

I'm thankful for rubocop because it helps our team use the same conventions, and we don't need to spend a lot of time in code reviews on suggestions that should be automated. It saves our review cycles for deeper questions than the number of newlines between function definitions.


RSpec is a behavior driven development testing suite written in Ruby. What I like in rspec is because the language used and the syntax is very pleasant and helps with understanding tests quickly. This is because it uses behavior when testing the the code rather than just test the methods itself.

When testing a class or a method, we can have a context block, a describe block and finally we can say it 'does something' and test what our method should do. There is an interesting website called better specs that has ideas about how to write better tests using the rspec model.

I'm thankful for rspec for making testing better. It helps me to write more readable tests, which helps them serve as additional developer-centric documentation.


PostgreSQL is an extremely flexible RDBMS. Switching to it from MySQL was momentous for me, because it just didn’t have the bizarre behaviour I’d come to think of as standard. I used MS SQL Server a ton in the past, which is expensive at scale, and I prefer PostgreSQL many times over. TOAST tables alone are pretty impressive.

jsonb support in PostgreSQL also means that it can handle unstructured data, for those times when you really don’t want to think about your schema. I mostly take advantage of this when serializing something that I doubt I’ll need to index into - but you can totally index into jsonb fields as well.

Additionally, I recently implemented a custom type in Ecto backed by a custom PostgreSQL data type, like this example. It felt great to be able to do that instead of falling back on jsonb out of convenience.

All of the above taken alone is plenty to justify suggesting PostgreSQL to everyone. However, I was recently tasked with migrating a large app from PostgreSQL to Oracle. Having now spent more time with Oracle than I’d like to, and having fewer options at our disposal than we had before the migration, I can say unequivocally that the free database utterly destroys the expensive one.

I’m thankful all of the other projects I work on use PostgreSQL.

What Open Source Projects are you thankful for?