<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Suraj Upadhyay</title>
    <description>The latest articles on DEV Community by Suraj Upadhyay (@suraj_at_esence).</description>
    <link>https://dev.to/suraj_at_esence</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3758776%2F0b3096f9-4563-4738-a9e6-527519002a96.jpg</url>
      <title>DEV Community: Suraj Upadhyay</title>
      <link>https://dev.to/suraj_at_esence</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/suraj_at_esence"/>
    <language>en</language>
    <item>
      <title>The Zero-Drift Ideal Monorepo Setup for Startups</title>
      <dc:creator>Suraj Upadhyay</dc:creator>
      <pubDate>Sun, 14 Jun 2026 05:15:25 +0000</pubDate>
      <link>https://dev.to/suraj_at_esence/the-zero-drift-ideal-monorepo-setup-for-startups-3l2g</link>
      <guid>https://dev.to/suraj_at_esence/the-zero-drift-ideal-monorepo-setup-for-startups-3l2g</guid>
      <description>&lt;h2&gt;
  
  
  An Overhead-Free Monorepo Blueprint for High-Velocity Teams
&lt;/h2&gt;

&lt;p&gt;The first design decision for any serious tech startup is to decide how their&lt;br&gt;
codebase is structured, and building a monorepo setup often proves to be&lt;br&gt;
crucial for avoiding cross-project dependency maintenance that can stretch &lt;br&gt;
a small-to-mid sized engineering team which most startups cannot afford in&lt;br&gt;
pre-venture or revenue stages.&lt;/p&gt;
&lt;h2&gt;
  
  
  What does an "ideal" monorepo look like?
&lt;/h2&gt;

&lt;p&gt;While there are multiple ways a developer or a company can structure their&lt;br&gt;
monorepos and it's true that there isn't an ideal setup that fits all case&lt;br&gt;
scenarios, there are universal architectural truths that separate a clean&lt;br&gt;
engineering workspace from a chaotic one&lt;/p&gt;

&lt;p&gt;There are some salient features that every staff engineer or software&lt;br&gt;
architect should aim to achieve with their monorepos:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Reproducible environment&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Domain driven development&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Module and library re-use&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Trunk-based development&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Central build cache registry&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Simpler deployment pipelines&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Package security, visibility and role-based code access&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Most successful monorepos satisfy most or all of the above requirements.&lt;/p&gt;

&lt;p&gt;I have worked with a couple of startups and have seen them all struggling with&lt;br&gt;
getting most of the above requirements right. &lt;br&gt; Even established companies with&lt;br&gt;
100s of engineers, sometimes have to spend hundreds of thousands of dollars,&lt;br&gt;
if not millions, on platform engineers just to manage their codebase and build&lt;br&gt;
pipelines.&lt;/p&gt;

&lt;p&gt;Now, Let's go through each one of the "ideal monorepo" requirements and create&lt;br&gt;
a best in class workspace for the engineering team.&lt;/p&gt;
&lt;h2&gt;
  
  
  Creating a Reproducible Environment
&lt;/h2&gt;

&lt;p&gt;If you are a founder or someone from the tech leadership, there's a possiblity&lt;br&gt;
that you hear this phrase a couple of times in a week - "it works on my machine,&lt;br&gt;
I think something is wrong with the deployment". And most of the times, the&lt;br&gt;
deployment turns out be just fine and it's the developer's local environment&lt;br&gt;
configuration that's been acting up.&lt;/p&gt;

&lt;p&gt;Also, there's a huge possiblity that every new engineer you onboard takes at&lt;br&gt;
least 3 days to settle in and get comfortable with the codebase and all the&lt;br&gt;
tools required to setup a normal working local environment.&lt;/p&gt;

&lt;p&gt;What I have just described above is a classical design flaw from the early days&lt;br&gt;
of a codebase, whether a monorepo or a polyrepo.&lt;/p&gt;

&lt;p&gt;The medicinal anti-dote to this exact most common problem in tech companies is using&lt;br&gt;
sandboxing tools that isolate the development environment and levels down the&lt;br&gt;
playing field for all the engineers.&lt;/p&gt;

&lt;p&gt;We are going to take a look at one of these tools today, that can easify your&lt;br&gt;
life managing a tech team or running a tech company.&lt;/p&gt;
&lt;h3&gt;
  
  
  Devbox - The ideal sandbox for your dev environment
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://www.jetify.com/devbox" rel="noopener noreferrer"&gt;Devbox&lt;/a&gt; is an open-source, Nix-based package&lt;br&gt;
manager that creates isolated, reproducible development environments without the&lt;br&gt;
resource overhead of local Docker containers. And it is just the right tool to achieve&lt;br&gt;
environment isolation that I have personally used in many of my projects.&lt;/p&gt;

&lt;p&gt;It's not as heavy or expensive as managing docker configurations and forcing&lt;br&gt;
developers to write code in docker native IDEs.&lt;/p&gt;

&lt;p&gt;Let's start with the first steps of our desired setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Install devbox&lt;/span&gt;
curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://get.jetify.com/devbox | bash

&lt;span class="c"&gt;# Create directory for your codebase&lt;/span&gt;
&lt;span class="nb"&gt;mkdir &lt;/span&gt;monorepo
&lt;span class="nb"&gt;cd &lt;/span&gt;monorepo

&lt;span class="c"&gt;# Initialise the monorepo with devbox&lt;/span&gt;
devbox init
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, let's take a step back and ponder over our requirements from this virtual&lt;br&gt;
environment. Most of the modern mid-level complexity full stack projects need&lt;br&gt;
at least these pieces of tools to work correctly:&lt;/p&gt;

&lt;p&gt;Essential Core Utilities:&lt;br&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Git (Version Control)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Frontend Engineering Layers:&lt;br&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Node.js (V8 Application Runtimes)
&lt;/li&gt;
&lt;li&gt;Bun (High-Performance Local Testing &amp;amp; Package Management)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Systems &amp;amp; Data Processing Services:&lt;br&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go (Highly Scalable Backend Web Servers)
&lt;/li&gt;
&lt;li&gt;Python (Machine Learning Infrastructure &amp;amp; Automation Pipelines)&lt;/li&gt;
&lt;li&gt;CMake/Make (Build tool for C/C++ used for high performance)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The list of the above tools is strictly my own choice and you can chose to go&lt;br&gt;
with your own vibe of toolsets, that you want to be written on the stone for all&lt;br&gt;
your team mates.&lt;/p&gt;

&lt;p&gt;Let's install all of these and peg them against a version number to lock in the&lt;br&gt;
tool of choice for everyone.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Discover the versions of tools with&lt;/span&gt;
devbox search git &lt;span class="nt"&gt;--show-all&lt;/span&gt; &lt;span class="c"&gt;# This gives a list of all available git versions&lt;/span&gt;

&lt;span class="c"&gt;# Now add the desired version of the tool to your local environment&lt;/span&gt;
devbox add git@latest

devbox add node@latest
devbox add bun@latest

devbox add python@latest
devbox add go@latest

&lt;span class="c"&gt;# Add any other tool(s) that your team needs&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, the last step is to officially enter into the virtual environment that we have&lt;br&gt;
created.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Enter into the devbox environment&lt;/span&gt;
monorepo &lt;span class="nv"&gt;$ &lt;/span&gt;devbox shell

&lt;span class="c"&gt;# Just when you execute the above command, your terminal prompt becomes this&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;devbox&lt;span class="o"&gt;)&lt;/span&gt; monorepo &lt;span class="nv"&gt;$ &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now, whenever the new intern asks how he should pull the project and start the&lt;br&gt;
contributing you just tell him to:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone &amp;lt;your-repository-location&amp;gt;
&lt;span class="nb"&gt;cd&lt;/span&gt; &amp;lt;your-repository&amp;gt;

&lt;span class="c"&gt;# And...&lt;/span&gt;
devbox shell

&lt;span class="c"&gt;# 🤯, he is all setup!!&lt;/span&gt;
&lt;span class="c"&gt;# Now the only thing left is to execute the install scripts&lt;/span&gt;
&lt;span class="c"&gt;# and actually run the projects.&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And it just took him 2 minutes to start with the project without the weird&lt;br&gt;
environment issues and it didn't matter if he is on Macbook or Linux or&lt;br&gt;
Windows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Go Task - A central registry for all commands in your project
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://taskfile.dev/" rel="noopener noreferrer"&gt;Go Task&lt;/a&gt; is an open source utility that can map simple&lt;br&gt;
words with complex commands, so that the junior devs never have to ping you in&lt;br&gt;
the middle of the night just to figure out the command that they wrote had a&lt;br&gt;
typo in it.&lt;/p&gt;

&lt;p&gt;You can read the full article on my blog - &lt;a href="https://esence.io/blogs/ideal-startup-monorepo-local-workspace" rel="noopener noreferrer"&gt;Engineering Insights at Esence.io&lt;/a&gt;&lt;/p&gt;

</description>
      <category>monorepo</category>
      <category>devex</category>
      <category>devbox</category>
      <category>nx</category>
    </item>
  </channel>
</rss>
