Coding Dynasty (@codingXdynasty) header
Coding Dynasty (@codingXdynasty) profile picture

I break down Dev & self-hosting fixes for indie devs. Node, Python, Docker, VPS. Daily Tech tips.

Joined June 2023
Photo by Coding Dynasty (@codingXdynasty)Photo by Coding Dynasty (@codingXdynasty)Photo by Coding Dynasty (@codingXdynasty)Photo by Coding Dynasty (@codingXdynasty)Photo by Coding Dynasty (@codingXdynasty)Photo by Coding Dynasty (@codingXdynasty)Photo by Coding Dynasty (@codingXdynasty)Photo by Coding Dynasty (@codingXdynasty)Photo by Coding Dynasty (@codingXdynasty)Photo by Coding Dynasty (@codingXdynasty)
Into full-stack development, cybersecurity, DevOps, cloud, networking, or AI? Let’s build a community where we share projects, exchange ideas, and learn from each other. Reply with what you’re building or learning, and connect with the community.
14
6
57
1,982
An agent can solve a small formatting task by adding a whole dependency. Before accepting it, compare the code saved with the maintenance, security, and bundle cost introduced. What makes a new dependency worth keeping in your project?
1
A staging hostname can still call production APIs or third-party services. Before an authorized security test, map those dependencies and agree on exclusions, rate limits, and stop conditions. 'Staging' describes an environment, not a permission boundary.
2
Linux reports 'No space left on device,' but the disk still has free bytes. Check inode usage too: df -i. A filesystem can run out of inodes when it holds many tiny files. Monitor both file capacity and byte capacity, especially where caches create lots of small files.
11
Renaming a database column can break the app instances still running the old code during a rollout. Stage the change: add the new field, migrate data and readers/writers, then remove the old field only after nothing depends on it. Test the transition, not just the final schema.
7
Moving uploads to object storage isn't just swapping a disk path for a URL. Check how your app handles updates, access control, and temporary download links. Treat storage as an explicit interface so local-filesystem assumptions don't leak through the app.
1
44
A manual production fix can vanish at the next deployment if it never reaches your configuration source. After stabilizing the service, record the change and verify a fresh deployment reproduces the fix. How do you keep emergency changes from becoming hidden state?
9
A known-good commit and a reliable failing test turn Git history into a debugging tool. Use git bisect to narrow down the first bad commit instead of reading every diff. If the test is flaky, fix the signal first—or the search can point at the wrong change.
15
Removing a vulnerable package from package.json doesn't prove it's gone. Another dependency may still pull it in. Check the resolved dependency tree and lockfile, then verify the shipped artifact—not just the manifest.
5
3
83
Low free RAM on Linux isn't automatically a memory leak. The kernel uses otherwise idle memory for caches. Check available memory, swap activity, and process growth over time before treating a full-looking memory chart as an emergency.
15
Adding async to a Node.js function doesn't move CPU-heavy work off the event loop. A large synchronous calculation can still delay unrelated requests. Profile the hot path, then consider worker threads or a separate job worker when the computation needs isolation.
1
24
Adding a second app instance can reveal state you forgot was local: sessions, uploaded files, or background-job progress. Before scaling out, decide where each kind of state lives and how another instance recovers it. More replicas don't automatically make an app stateless.
3
86
A request crosses three services, but each log uses a different ID. Pass a correlation ID through the whole path so you can follow one failure across boundaries. Log volume isn't the same as a usable trail. What's hardest to trace in your stack?
2
3
77
An AI-generated example may target a different library version than your project uses. Check the installed version before copying an API call, and read that version's docs. A plausible method name isn't evidence it exists in your dependency tree.
1
23
A password-reset flow isn't tested just because the happy path works. Check expired tokens, reused links, and tokens submitted for the wrong account. A reset token should be short-lived, single-use, and bound to its intended user.
14
A large download and an interactive SSH session stress different parts of a network. Bandwidth limits how much data you can move per second; latency affects each round trip. Measure both before treating every slow connection as a bandwidth problem.
1
59
A small result set doesn't mean a cheap query. Inspect the execution plan and rows scanned before adding an index. Each index can help reads, but it also costs storage and work on writes. Optimize for the queries your app actually runs.
12
A queue absorbs a traffic spike; it doesn't create processing capacity. Track the oldest job's age, not just queue depth. A request marked 'accepted' can still miss the user's deadline. How long can a job wait before it's effectively failed?
4
4
156
A green rerun doesn't explain the red build. For flaky CI, keep the original logs, random seed, and test order. Rerunning can unblock a branch, but preserving the failing conditions gives you something to reproduce and fix.
11
Logs preserve what happened; a debugger lets you inspect what's happening. For a reproducible local bug, a conditional breakpoint can be more useful than another dozen print statements. When do you reach for a debugger instead of adding logs?
11
Renaming a file to .jpg doesn't make it an image. For uploads, don't trust the filename or the client's Content-Type header. Validate the content, limit its size, and store it where it cannot execute as server code.
18