What Happens When You Type a URL and Press Enter
DNS lookups, TCP and TLS handshakes, HTTP requests, servers, and the browser's rendering pipeline. The whole journey of a web page, explained so it finally clicks.
Read →How your team uses branches shapes how fast you ship and how painful merges are. The three common strategies compared, plus commit message conventions and the rebase vs merge question.
Every team using Git ends up with a branching strategy, whether they chose one or not. A good one keeps merges small and releases calm. A bad one produces week-long branches, nightmare merge conflicts and "which branch is production again?" moments.
Here are the three strategies you'll meet most, and how to pick.
Everyone integrates into one main branch (the "trunk") frequently, at least daily. Feature branches, if used at all, live for hours or a day or two.
A simple, popular middle ground:
main is always deployable.main and deploy.git switch -c fix/checkout-rounding
# ...commit work...
git push -u origin fix/checkout-rounding
# open PR -> review -> merge -> deploy
For most web teams and solo developers, GitHub Flow with short-lived branches is the sweet spot.
A more structured model with several long-lived branches: main for releases, develop for integration, plus feature/*, release/* and hotfix/* branches.
If you deploy a web app many times a week, Git Flow usually adds ceremony without benefit.
| Situation | Good fit |
|---|---|
| Solo developer or small team, web app | GitHub Flow |
| Experienced team, strong CI, many deploys per day | Trunk-based |
| Versioned releases, mobile/desktop apps, supporting old versions | Git Flow (or a lighter release-branch variant) |
The single most important rule, whatever you choose: keep branches short-lived. The longer a branch lives, the more it diverges, and the harder the merge.
Consistent names make branch lists readable:
feature/invoice-export
fix/login-redirect-loop
chore/upgrade-dependencies
docs/api-pagination
Include a ticket number if your team uses a tracker: fix/1423-login-redirect-loop.
A good commit message explains why, because the diff already shows what.
Fix rounding error in checkout total
Totals were rounded per line item and then summed, which could differ
from the payment provider's total by a cent. Round once, at the end.
Many teams use Conventional Commits, a lightweight format that tools can read to generate changelogs and version numbers:
feat: add CSV export for invoices
fix: prevent double submission on checkout
docs: document pagination parameters
chore: upgrade test dependencies
Keep commits focused on one logical change. It makes reviews, reverts and git bisect much easier. (Debugging with git bisect.)
Both combine work from two branches; they just record history differently.
main, producing a straight, linear history.A common, sensible approach:
main to stay up to date (git pull --rebase), before it's shared widely.main.If a rebase goes wrong, git rebase --abort and git reflog will get you back. (Undoing Git mistakes.)
Whatever the strategy, protect main:
These settings make it hard for broken code to land by accident. (Code review practices.)
For most web teams, GitHub Flow: a deployable main and short-lived feature branches merged through pull requests. Mature teams with strong CI often move toward trunk-based development.
Git Flow uses several long-lived branches (main, develop, release and hotfix branches) for scheduled releases. GitHub Flow uses only main plus short-lived feature branches, suiting continuous deployment.
Rebase your own unshared branches to keep them current and tidy; merge (or squash-merge) when integrating into shared branches. Never rebase a branch others are using.
DNS lookups, TCP and TLS handshakes, HTTP requests, servers, and the browser's rendering pipeline. The whole journey of a web page, explained so it finally clicks.
Read →There are dozens of HTTP status codes, but about fifteen cover nearly everything. What each one means, when to return it, and the mix-ups (401 vs 403, 301 vs 302) that confuse everyone.
Read →A, AAAA, CNAME, MX, TXT and NS records in plain English, why DNS changes seem slow, and the troubleshooting commands that tell you what is really going on.
Read →