Coding for Managers
Many people managers I know are facing some variant of the following crisis:
wants me to consider coming onboard as an IC. But I haven’t coded professionally in 10 years. I’m not sure I’m a good engineer anymore.
If you’re a professional manager who isn’t coding regularly, this probably feels familiar.
After talking to a host of smart friends, I’m convinced this isn’t a crisis of ability. It’s a crisis of confidence.
Good news: there has never been a better time to dip back into being technical. Picking up where you left off is easier than you think.
A few opinionated notes from going through this myself:
Setup#
Don’t spend time setting up your machine, dev env, and tool chain. This used to be really challenging and is still an incredible nerdsnipe. You could lose weeks tweaking your settings files and not make any real progress. Here is my stack. I’d recommend just copying it.
- Use VSCode+Copilot or Cursor for your main editor. The specific choice doesn’t matter (Cursor is a fork so they both feel identical). I go back and forth between the two - keybindings are pretty easy to translate over.
- Get Claude Code and Codex CLIs. If you find yourself running out quota on Claude, upgrade to Max ($200/mo) if you can afford it. I have not experimented with Gemini much.
- Ghostty for your terminal. Straightforward, fast, easy to use. What’s not to like.
- tmux. You’ll need this to run a few different things together, especially if you’re running frontends and backends. Use Claude to fix your configuration.
What you don’t need:
- Expensive machine with a $5000 NVidia GPU. Even if you’re training your own models, you could rent GPUs when you need them. That being said, I admit that the NVidia DGX Spark is calling to me.
Note:
I am quite liberal with my $20 subscriptions, which add up quickly. If you can afford it, I think it’s worth spending freely on these tools for a few months without worrying about optimizing your spend. You can easily discard tools that don’t work for you.
Languages and frameworks#
A common mistake is to layer on too many new things at once. For example, learning a new language (say Mojo or Rust), at the same time as figuring out hosting and deployment, and learning machine learning, is overwhelming. Moreover, if you choose something non-standard, you will likely find yourself in configuration hell.
My strong suggestion is to pick one thing that sits at the intersection of personal curiosity, interest, and a real project that you can ship.
If your goal is to get back into programming, pick Python or Typescript. Both these languages and associated ecosystems are excellent, fully featured, and easy to go from toys to production.
At Hiro, we use Python and Django on the backend, with Typescript, React, and React-Native on the frontend. When I started on my journey ~2 years ago, I used vanilla Python and over time, layered on a number of packages that I’ve found to be very useful, for example:
- Rich and Click - build great CLI utilities using these.
- Pydantic - easy validation for objects, super useful when talking to other services that primarily talk REST. Most AI frameworks (OpenAI, Anthropic) use Pydantic under the hood.
- FastAPI - easiest way to get rolling building your own servers. Even though we chose Django and like its built in ORM and Admin tooling, it’s quite likely that if we were starting today, we’d choose FastAPI instead.
If your goal is to go deeper on LLMs, I strongly suggest not using any AI framework to start with. OpenAI and Anthropic APIs are incredibly straightforward, and programming against them directly will give you a much better understanding of the available knobs e.g. reasoning level, temperature, bias. When you decide to choose a framework, Langchain and PydanticAI are the two leading ones. I strongly recommend PydanticAI - it’s tastefully designed and very powerful, while not abstracting bits that it doesn’t need to. We use this extensively in production.
Taste still matters#
As you start coding, you will quickly discover that what used to matter still does - a lot.
In fact, AI tooling has amplified some of the important experiential learnings because when you can generate an infinite amount of code really fast, editing becomes paramount. AI coding tools won’t give you software that is anti-fragile, structured beautifully and layered to make extension easier.
It’s also very tempting to delegate test generation to AI coding tools. Tests themselves are code debt. Without paying attention, it’s easy to accumulate this debt with tests that are effectively testing each line of the implementation. Go back to basics and re-remember your testing rules.
Thankfully, refreshing all your old knowledge is very straightforward. Dust off your GoF book, reread CAP theorem papers, talk to ChatGPT or stick things in NotebookLM.
Be public and consistent#
Writing a Jupyter notebook is easy. Writing scripts is easy. Don’t fool yourself in ways that make your imposter syndrome worse. Put stuff into a public github repo and push it out. This will help on a few dimensions:
- It forces you to think of deployment. Despite what people say online, deployment is still hard and requires configuring a few things. There is some initial pain, but the result is very satisfying.
- It raises the bar on what you build. Software is often about the last mile - this is where all the annoying issues and bugs pop up. By posting something publicly, you have to cover a lot more than the easier first 80%.
- It’s still interesting to someone. I am constantly surprised by the people who ping me and say “Hey that thing you did
was super interesting and helpful.”
Do not worry about the project not being good enough. Let it be embarrassing. I can assure you - https://demos.rushabhdoshi.com/ is extremely cringe - but it’s worth it.
Finally, be consistent. Write a little code here and there every day. You don’t need to go into a remote hut for a month - it’s perfectly okay to chip away at things.
It’s time to build
There has never been a better time to build. Software is easier than ever to pick up. Yet, the number of things that need to be built continues to grow.
Happy holidays to you and yours! I look forward to seeing what you create.
A note on hiring#
If you care deeply about the craft of software engineering, about building incredible financial tools that help real people, and want to work at a small startup where you can have tons of impact, we’re hiring software engineers and a product designer.
Please apply directly or reach out to me.