All posts
Why Your Server Is Slow #5: When the Database Slows Down — Indexes, Locks, Connection Pools
Tracking down why a database that ran fine is getting slower. Covers full scans collapsing the day data growth crosses a threshold, indexes that exist but never get used, lock wait chains rooted in long transactions, telling pool exhaustion from database saturation, and a diagnostic order built on EXPLAIN and the statistics views.
Microsoft Graph in Practice #3: First Calls with the Python SDK — Reading Users and Org Data
Building the Python skeleton for calling Graph: installing msgraph-sdk and azure-identity, implementing both device code (delegated) and client credentials (application) clients, the async pattern, expressing OData queries in the SDK, listing users and profiles, and token-level auth debugging.
Migrating EC2 to Graviton — Real Savings and a Migration Checklist
What moving x86 instances to Graviton (arm64) actually saves, and the procedure for getting there: the generation landscape (Graviton4 mainstream, Graviton5 GA), which workloads move easily and where it gets stuck, multi-architecture image builds, canary cutover, and extending to RDS and Lambda.
Practical Git Workflows #5: Running Pull Requests — Review Size, Commit Messages, and Draft PRs
Criteria for splitting PRs into reviewable sizes, the Conventional Commits convention, draft PRs and self-review, PR templates and branch protection. Running Pull Requests from the operations point of view.
Why Your Server Is Slow #4: Plenty of Bandwidth, Still Slow — Latency, RTT, Retransmissions
Tracking down why the network feels slow while the link sits mostly idle. Covers how RTT times round-trip count sets perceived speed, the handshake cost of TCP and TLS, BDP and window limits, checking packet loss and retransmissions, and connection reuse.
AWS Services and Settings That Quietly Leak Money — a Standing Checklist
The waste that raises your AWS baseline without ever making a spike: leftover gp2 volumes, public IPv4 addresses, NAT Gateway by design, logs retained forever, old instance generations, abandoned load balancers, S3 storage classes, and dev environments running around the clock — with how to check each one.
Microsoft Graph in Practice #2: App Registration and Auth — Entra ID, Delegated vs. Application Permissions
The whole structure of Graph authentication in working order: the Entra ID app registration procedure, the delegated/application distinction that shapes the entire series, admin consent, client secrets and certificates, least privilege, and secret management — the most important gateway in Graph.
Practical Git Workflows #4: Resolving Conflicts — Structure, mergetool, and rerere
Understand conflicts through the base, ours, and theirs structure and handle them with tools. Why ours and theirs look flipped during a rebase, zdiff3 markers, the VS Code merge editor, and rerere so you never solve the same conflict twice.
Why Your Server Is Slow #3: Slow Despite an SSD — Write Amplification, fsync, Queue Depth
Tracking down why storage is the bottleneck even on an SSD. Covers the fine print behind spec-sheet IOPS, the cost of durable writes through fsync, SLC cache exhaustion and write amplification, the physical limits of queue depth 1, and the IOPS ceilings of cloud volumes.
Microsoft Graph in Practice #1: What Graph Is — One API for All of Microsoft 365
What Microsoft Graph is and why it's the key tool for workplace automation: the structure that opens mail, calendar, Teams, files, and the org directory through one endpoint, the v1.0/beta split, the big picture of the permission model, and making your first call with zero code in Graph Explorer.
Practical Git Workflows #3: Interactive Rebase — Cleaning Up Commits with squash and fixup
Interactive rebase reshapes commits into readable units before you open a PR. We cover the six todo-list commands, the fixup and autosquash workflow, and pushing a rewritten branch safely with force-with-lease.
When Your AWS Bill Suddenly Jumps — the 10 Most Common Causes
A field guide for the month your AWS bill doubles: the order for finding the culprit, and the ten causes that come up most in practice — NAT Gateway data processing, CloudWatch Logs ingestion, snapshot accumulation, data transfer, expiring RIs and Savings Plans — each with how to confirm it and what to do.