One of my favorite Git workflows just became a native Github feature. 𝗦𝘁𝗮𝗰𝗸𝗲𝗱 𝗣𝗥𝘀. I never used Graphite, I manually chained branches. One desktop feature I built ended up being 18+ stacked PRs. Smaller diffs. Better reviews. Easier merges.
Mulualem Eshetu
@mulualem.bsky.social
Software engineer working on AI products. I write about UX, agentic AI, and how complex systems reach users. 🔗 mulualem.dev
𝗢𝗻𝗲 𝘁𝗵𝗶𝗻𝗴 𝘀𝘂𝗿𝗽𝗿𝗶𝘀𝗲𝗱 𝗺𝗲. The more AI helps me write code... the more valuable engineering judgment becomes. Knowing how to build something matters. Knowing whether to build it matters even more.
𝗧𝗵𝗶𝘀 𝗳𝗲𝗹𝘁 𝘄𝗿𝗼𝗻𝗴 𝗮𝘁 𝗳𝗶𝗿𝘀𝘁. I used to feel guilty asking AI so many questions. Then I realized... I'm not outsourcing my thinking. I'm accelerating it. There's a huge difference.
𝗡𝗼𝗯𝗼𝗱𝘆 𝘄𝗮𝗿𝗻𝘀 𝘆𝗼𝘂 𝗮𝗯𝗼𝘂𝘁 𝘁𝗵𝗶𝘀. The better you get as an engineer... the less time you spend writing code. You spend more time reading. Thinking. Questioning requirements. Reviewing. Simplifying. Saying "no." Funny enough... writing code became the easiest part of my job.
The weird thing about AI: The more I build, the more I ask myself "What do I actually know?" I might not remember every syntax or API anymore. But I know how to think, debug, simplify, and make decisions. Maybe that's the skill that matters now.
Nobody tells you this. The hardest bugs aren't the ones that take days to fix. They're the ones that make you question everything you changed. Sometimes the fix is one line. Finding that one line is the hard part.
One habit that made me a better engineer I stopped asking, "How can I build this?" and started asking, "Do I actually need to build this?" The simplest solution is often the one that lasts the longest. #SoftwareEngineering #programming
Most link shorteners have a hidden business model: Your audience's data. We didn't like that. So we started building TrimLink with a simple rule: Analytics without surveillance. No IP. No cookies. No fingerprinting. No consent banners. Just links. What are you using to shorten links today?
AI is becoming geopolitics. We’re witnessing history in real time.
Working on AI products taught me something: The goal isn't to use AI everywhere, the goal is to use AI where uncertainty exists. Search, filtering, permissions, and business rules are usually better handled by code.
The older I get as an engineer, the less I care about clever code. I care more about: - code others can understand - code I can understand 6 months later - code that solves the actual problem Simple scales surprisingly well.
A few years ago, I thought good engineers were the ones who knew the most. Today, I think good engineers are the ones who learn the fastest. Technology changes. Tools change. Requirements change, the ability to adapt is what compounds over time.
Working around AI every day taught me something unexpected The biggest productivity boost isn't getting AI to write code, It's getting AI to help you think. - Brainstorming. - Debugging. - Exploring options. - Reviewing ideas. The coding part is only a small piece of the puzzle.
One thing I've learned after a few years of building products Coding is rarely the hard part, the hard part is: - understanding the problem - handling edge cases - making changes without breaking things - keeping the code maintainable months later
Code isn’t cheap, bad code is more expensive than ever, because of AI.
I needed to reuse a component across apps. Simple, right? Except it lived in the wrong package layer. It imported auth hooks and UI components directly from one app. Everything tangled together. To extract it, I had to replace every app-specific dependency with generic props and shared utilities.
It failed because the package checked it during preinstall, which only reads shell env at install time. Fix: `𝐞𝐱𝐩𝐨𝐫𝐭 𝐋𝐈𝐂𝐄𝐍𝐒𝐄_𝐊𝐄𝐘=... && 𝐩𝐧𝐩𝐦 𝐢𝐧𝐬𝐭𝐚𝐥𝐥` Useful reminder: 𝐚𝐩𝐩 𝐫𝐮𝐧𝐭𝐢𝐦𝐞 𝐞𝐧𝐯 != 𝐢𝐧𝐬𝐭𝐚𝐥𝐥-𝐭𝐢𝐦𝐞 𝐞𝐧𝐯
Thanks to AI, we used to say, “Writing code is easy, reading code is hard.” Now we’ve made the easy (and fun) part even easier, and the hard part even harder. Great job.
I replaced 3 API clients with one shared layer. 3 apps. 3 separate HTTP clients. 3 auth implementations. All doing the same thing. Built one shared package. Migrated each app feature by feature. Removed the old clients only after everything was stable.
POV: you keep telling Claude 'no wait, do it this way... actually nevermind, start over' every 2 minutes and it finally goes 'sir, YOU are the problem' 💀
dozens of PRs in one month. not because I'm 10x. because I break work into small PRs, batch related work, don't over-engineer, and review my own PR before requesting review (catches 50% of issues). consistency > intensity.
"we need this by Friday." every engineer has heard this. I've failed at it, overscoped, didnt ask for help early, communicated too late. lessons: scope ruthlessly, timebox exploration, ship the fix then the refactor, communicate early. velocity isn't working faster. it's cutting scope to wt matters.
Every engineer should build a browser extension at least once. Here's why it's the best crash course in production engineering
i shipped a change that spiked CPU on Gmail. our browser extension was causing it. root cause? infinite re-render loop. we injected a toolbar into Gmail's compose. DOM change → reinit toolbar → DOM change → reinit → forever. fix was 15 lines. finding it took 4 hours.
UX = Design the RIGHT thing UI = Design the thing RIGHT Most designers mix them up. One solves real problems. The other makes it feel smooth & beautiful. You need BOTH 🔥 Which side are you stronger at? UX or UI? 👇
the first week i worked on the browser extension: opened Gmail, toolbar was there. opened Outlook, broken. Google Docs, half rendered. LinkedIn, gone. same code, 4 sites, 4 behaviours. that's what extension dev actually is, you're a guest in someone else's app. they redecorate without telling you.
Before I wrote my first major change, I spent 2 weeks just reading code. Traced a button click through, React component → event handler → API client → backend → database → response → state update → re-render. Understanding the system IS the contribution.
removed 62 unused npm packages from our codebase in one PR. 14 never imported, 23 left behind by deleted code, 11 duplicates, 14 dev deps listed as prod. bundle size dropped 40%. run `npx depcheck` on your project, you'll probably find more than you expect.
TIL: you don't need side projects to grow as an engineer. you need responsibility. I learned Tauri because we needed a desktop app, not because it was trendy. production systems with real users teach you more than any tutorial. the stakes are just different.
my first major challenge as a frontend engineer: building speech-to-text for an AI product used by millions. completely new territory. browser permissions, edge cases, unreliable real-time input.