A collection of experiences, learnings, and "aha!" moments from my software engineering life. I share my discoveries, struggles, and insights that might help fellow developers.
I've been developing a Node.js WebSocket service for the mobile app I've been working on for almost a year now. Sometimes (though very rarely), it can take 2–3 seconds to deliver a message. I've always wanted to add optimistic message updates for a better user experience, but never quite found the time—until now. I finally implemented it, and here's a quick look at how it turned out:
I just released an npm package that uses Reanimated to deliver super smooth performance with no issues. Here's the story behind it:
I was using a package called burnt, but it didn't allow adding toast messages with more than one line. When I asked the maintainer to add that feature, he just brushed it off and never got around to it. So I said, "Fuck it, I'll create my own and actually maintain it." And here it is!
So, I created my own package that not only includes the functionality I needed but also ensures ongoing maintenance and support. And here it is!
Check it out on NPM: smooth-push package
I've always loved how X (formerly Twitter) animates the Tab bar on the Feeds screen—when you scroll down, it slides up, and vice versa. It feels so smooth and natural!
I recently set out to recreate this animation, and while it's not a perfect 1:1, it's pretty darn close. To pull it off, I used:
I'll be honest: it took a solid four hours of staring at my screen, tweaking code, and trying not to tear my hair out. But in the end, I'm really happy with how it turned out!
I finally learned what the ~
(tilde) and ^
(caret) symbols really do in a package.json
file. My mobile app started crashing after a TestFlight update, and it took me three hours to figure out that it wasn't my code—it was those evil version symbols!
^
: Allows updates to minor and patch versions automatically^3.10.1
covers any version >=3.10.1
but <4.0.0
).~
: Allows updates to patch versions only~3.10.1
covers any version >=3.10.1
but <3.11.0
).What I learned??: Don't use NPM packages unless you have absolutely no other option. 😑
I've successfully migrated the entire build and deployment process for both iOS and Android apps from my local environment to GitHub Actions. It's a major win, given how resource-intensive iOS builds can be!
FYI-1: GitHub offers 2,000 free build minutes per month.
FYI-2: I realized something was amiss. GitHub counts macOS usage at 10x the normal rate, and since I have to use macOS for iOS builds, this uses up my free minutes much faster.
I've finally finished my Node.js app, and it feels both stable and completely under my control. This is my first backend service using WebSockets, and it will soon go into production to handle user-to-user messaging.
Below is a list of packages I believe every Node.js application should include for logging, error handling, and overall stability:
On a personal note, I also recommend using:
Datadog has become one of my absolute must-have tools for logging in every project I work on. Once I started out as a software developer, I realized pretty quickly that building an app without logging is like driving blindfolded—you have no idea what's going on under the hood.
Today, I've successfully integrated Datadog into all of my React, React Native, Node.js, and Debian-based applications. Now I'm finally in control—and it feels fantastic!
Pro Tip: Datadog is on a whole other level. I still can't believe how much they let you log even on their free tier. Seriously, check them out; you won't regret it!