About Me
I’m Nirav. I studied Computer Engineering at WRC, Pokhara. I helped start Yarsa Tech as a founding engineer and release its first two products: Nizi Power and eSpeaker. I work part-time at SignalWire, with the DevEx team to improve the documentation of the diverse, complex product base. I refine my craft by working on deep, multi-domain personal projects and by taking on suitably interesting client projects.
I work on the extended stack
With the end goal of making polished, simple products to improve and decorate the lives of people, I don’t restrict myself to any particular technology stack or language.
That said, I do prefer certain stacks to others. For systems work, C++ has been my go-to language. I wrote a compiler and implemented the huffman compression algorithm1 in C++, and all my embedded work is in C++. Recently I also wrote the MP3 player’s main application in C++. I still think it is the coolest language, and I don’t get to use it enough.
I also love pure vanilla JavaScript, weird as it is. I wrote a game engine and a couple of games in JavaScript. Give me JavaScript with a DOM tree and I’ll invent anything. It is really that simple and powerful. Consider this handcrafted block of code for example. I use TypeScript for any serious bit of work I need to do, including professional work and client projects. For serious backend work, Next.js has been my go-to, but I’ll always be partial to PocketBase for any personal project. It really is the best.
On hardware, I prefer WCH chips (CH32V005 and CH572). They are good all-rounders, are easily and widely available, and cost very little. Their sleep-mode power consumption is not particularly good though. So when I need to optimize for that (say, running on a CR2016), the STM32L series is my go-to.
On Hardware
I came up with a concept that I later found better articulated and popularized by Gunpei Yokoi as “Lateral Thinking with Withered Technology”. I’d rather spend time extracting the most value and quality out of a mature technology. I like making portable gadgets and tools. When possible, I try to design things so they can run off a single small non-rechargeable battery for years. But if the requirements are such that that’s not possible, I use rechargeable LiPo batteries. I’m a fan of putting USB-C and BLE in my products.
I strive for simplicity
Simplicity is not the absence of complexity, but the mastery of it. As someone who builds things for people to use as the raison d’être, this is my driving philosophy. Simplicity is not always pretty minimalist interfaces and sleek aluminium. It comes from giving people crisp, robust mental models and from not breaking unspoken promises. It comes from empathetic understanding of your audience.
Thoughts on LLMs/AI
I acknowledge the moral and societal problems with how LLMs were created and how this technology is being speedrun with wanton abandon. At the same time, I can’t deny the value it provides to engineering and development workflows. So I use LLMs in my workflows when I see fit.
I don’t use LLMs for communication. Every blog post, every message, and every email from me is deliberate and my own. I don’t use LLMs when I’m learning. This includes most personal projects. When I do use LLMs, it is to be productive, faster and more thorough in a smaller amount of time. But I am still responsible for every bit of code and media posted, and it reflects on me as much as any code I’d have written myself.
Reading
The Grapes of Wrath, One Hundred Years of Solitude, Absalom, Absalom!
Footnotes
-
And a few years ago an acquaintance told him that he had noticed that a reference to the code was spelled with a lowercase “H.” Remarked his friend to Huffman, “David, I guess your name has finally entered the language.” Scientific American ↑