Things I'd like to share

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.

February 15, 2025

Redis is Fast!

I’ve been developing a WebSocket service for a client—an advanced mobile chat application that lets users send messages to each other. At one point, we realized we needed to queue messages whenever a user’s app was running in the background. Initially, we stored these messages in a MySQL database, but soon found it wasn’t the best approach.

That’s when I decided to use Redis for background message storage. As a result, our read times improved by at least 10x. Redis also comes with plenty of useful features like message expiration, priority, and batching.

I’m really happy with this solution! It wasn’t easy to implement, but it was definitely worth it.


#Redis
Redis is Fast

February 1, 2025

Over-the-Air (OTA) Updates with Expo

The Magic of Expo OTA Updates

Today, I discovered that I can use expo-updates to release over-the-air (OTA) updates for both stores, and it’s been an absolute game-changer for my workflow. Instead of waiting days for App Store or Google Play approvals (which can be a real pain), I can now fix small bugs and push those changes live almost instantly.

This has boosted my confidence tremendously: no more holding my breath over tiny updates or minor fixes that used to get stuck in a frustrating backlog. With expo-updates, the turnaround time for addressing issues has dropped from days to mere minutes—allowing me to maintain a smoother, more efficient release cycle.

#Expo#React Native
Setting up OTA with Expo

January 22, 2025

Optimistic Update Feels So Good

🚀

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:

#NodeJS#WebSocket

January 15, 2025

Became Open Source Maintainer

📦

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

#React Native#Reanimated

January 12, 2025

Animated Material Top Tab

🎉

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:

  • React Navigation Material Top Tab Navigator
  • Reanimated v3
  • Context API

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!

#React Native#React Navigation#Reanimated

January 9, 2025

Package.json Discovery

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!

  • Caret ^: Allows updates to minor and patch versions automatically
    (e.g., ^3.10.1 covers any version >=3.10.1 but <4.0.0).
  • Tilde ~: Allows updates to patch versions only
    (e.g., ~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. 😑

#ReactJS

December 24, 2024

iOS and Android Builds on GitHub Actions

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.

#Github#iOS#Android
GitHub Actions
GitHub Mail

December 21, 2024

First Node.js Service

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:

  • helmet, express-rate-limit, winston, datadog, health route, pm2

On a personal note, I also recommend using:

  • typescript, eslint, prettier, husky + commitlint
#NodeJS#Typescript#Datadog
Terminal
Datadog
Health Check

December 2, 2024

Long Live Datadog!

🐶

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!

#Datadog#NodeJS#React Native
NodeJS Logging
Datadog RUM Dashboard
Datadog RUM Sessions