<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/our-approach-to-always-evolving-dev-tools-for-speed-and-clarity-6mbljygdv" -->

---
title: Our approach to always evolving dev tools for speed and...
description: Ngrok's infra team describes the design philosophy behind nd, their internal CLI tool that unifies the software development lifecycle across a polyglot...
canonical: https://daily.dev/posts/our-approach-to-always-evolving-dev-tools-for-speed-and-clarity-6mbljygdv
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Our approach to always evolving dev tools for speed and clarity | daily.dev
og:description: Ngrok's infra team describes the design philosophy behind nd, their internal CLI tool that unifies the software development lifecycle across a polyglot...
og:url: https://daily.dev/posts/our-approach-to-always-evolving-dev-tools-for-speed-and-clarity-6mbljygdv
og:image: https://api.daily.dev/og/posts/6mblJYGDv.png
og:image:alt: Our approach to always evolving dev tools for speed and clarity
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Our approach to always evolving dev tools for speed and clarity

**[ngrok Blog](https://daily.dev/sources/ngrok)** · 10 min read · 0 upvotes · 0 comments

## Summary

Ngrok's infra team describes the design philosophy behind nd, their internal CLI tool that unifies the software development lifecycle across a polyglot monorepo (go, typescript, python, proto, scala). Key principles include exposing underlying commands rather than hiding them, migrating to Bazel for build tooling to make errors more searchable and builds faster via remote caching, adding helper commands like cached last-known-good builds and diagnostic gists, and instrumenting nd with tracing to catch problems proactively. The piece is a story about internal tooling evolution rather than a specific product release.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <https://ngrok.com/blog/evolving-dev-tools-speed-clarity>

## Similar posts on daily.dev

- [Everything but the runtime](https://daily.dev/posts/everything-but-the-runtime-wvlyxlizo) · Bytes by ui.dev · 3 upvotes · 0 comments

---

Tags: [#general-programming](https://daily.dev/tags/general-programming), [#observability](https://daily.dev/tags/observability), [#bazel](https://daily.dev/tags/bazel)

[View this post on daily.dev](https://daily.dev/posts/our-approach-to-always-evolving-dev-tools-for-speed-and-clarity-6mbljygdv)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Our approach to always evolving dev tools for speed and clarity","url":"https://daily.dev/posts/our-approach-to-always-evolving-dev-tools-for-speed-and-clarity-6mbljygdv","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/our-approach-to-always-evolving-dev-tools-for-speed-and-clarity-6mbljygdv"},"datePublished":"2026-08-23T07:21:03.620Z","dateModified":"2026-08-23T07:27:42.593Z","description":"Ngrok's infra team describes the design philosophy behind nd, their internal CLI tool that unifies the software development lifecycle across a polyglot...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/0e6a8907169e829e1b4aa70048bb26d3?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/0e6a8907169e829e1b4aa70048bb26d3?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"ngrok Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"ngrok Blog","logo":"https://media.daily.dev/image/upload/s--718XXxvE--/f_auto,q_auto/v1787469610/logos/ngrok?_a=BAMAMicg0","url":"https://daily.dev/sources/ngrok"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/our-approach-to-always-evolving-dev-tools-for-speed-and-clarity-6mbljygdv","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":0},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"general-programming,observability,bazel","timeRequired":"PT10M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"ngrok Blog","item":"https://daily.dev/sources/ngrok"},{"@type":"ListItem","position":3,"name":"Our approach to always evolving dev tools for speed and clarity"}]}
```

