Profile Picture

Hey, I'm Nafis đź‘‹

Self-taught product engineer indie hacking with growth engineering finesse.

I'm an autodidact product engineer, serial indie-hacker and entrepreneur-in-progress. Over the last 7+ years, I've lead engineering at the largest influencer marketing platform (Creable ), scaled a $250M+ GMV pharma marketplace (Pipelinepharma ) and built several SaaS products of my own.

Apple Park in Cupertino, California
Travels
Hamad International Airport in Doha, Qatar
Gym
Devices
Reactathon

When I was in high school, I was frustrated with the boring school curriculum. I wanted to tackle challenges and build something useful. That's when I got my hands on my dad's old laptop.


I started learning to code because the idea of creating things people found useful was fascinating, and I've been building things ever since. Started as a freelance web dev, building sites for local businesses. Then moved on to building web apps, worked at several agencies, and eventually started building my own SaaS products.


Over the years, I've joined numerous startups, became the founding engineer at a few, and led engineering teams at others. I've been fortunate enough to collaborate with some truly remarkable individuals along the way.


✍️ Writings

Every once in a while, I write about my journey on this site. It's more like a personal journal - sometimes random, sometimes technical, sometimes philosophical - but always honest. Here's some latest ones:

Bun's the Word: The New Kid on the JavaScript Block

Bun's the Word: The New Kid on the JavaScript Block So, you've heard of Node.js and Dino, right? Well, shove over, old-timers, 'cause there's a new kid in town, and its name is Bun. Yeah, you heard that right. Bun. Like the thing you slap your burger in. But trust me, this ain't your average bun; it's more like the brioche of the JavaScript world. ## What's Cooking with Bun? Now, Bun's out here flexing, claiming it's faster than Usain Bolt on a caffeine rush. Okay, maybe not in those exact words, but you get the gist. It's supposedly leaving Node.js and Dino in the dust. And while I'm all for a bit of healthy competition, I've been around the block enough times to know to take these claims with a grain of salt... or maybe a whole salt shaker. But hey, speed isn't the only trick Bun's got up its sleeve. This cheeky runtime's packed with all sorts of goodies. Think of it as the Swiss Army knife of JavaScript runtimes. It's got a built-in bundler, supports TypeScript, and even gives a nod to JSX files. It's like the tech version of a pub's all-you-can-eat buffet. ## Pouring Out My Two Cents First off, a toast to the brains behind Bun. Crafting a new runtime ain't a walk in the park. It's more like a marathon... uphill... in the rain. Innovation's the Name of the Game. In the ever-evolving tech landscape, it's innovate or get left behind. Bun's entrance is a testament to that. But remember, with great power (or in this case, speed) comes great responsibility. As tempting as it is to jump on the Bun bandwagon, let's not get too hasty. I mean, would you trade in your trusty old car for a shiny new one without giving it a test drive first? Those benchmarks, though! Impressive, sure. But do they hold up in the real world? Or are they just showing off their best dance moves while hiding a few missteps? ## Wrapping It Up (Bun Pun Intended) So, there you have it, folks. Bun's making waves, and it's got everyone talking. But as with any new tech toy, it's a mix of excitement, skepticism, and a whole lot of curiosity. Will Bun be the next big thing, or just a flash in the pan? Only time will tell. In the meantime, let's keep our ears to the ground, our minds open, and our pints full. Cheers to the wild, wacky world of tech!

TypeScript, Turbo, and Tantrums

So, DHH, the creator of Ruby on Rails, just dropped a bombshell: Turbo 8 is bidding adieu to TypeScript. And boy, did that set the Twitterverse on fire! ## DHH's Take on TypeScript First off, hats off to DHH for speaking his mind. The man's got a point. TypeScript, for all its bells and whistles, can be a right pain in the backside. Don't get me wrong, I see the appeal. But let's be real, how many times have you opened a codebase only to be greeted by a sea of `:any`? Disappointing, to say the least. ## The Good, the Bad, and the TypeScript I'm not trashing TypeScript, it's got its place, and I use it in _almost_ all my prod applications, especially in some beefy ones where type safety can be a lifesaver. But let's not kid ourselves. TypeScript isn't the silver bullet solution to all our JavaScript woes. And honestly, I'm kinda stoked about the idea of JavaScript adding its own types in the new spec. ## Twitter Wars? But what really grinds my gears is how heated these "debates" get. I mean, come on! We're not debating the fate of the universe here. Seeing the TypeScript faithful go all medieval on DHH's decision was like watching a bar brawl over the last packet of peanuts. It's just...nuts! We've all got our preferences. Some of us swear by Vim, while others would die on the VS Code hill. Variety is the spice of life, after all. But let's remember to keep the discourse civil. Passion is great, but the drama? We can do without that. ## Wrapping Up In the grand scheme of things, whether Turbo 8 uses TypeScript or not isn't going to change the world. But how we react and engage with each other just might. Cheers!

How to Hold Your Team Accountable

When diving into the intricacies of leadership and management, one quickly realizes that directing isn't about waving your hands and issuing decrees. At its core, leadership thrives on cultivating a culture of accountability. Yet, why do so many leaders grapple with this? “I assigned the project, but it’s still unfinished.” “My team seems disengaged.” “They wait for my direction instead of taking the initiative.” Can you relate? When I first embarked on leadership, my instinct was to map out everything. But this led to micro-management, stifling innovation and responsibility. My team became passengers, and I, unintentionally, took the driver’s seat. ## The Accountability Spectrum Accountability is often mistaken for blame. However, in its essence, it’s about ownership and understanding. It’s the discourse between “What’s the status?” and “Here’s the update.” Consider the "Accountability Spectrum", inspired by Jonathan Raymond's insights: 1. **The Observation**: A casual comment on a noticeable behavior, a gentle nudge. “I observed [specific behavior]. Is everything on track?” 2. **The Dialogue**: A deeper conversation, identifying patterns. “We’ve discussed [specific behaviors] before. What seems to be the recurring theme?” 3. **The Discussion**: An urgent conversation, highlighting the weight of the matter. “Your actions are affecting the team. Let's devise a strategy together.” 4. **The Line**: Setting clear boundaries and repercussions. “If these behaviors persist, [specific consequences] will follow.” 5. **The Ultimatum**: The last-resort conversation. “This is critical. Let’s review the consequences.” While these stages present a continuum, their application isn't always linear. The situation dictates the approach. Sometimes, a mere Observation suffices; at other times, you might need to delve into The Discussion immediately. ## Crafting a Culture of Accountability _Pose Open-ended Queries_: Empower with questions rather than directives. “What strategies do you have in mind?” “How can we address this together?” _Eliminate Excuses_: Differentiate between justifications and reasons. Promote responsibility, not evasion. _Empathize, Don’t Solve_: Step back and let them take the lead. Instead of “Here’s what you should do”, try “How do you plan to address it?” _Disagree yet Commit_: Sometimes, let them steer. They might surprise you with a path you hadn't envisioned. _Clarify Consequences_: Ensure that repercussions resonate with the goal. They should restore and protect team dynamics rather than merely punish. ## Conclusion Leadership is less about control and more about fostering a culture of ownership and growth. Effective leaders empower and trust, using accountability as a tool for development, not blame. The challenge: not to direct every step, but to guide the journey. Your next move defines your leadership.

You can read my entries on the /writings page.


👉 My Stack

  • -> Languages - JavaScript/TypeScript, Python, SQL
  • -> Frontend - React, Next.js, TailwindCSS, React Native, Radix UI, Styled Components, Redux, Zustand, and more.
  • -> Backend - Node.js, Express.js, Prisma, Postgres, Hasura, PlanetScale, Firestore
  • -> Testing - Jest, Cypress, Playwright
  • -> Tools - Git, Docker, GCP, Vercel, Sentry, Segment

You can find my /uses page to see some tools I use. I love testing out new technologies and tools, so the it's always changing.


🤙 Reach out

You can contact me at hey@naf.is
I do read every email/DM I get, but I can't promise a reply. Apologies in advance. 🙏