RSSAmplifier

Blog

Page not found – RobG3d

Blog of Rob Galanakis (@robgalanakis)

robg3d.comRSS feed ↗20 posts

Latest posts

Makefile 🤝 JavaScript

How many times have you heard this? “I ran npm install and it failed.” “I installed a new module and the lockfile is totally different.” “The app won’t boot.” And how many times has the answer been: “What version of node are you running?” I can hear you clacking away at your keyboard: “Use a version manager!” And to that I say: We do! But you have to either manually activate the version manager…

Makefile and Dotenv

Dotenv (.env) fields are excellent for configuring applications. You can even use them for Make!

Makefile Application Presets

We saw in the last post how to use Makefile wildcards to write targets like this: migrate-to-%: @bundle exec rake migrate[$(*)] guard-%: @if [ -z '${${*}}' ]; then echo 'ERROR: variable $* not set' && exit 1; fi logs: guard-STACK @awslogs get -w /ecs/$(STACK)_MyService So that we can build CLIs like this: $ make migrate-to-50 Migrating to version 50... $ make logs ERROR: variable STACK not set $…

Beautiful Makefiles with Wildcards

Every single project we build includes a Makefile as a task runner. Every. Single. One. Why? Because it allows someone to jump into a codebase and start working with the same set of tools and commands as everyone else. Want to know how to install, build, test, deploy, and see what else you can do? Just open Makefile. This may not be so important if you spend all your time on one monolith, but if…

Dynamic JavaScript and React Configuration

Most of the frontends we build at Lithic are written in React. Normally we deploy them as static apps in Netlify. This will write environment variables from process.env directly into the compiled JavaScript. Sometimes, though, we need to dynamically configure the applications based on runtime, not build time, environment variables. The basic create-react-app workflow doesn’t work in this…

Should I use a graph database?

One of our clients asked us the other day: I’m setting up a web app that stores information about devices and the interconnected dependencies between devices. The app would have a web front for a user to navigate through the graph of devices and be able to click through each node, find related/linked nodes, and dive deeper into a given node. We’re trying to decide what database to use, and…

Could a random hire thrive in your organization?

I made a couple posts (applicant-designed hiring, randomized hiring) about how less-controlled hiring processes could lead to designing an organization where more folks could thrive. It’s largely a thought experiment, so I’ll share my thoughts :) What would need to work for a random hire to thrive? Smooth onboarding and documentation. Nothing can fix getting off on the right foot, so onboarding,…

Why do we always think our team is so great?

If you ask someone experienced what they think of their team, they’ll usually tell you their team is the best team they’ve ever worked on. It’s so rare to hear someone say they think their team is bad or even mediocre. Why is this? We rationally understand that most teams and employees must be average, near the middle of the bell curve of ability. But we don’t experience it that way. I don’t…

And what if we hired randomly?

A couple posts ago, I wrote about letting candidates choose their own hiring process. But for years, I’ve been toying with the idea of something even more radical — what if we hired randomly? This sounds silly, but wait! Think of a time you’ve transferred teams, or came in to lead an existing team, or had someone from a different group transferred to your team. This situation is mostly random,…

Managers learn lessons on the backs of their reports

When you make mistakes as a manager, you usually don’t pay the price. Your reports are always the ones walking away worse off — they have to deal with the repercussions of your mistake, and probably didn’t learn anything useful. This is an inherent part of hierarchical power dynamics. You can’t wish it away. You can’t smile it away. This is why being an effective manager requires large amounts of…

What if candidates controlled the interview process?

The software engineering interview process at most jobs is similar- phone screen, some programming work, a bit of architecture or systems design, cross-functional (aka “culture fit”) interviews. Companies are all over the place on how well they execute this formula, but the general formula is the same. Not only is the formula consistent, but it’s even more common that there is “the hiring process”…

Reflections on greenfielding MilkRun

When I joined MilkRun in June 2018, the technical situation was… not good. Seeing as I couldn’t even sign up due to errors, I had expected issues. But when I saw a timestamp primary key field which was also used as a foreign key, and other WTFs, I knew I was going to rewrite this thing from the ground up. This was the first project I had truly greenfielded. I have built a lot of new services and…

Don’t bother with migrations for performance-based indices

I used to write database migrations for performance-based indices, like adding an index to a foreign key column. I don’t do it anymore, and do not recommend the practice. Instead, write your SQL against a production-like database (same schema and data), and run it against production directly as part of your “operations” rather than as part of your development workflow. Caveats: This doesn’t apply…

Reflections on over-engineering: Cozy

The Good We were processing over $100m/mo in rent at Cozy, nearly all of that on the 1st of the month. We were able to do that in a Ruby monolith by maintaining a disciplined programming team, with thorough automated tests and monitoring. Every time we had a performance issue, we fixed it, whether it was adding indices, redesigning queries, or building auxiliary systems like for better…

Reflections on over-engineering

My entire career has been spent replacing other people’s applications. The closest I’ve come to greenfielding was spending 3 months rebuilding MilkRun and then migrating data from the old system to the new (none of the code or schema was kept). I think I’ve been pretty successful at replacing other folks’ code and it has given me a particular perspective on the state of our craft. I would wager…

“Professional services” for pre-revenue startups

Something I’m beginning to explore is what a services business providing programming and long-term technical guidance and mentorships for startups would look like. A business that takes the things I know I am good at — mentorship, programming, product management — and provide it to companies who need it in a way that leaves them set to grow and scale. How would this work? My ideal setup would be…

Feature team models that work

Along with a number of “monolith to microservice” transitions, I’ve been a party to many “functional team to cross-functional team” transitions. I think there are some patterns and rules of thumbs that are widely applicable. The place these transitions fall down is where the definition of “cross functional” is too wide. You can’t throw a UI programmer in with a data engineer and expect them to be…

Let’s not fix venture capital. Let’s replace it.

There’s a lot of talk in Portland and other secondary markets about how difficult it is to raise early money compared to places like San Francisco and Seattle. I believe this is true. But I don’t think it really comes down to anything except, there are a lot of people with a lot of money in those places, and even more people with enough money to do some angel investing. In other words, I would be…

Please reuse your database servers

I’ve been part of a number of “monolith to microservice” transitions and something that I’ve seen a few times is engineering orgs creating separate database servers per-team or even per-service. Please don’t do this. Please start with a production server, and an “everything else” server, until you outgrow one large server. Separate servers, as opposed to different databases on the same server, is…

18 months of wandering

In January 2018, I left as CTO of Cozy under difficult circumstances. Those of you that know me know the story. Those of you that don’t are free to buy me a coffee or beer to hear it. I joined Cozy in 2014 as Engineering Manager, and rebuilt and ran the company for 3+ years. Losing Cozy sent me into probably the first true bout of depression I’ve experienced in my life. The 1.5 years since then…