How GitHub Copilot Changed (and Did Not Change) How Engineers Code
GitHub Copilot has been in widespread use for three years. The productivity claims were partly right. The concerns about code quality were partly right. Here is the real data.
GitHub Copilot has been in widespread use for three years. The productivity claims were partly right. The concerns about code quality were partly right. Here is the real data.
BGP - Border Gateway Protocol - is the routing protocol that makes the internet work. Every time a request leaves your browser and traverses the internet to a server, BGP is responsible for determining the path. Most developers treat networking as a black box below their abstraction level. This is understandable but wrong. BGP failures cause major internet outages, including ones that affect your services. Understanding BGP makes you better at building resilient systems and gives you a mental model for diagnosing problems that would otherwise be inexplicable. ...
React Server Components (RSC) shipped as stable in React 19 and became the default in Next.js 13+. Millions of applications run on them. Most developers who use them do not fully understand the rendering model. This is not an abstract concern. Not understanding RSC leads to performance problems, bugs with client-side state, and incorrect mental models that make debugging difficult. The Old Model First To understand RSC, you need to understand what it replaced and why. ...
Open source projects move in cycles. A few emerge each year that genuinely change how developers work. Most improvements are incremental. The ones worth paying attention to are the ones where adoption curves are steep and the problem they solve is one developers recognize immediately. Here are the projects that defined 2025 and are gaining rather than losing momentum going into 2026. uv - Python Package Management The most significant developer tooling release in the Python ecosystem in years. uv, built by Astral (the team behind the Ruff linter), is a Python package manager and project manager written in Rust. ...
A load balancer with default settings works until it does not. Most teams set up a load balancer, see traffic distribute, and move on. The misconfigurations hide until you have a deployment, a spike, or a backend failure - and then they cause cascading problems that are hard to diagnose under pressure. Here are the settings that cause the most production incidents. Health Check Configuration The default health check in most load balancers is too lenient. It checks a path (usually / or /health), waits too long for a response, and marks a backend unhealthy only after multiple consecutive failures. ...
A good API gets out of the developer’s way. They read the docs once, write some code, and it works. A bad API makes them read the docs three times, post on Stack Overflow, and eventually write a wrapper just to hide your design decisions from their own codebase. Most bad APIs are bad in the same specific ways. Inconsistent Naming Kills Predictability Pick a convention and apply it everywhere. If you use camelCase in one endpoint and snake_case in another, every developer who touches your API has to check every field name instead of predicting it. ...
Coding assistants have been around since GitHub Copilot launched in 2021. For the first few years, the category was defined by autocomplete - predict the next few lines, save some typing. Useful, but fundamentally a productivity accelerator for the same work developers were already doing. Claude 3.7 Sonnet shifted the category. Not through better autocomplete, but through a different capability: the ability to reason carefully about code before producing it. ...
Time-series data has a reputation for requiring specialized databases. InfluxDB, TimescaleDB (marketed as separate from Postgres), Prometheus with remote storage, QuestDB - the assumption is that regular relational databases cannot handle the ingestion rates and query patterns that time-series data requires. That assumption is partially wrong. PostgreSQL with the right extensions handles serious time-series workloads that would surprise most developers who dismissed it for this use case. Why Time-Series Is Hard for Standard Databases Time-series workloads have specific properties that stress traditional database designs: ...
Every developer who has tried Rust has a borrow checker story. The compiler refused to compile code that seemed obviously correct. The error messages were helpful but the concept was alien. Ownership, borrowing, lifetimes - a mental model that does not map to any other language. Most people who push through this have the same experience: around three to six months in, the model clicks. After that, you start to see why the borrow checker was right and your code was wrong. And then you start to see what it enables. ...
Single Page Applications became the default architecture for web applications around 2013-2015. React, Angular, Vue - the assumption was that if you wanted to build a serious web application, you built a SPA with a JSON API and a JavaScript frontend that managed all UI state. HTMX, a small JavaScript library, challenges this assumption not by adding more JavaScript but by removing the need for most of it. The argument is worth taking seriously. ...
The rent-vs-buy debate in Mumbai is not as obvious as your parents think. Here is the actual math on which option builds more wealth over 20 years.
Node.js has run server-side JavaScript since 2009. It is the backbone of a significant fraction of the web. Its ecosystem - npm with its millions of packages - is one of the largest software ecosystems in history. It is also showing its age. Node’s design decisions from 2009 - callback-based async, CommonJS modules, a permissive security model, the npm module resolution algorithm - were reasonable choices at the time and are now accumulated technical debt. ...
Datadog’s pricing page has a special quality: it looks reasonable until you actually calculate what you will pay. $15 per host per month for infrastructure metrics. $1.27 per million log events ingested, plus retention costs. APM at $31 per host. Add custom metrics, synthetics, RUM, and incidents - and a mid-sized engineering organization pays $30,000-100,000 per month. That is the number that starts the conversation about self-hosted observability. What Datadog Does Well Before the case for switching, the honest case for Datadog: ...
CSS frameworks have come and gone. Blueprint CSS, 960 Grid System, Foundation, Bootstrap - each had a moment and then receded. Bootstrap still has enormous install counts but has not defined how new projects are built for years. Tailwind CSS is different. It is not receding. Every year since 2020, its adoption has increased. The 2024 State of CSS survey showed it used by 78% of respondents, with satisfaction scores that do not typically come from dominant tools. Developers do not just use Tailwind; they prefer it. ...
MongoDB’s flexible schema is its greatest strength and its most dangerous feature. You can start building without thinking about data modeling, and it will work. Then at some point - usually when your collection crosses a few million documents - the decisions you made early come due. The anti-patterns that cause the most pain at scale are not subtle. They are patterns that are actively encouraged by MongoDB’s flexibility, but that have serious performance and operational consequences when data volume grows. ...
If you are 28 and salaried, you already have EPF running in the background whether you chose it or not. The question is whether you should also open an NPS account - or whether EPF alone is enough to retire comfortably. The short answer: both, for different reasons. Here is the longer answer. What Each Account Actually Does EPF (Employees’ Provident Fund) is mandatory for employees earning below Rs. 15,000 basic salary per month, and voluntary above that. You contribute 12% of basic salary, your employer matches 12% (of which 8.33% goes to EPS pension, rest to EPF), and the government sets the interest rate each year. Current rate: 8.25% for FY2024-25. ...
Python packaging has been “getting better” for fifteen years. There have been real improvements: pyproject.toml replaced setup.py, PEP 518 gave us build system declarations, pip gained dependency resolution. The community is clearly working on it. And yet if you ask a developer coming from Node.js, Rust, or Go to set up a Python project, they will encounter a tooling landscape that requires a tour guide. The problems are not fully solved. Some are structural. ...
Before AWS Bedrock, enterprise AI adoption had a predictable failure mode. Engineering teams wanted to use LLMs. Security teams wanted data to stay within the corporate cloud perimeter. Legal teams wanted clarity on data retention and model training. Procurement teams wanted contracts with specific SLAs and liability terms. The gap between “we could use GPT-4 for this” and “we have approved it for production use in a regulated environment” was typically 6-18 months of procurement and security review. ...
Go’s concurrency model is genuinely elegant. Goroutines are cheap, channels provide safe communication, and the runtime handles scheduling transparently. The language makes concurrent code look simple. That simplicity is a trap. The ease of launching goroutines is inversely proportional to the ease of managing them correctly. The bugs you write with goroutines - goroutine leaks, race conditions, deadlocks - are among the hardest bugs in any language to debug. Here are the patterns developers get wrong most often. ...
A year ago, the conventional wisdom was that open source LLMs were 12-18 months behind frontier closed source models. The argument was structural: OpenAI, Anthropic, and Google had compute budgets, proprietary data, and research talent that academic labs and independent efforts could not match. That argument has eroded significantly. Not because the resource gap disappeared - it did not - but because the techniques that produce frontier models have been published, replicated, and improved upon faster than anyone predicted. ...