-
How we spent $980,000 on a failed SaaS project
Read more »: How we spent $980,000 on a failed SaaS projectThree months after we closed the sale of WooCart, our project that was gonna “make it big”, I am ready to review the full financial consequences of our failure: $700k loss.
-
Standing on the shoulders of giants
Read more »: Standing on the shoulders of giantsWhether we know it or not, we build things based on the work done before us. This is true in every aspect of life, and programming is no different. Every few weeks, we (at Niteo) have a developer session where we (developers at Niteo) talk about new things we learned, cool libraries/tools we discovered, etc.Last…
-
Nix build on a diet
Read more »: Nix build on a dietAt Niteo, we are using nix-shell to build isolated development and production environments. We deploy production as a Docker image on Heroku. Recently, I’ve noticed that Pareto Security dashboard app deployments have been very slow. Almost 10 minutes, even more on a busy afternoon. Most of the time was spent in copying files around, as…
-
Sprints are back!
Read more »: Sprints are back!Back in early 2010’s, “sprints” were how I lived. Week-long events, in random places around the World, hacking on open source. From offices in European cities, to lake sides, castles and saunas. It’s where I met some of my best friends, where I got business for Niteo’s agency side. It’s where I learned more than…
-
Deploying +100 servers with GitHub Actions
Read more »: Deploying +100 servers with GitHub ActionsLast year we decided to replace our Ubuntu servers with NixOS. We were still on Ubuntu 14.04, so we also had to upgrade all the services and tools, including PHP, MySQL, HAProxy, etc. As you can imagine, this was a lot of work, and you might be asking yourself, “why didn’t you just upgrade Ubuntu?”…
-
Concurrency in Go
Read more »: Concurrency in GoConcurrency in Go is an extensive topic, and we won’t cover all the things in this post. There are tons of articles and several books that cover concurrency in depth. The goal of this post is to cover topics between basic and advance. We’ll cover the usage of sync.WaitGroup and channels. Those two things combined…
-
Postmortems
Read more »: PostmortemsEarlier this year, on one of our half-yearly IRL’s, we had a discussion about whether or not we should proceed with a massive upgrade…
-
Lowering H12 errors on Heroku
Read more »: Lowering H12 errors on HerokuThis post will briefly discuss H12 errors on Heroku, more commonly known as request timeouts, how we tackled them, and how we fixed them. Before we start, let’s establish some context. We have an app that’s a hub for ~600 servers. A few times per day, each server creates a request to the app, ensuring…
-
Staging like it’s 2020
Read more »: Staging like it’s 2020Last year, we wrote a blog post on how we use Heroku’s Review Apps to create staging apps for every Pull Request submitted to a project’s repository. These apps are created and deployed automatically, completely isolated from the production environment, and contain the changes from the Pull Request. This allows every stakeholder to see how…