• The REPL: Issue 80 - April 2021

    Your Work Peak Is Earlier Than You Think

    Long-form article about performance at work, and what it means as you age. Holding on to peak performance is impossible: Eventually you will loose it. You can continue finding meaning in the life and work as you age, but it probably means doing different things that you did before. The article also talks about fluid intelligence and crystallized intelligence. The former tends to be greater in younger people, the later in older people, as the accumulate knowledge and wisdom. You career should shift accordingly.

    Embrace the Grind

    This article explains how there are some things that are possible only when you dedicate effort for long periods of time, i.e. the grind. The author talks about curating a long list of bug tickets that seemed daunting, but was well worth the effort. In that same vein, I think that dedicating effort in learning new things is like that. For example, you might now know any SQL today. If you dedicate 20 minutes daily on lessons and exercises and increasing your understanding, in a year you will probably know more SQL than most developers.

    Read on →

  • The REPL: Issue 79 - March 2021

    Why OO Sucks

    Joe Armstrong, the creator of Erlang, writes why Object-Oriented programming sucks. The main objection is that data and functions should not be bound together:

    Functions are imperative, data is declarative.

    I found that resonated with me. I write Ruby every day, but tend to write objects that hold data only (e.g. by using dry-struct), and other objects that hold logic that operates on data. I started using that time after spending some time writing Elixir, which like Erlang, runs on the BEAM virtual machine.

    PD: The link is to the WayBack Machine, as the original doesn’t seem to be online anymore. It’s article not dated, but the earliest crawl is in 2001.

    Build your own “data lake”

    Clément Delafargue explains with lots of detail how his company built a data lake that suits their needs, but avoids the complexity the larger setups may require. It leverages in clever ways Postgres great support for foreign data wrappers. Since their data consumers are all familiar with SQL, using a stable schema as an API to present is a great insight.

    SQLite is not a toy database

    Anton Zhiyanov shows-off a lot of SQLite uses. I typically think of it as a database to use in client applications (e.g. software running on desktops or mobile devices). The examples in the article illustrate how it can be used by for data analysis on a day-to-day basis. SQLite is a great database engine.

    Read on →

  • Deployments With Incompatible Code

    A typical web application runs several application processes, each fielding web requests behind some sort of load balancer. In Ruby on Rails, each of these processes is typically stateless: Any request can be handle by any of the server processes indistinctly. All state is kept in the database, and on the client’s cookies. Deploying new code can bring unexpected challenges, even on seemingly simple cases.

    Let’s explore one of those cases. The the rest of the post I will talk specifically about Ruby on Rails, the framework I know best. I expect the concept to carry over to other frameworks as well.

    Read on →

  • The REPL: Issue 78 - February 2021

    Understanding SQL JOIN

    Edward Loveall explains a useful frame of mind to understand SQL JOIN statements. The key to understanding them is to know that the SQL statement will act on one relation (called a table in the article). What JOIN statements do, is create a new relation from other relations (or tables). A follow-up explains GROUP BY.

    A Data Pipeline is a Materialized View

    Nicholas Chammas makes the argument that a data pipeline is a form of a materialized view: A data structured derived from a primary source, and persisted. Thinking about primary vs. derived data resonates with me, and is one of the main take-aways from Designing Designing Data-Intensive Applications.

    Do You Need an Event Bus? A Quick Overview of Five Common Uses

    The thing that surprised me the most about this article by Lyric Hartley, is that in all 5 examples, the event bus (Kafka) is always fed from a database. It is always used as derived data, and never as a primary. While I think that is a lot of the real-life use cases out there, it leaves out the architectures, like event-driven, that use the even bus as a primary source.

    Read on →

  • The REPL: Issue 77 - January 2021

    Maximizing Developer Effectiveness

    Effective developers need to have an environment that supports them. Effectiveness is highly correlated with short feedback loops, at different levels. These should be optimized so they are quick, simple and impactful for developers.

    Context switching costs more than we give it credit for

    Context switching is a productivity killer. Multi-tasking is a myth. Mayank Verma advocates for batching work, as a way to be more productive. I think that is a fine tactic. Strategically, the takeaway is that protecting your attention will make you more productive.

    That’s not how 2FA works

    Terence Eden illustrates why security is hard. Even “techbros” that are security-conscious enough to turn two-factor authentication (2FA) on, sometimes misunderstand what type of attack it protects against. In this example, the misunderstanding is that 2FA is designed to assure the server that you are really you. It doesn’t give you any assurances that the server is who it says it is.

    Read on →