# Mihai Bojin > I keep critical systems reliable and build the teams behind them. I write about system design, reliability, infrastructure as code, Go, and Java. Mihai Bojin is a Dublin-based reliability engineering leader with 20+ years of experience. He keeps critical systems reliable and builds the teams behind them. Today that is Neon, the serverless Postgres platform Databricks acquired in 2025; before that, several years in Google SRE on the world's largest rollout system and on building Ops Manager (MongoDB's private cloud platform), and improving the Atlas Admin API experience. Earlier, at Salesforce, he built monitoring tools for the core app and debugged Apex, Visualforce, and SOQL to untangle the gnarliest problems in customers' orgs. This site is his blog and home for writing about system design, reliability, infrastructure as code, Go, and Java. Most articles are also syndicated on Medium, but this site is the canonical source. ## Blog - [Signed monorepo releases using GitHub Workflows](https://mihaibojin.com/blog/signed-monorepo-releases-github-workflows) — Replacing 150 lines of GPG shell with GitHub-signed commits to satellite repos: zero private keys on the runner, via createCommitOnBranch and a custom Action. (20 May 2026) - [Designing Security Policies for dotsecenv](https://mihaibojin.com/blog/designing-security-policies-for-dotsecenv) — A long weekend, a SUID dead end, and the simpler design that shipped. (5 May 2026) - [Why Your .env Secrets Shouldn't Be Plaintext on Disk](https://mihaibojin.com/blog/env-secrets-should-not-be-plaintext) — Why plaintext .env files are a prime target for supply-chain attacks, and how dotsecenv keeps developer secrets encrypted at rest with GPG. (31 March 2026) - [DuckDB: The Rising Star in the Big Data Landscape](https://mihaibojin.com/blog/duckdb-rising-star) — Why DuckDB, an in-process SQL OLAP database, is reshaping fast local data analysis, and where it fits in the modern big data stack. (15 January 2024) - [The delicate art of ownership: projects are like eggs — a metaphor](https://mihaibojin.com/blog/the-delicate-art-of-ownership) — A short metaphor for project ownership: getting work done to the finish is like carrying two baskets of eggs — balance the load, ask for help, and not every egg hatches. (26 June 2023) - [Discover DevContainers: Revolutionize Your Development Workflow with Reproducible Environments!](https://mihaibojin.com/blog/devcontainers) — DevContainers let you define your development environment as code with Docker and VS Code. A step-by-step guide to building your own reproducible setup. (9 April 2023) - [Secure Services With Let’s Encrypt SSL/TLS Certificates Using DNS-01 Challenges](https://mihaibojin.com/blog/lets-encrypt-dns-01-in-go) — Issuing and renewing Let’s Encrypt SSL/TLS certificates with the DNS-01 challenge in Go, for services that cannot expose HTTP, using Cloudflare DNS and certmagic. (12 September 2022) - [Google Cloud Keyless Authentication in GitHub Actions](https://mihaibojin.com/blog/gcp-keyless-auth-github-actions) — Authenticate to Google Cloud from GitHub Actions without long-lived service account keys, using OIDC and Workload Identity Federation, in five steps. (2 August 2022) - [Deploy and configure Google Compute Engine VMs with Terraform](https://mihaibojin.com/blog/gce-vms-with-terraform) — A step-by-step Terraform walkthrough for provisioning Google Compute Engine VMs: SSH keys, cloud-init, IPv6, static IPs, and reverse DNS. (30 July 2022) - [Simple scheduled workloads using Google Cloud](https://mihaibojin.com/projects/golang/scheduled-jobs-in-gcp) — A short tutorial on scheduling workloads using Infrastructure-as-Code with GCP, Docker, and Terraform (13 June 2022) - [Balancing best practices when your time is limited](https://mihaibojin.com/projects/golang/best-practices-vs-time) — The key to shipping toy projects is to choose the most impactful best-practices that will save you time and pain in the future. (8 June 2022) - [Build products, skip the non-functional requirements](https://mihaibojin.com/blog/building-products-vs-non-functional-requirements) — I asked myself, am I overengineering my pet projects? Are you!? (17 April 2022) - [Aiming for object-oriented design elegance](https://mihaibojin.com/application-settings/oop-design) — Figuring out a design that is a joy to use in production. (15 March 2022) - [Subscribing to concurrent property updates](https://mihaibojin.com/application-settings/subscribing-to-concurrent-updates) — Dealing with update events while the underlying value is concurrently and repeatedly updated. (26 October 2021) - [Microbenchmarking Java code with JMH](https://mihaibojin.com/application-settings/micro-benchmarking-java-code-with-jmh) — Setting up the JMH Gradle plugin and writing your first micro-benchmark (23 September 2021) - [An update on efficient multi-layered key ownership](https://mihaibojin.com/application-settings/system-design/algorithms-for-effective-key-ownership) — Digging deeper into the algorithms required to establish key ownership and efficiently retrieve values in a concurrent application! (21 September 2021) - [Hosting my site on Vercel](https://mihaibojin.com/personal-site/hosting-on-vercel) — I moved my site from Gatsby Cloud to Vercel. Read the instructions and how to configure a NodeJS version for the build step. (9 September 2021) - [System Design goal: efficient property reads from multiple sources](https://mihaibojin.com/application-settings/system-design/read-key-from-multiple-sources) — Choosing the right component design and data structures for reading and selecting a property's effective value, thread-safe. (6 September 2021) - [Create a new open-source Java project using the Gradle build tool](https://mihaibojin.com/application-settings/starting-an-open-source-java-project-with-gradle) — How to set up a brand new Java project using Gradle (2 September 2021) - [Designing a library for reading layered application settings in Java](https://mihaibojin.com/application-settings/reading-application-settings-in-java) — A series about writing a Java library for layering properties from multiple sources and allowing clients to efficiently receive updates. (29 August 2021) - [Crossposting articles from Gatsby to Medium, Dev.to, and Hashnode](https://mihaibojin.com/personal-site/crossposting-articles-from-gatsby) — Syndicate your content to other sites to increase your audience and engage more people. (21 August 2021) - [Configuring social sharing cards in GatsbyJS](https://mihaibojin.com/personal-site/social-sharing-cards) — Set up social sharing cards for your site to have your pages nicely displayed when shared on social media. (11 August 2021) - [Debugging social sharing cards](https://mihaibojin.com/personal-site/debugging-social-cards) — I figured out why the social sharing cards on my site stopped working and then I fixed the problem. (11 August 2021) - [My personal site (version 1.0)](https://mihaibojin.com/personal-site/v1) — Reflecting on building my personal site from scratch, in my spare time, over the past couple of months. (24 July 2021) - [Setting up path redirects in GatsbyJS](https://mihaibojin.com/personal-site/path-redirects-in-gatsbyjs) — Permanently redirect paths in Gatsby, but also Netlify, by defining rules in a _redirect file. (23 July 2021) - [Search Engine Optimization with GatsbyJS](https://mihaibojin.com/personal-site/seo-on-gatsbyjs) — An introductory tutorial about Seach Engine Optimization (SEO) in Gatsby (1 July 2021) - [Blogging with GatsbyJS](https://mihaibojin.com/personal-site/blog-on-gatsbyjs) — How to blog on GatsbyJS for any audience, using Remark, Prism, and other plugins (29 June 2021) - [Dynamic page generation in GatsbyJS](https://mihaibojin.com/personal-site/dynamic-page-generation-gatsbyjs) — Avoid copy-pasting HTML in favor of using layouts, components, and GraphQL variables! (23 June 2021) - [Building a newsletter with ConvertKit](https://mihaibojin.com/personal-site/newsletter-convertkit) — I am building an email list and starting a newsletter. I chose ConvertKit because it's made by Indie Hackers for... (20 June 2021) - [Privacy-friendly analytics in GatsbyJS](https://mihaibojin.com/personal-site/privacy-friendly-analytics-in-gatsbyjs) — I set up my Gatsby site to only track users who want to be tracked, using a cookie consent banner to ask for their permission... (17 June 2021) - [Poll: what tech do you use to build personal sites in 2021?](https://mihaibojin.com/personal-site/publishing-stack-twitter-poll) — I paid for advertising to see what tech stack people use in 2021. Here are the results... (16 June 2021) - [Great web design as a software engineer with TailwindUI](https://mihaibojin.com/personal-site/great-design-for-developers-with-tailwind-ui) — As a software developer, creating good web design is not one of my core skills. TailwindUI changed all that for me. Read more to find out why... (15 June 2021) - [Building my site with GatsbyJS and TailwindCSS](https://mihaibojin.com/personal-site/gatsbyjs-and-tailwindcss-tech-stack) — Setting up a simple responsive website with Gatsby, Tailwind, and Remark. (14 June 2021) - [Structured Data for the Semantic Web with JSON-LD](https://mihaibojin.com/personal-site/structured-semantic-data-with-json-ld) — How to add semantic data to your web site's articles with JSON for Linking Data (JSON+LD). (13 June 2021) - [A guide to full stack development](https://mihaibojin.com/ic/full-stack-development) — What are all the skils required to excel at full stack development? (10 June 2021) - [The Software Engineering Generalist](https://mihaibojin.com/ic/software-engineering-generalist) — What does it mean to be a generalist and how can you become one? (8 June 2021) - [Why do I write?](https://mihaibojin.com/personal-site/why-do-i-write) — My motivation behind setting up a personal site and writing about software engineering (30 May 2021) - [Building a personal site in 2021](https://mihaibojin.com/personal-site/building-a-personal-site) — Read about my journey to building a personal site, from scratch, in 2021 (29 May 2021) - [Fix your resume, get that dream job!](https://mihaibojin.com/blog/fix-your-resume) — Two common tech-resume mistakes I see when reviewing them — keyword stuffing and listing responsibilities instead of measurable accomplishments — and how to fix both. (22 December 2020) - [What makes a successful engineer?](https://mihaibojin.com/blog/what-makes-a-successful-engineer) — Soft-skills observations from a career in software engineering and management: curiosity, quality, trust, feedback, ownership, communication, mentorship, and more. (30 September 2020) - [Thoughts on Manager READMEs](https://mihaibojin.com/blog/thoughts-on-manager-readmes) — I researched manager READMEs, wrote one for myself, and decided not to publish it. A reflection on self-serving documents versus building real manager-report relationships. (27 September 2020) - [Become a Certified Kubernetes Application Developer (CKAD)](https://mihaibojin.com/blog/ckad-certification) — How I studied for and passed the Certified Kubernetes Application Developer (CKAD) exam — motivation, study plan, practical kubectl skills, and exam-day tips. (13 March 2020) ## Coding puzzles - [Reverse a singly linked list](https://mihaibojin.com/coding-puzzles/linked-list/reverse-singly-linked-list) — Given a reference to the head of a singly linked list, reverse it and return a reference to the head of the reversed list. (27 July 2021) - [Sum of two elements (2sum)](https://mihaibojin.com/coding-puzzles/arrays/sum-of-two-elements) — Given an array of integers and an integer target, return indices of the two numbers such that they add up to the target. (20 June 2021) ## Projects - [dotsecenv](https://dotsecenv.com) — CLI that encrypts environment variables into a git-safe vault (AES-256-GCM + GPG); no cloud, team sharing, shell and Terraform integration. - [release.tools](https://release.tools) — open-source CI/CD toolkit: the releasetools CLI (bash release automation), mutex (advisory-lock GitHub Action), and signed-push (signed, verified commits from CI). ## Links - [All writing](https://mihaibojin.com/blog) - [Coding puzzles](https://mihaibojin.com/coding-puzzles) - [RSS feed](https://mihaibojin.com/rss.xml) - [Medium](https://mihaibojin.medium.com) - [GitHub](https://github.com/MihaiBojin) - [LinkedIn](https://www.linkedin.com/in/mihai-bojin/) - [Newsletter (Substack)](https://mihaibojin.substack.com)