Notes on software engineering beyond the code

I recently started thinking about the non-obvious things I’ve learned from other people over the last 5–7 years working as a software engineer. Here are a few of them.

  • "Don't let work find you, find work first". This quote from one of my first managers deeply resonated with me. As you grow more senior in the career, people stop telling you what to do. You are expected to figure it out, prepare a plan, get your manager excited, execute on it and then proudly report results. Depending on what your company or part of company cares about (happy users / less risks / reliability / low costs / revenue / opinions of Wall St. analysts or VC investors), project objectives might look different, but you are still going to have acquire a skill of inventing new things to work on and making bets on behalf of the company. One common instance of this rule is fixing bugs and incidents — in general, you should learn about them from logs and alerts ("finding work"), not Slack messages or customer emails ("work finding you").

  • Make your design docs, specs, and documentation look good. Clear numbered sections, a “Definitions” part, consistent naming, some pseudocode, visual mapping between design elements and API fields, and an FAQ section. Nowadays, this also means no AI slop. Even small things like text color for headings or callouts help. When you include diagrams (I like Excalidraw), make sure they’re clean too: good layout, consistent sizing, colors for different element types, and a legend. Usually, this just means spending an extra 10–20 minutes polishing the document after writing the main content. This advice feels a little bit shallow, but surprisingly effective for getting more people to read and understand what you're working on.

  • Related to the previous point, but also stands on its own — writing a great spec, both in substance and form, makes projects move so much faster. Onboarding more engineers to the project, championing the chosen architecture, sharing project updates with executives and communicating what's going to change for other stakeholders (for example, support, security or sales) — all of this is easier with a good spec. Also, writing is thinking, so you'll make better decisions after writing more.

  • Record your achievements in a doc, even small wins, with links and screenshots. Share these regularly with your manager and keep an aggregated version for your next performance review. Do the same for your peers, as you're likely going to asked to review them as well. Regardless of performance reviews, communicate your big wins in team-wide channels and do thoughtful shoutouts for teammates.

  • Create a "playground" script in the context of the codebase you're working on. It should allow you to experiment with internal modules (especially the ones you're not familiar with during code reviews), build one-off data exports, benchmarks or prototypes.

  • When preparing or reviewing a change to some API endpoint, triple-check if you added proper access checks, parameter validation, metrics and logs. 

  • Optimize CI pipelines overall and do frequent deploys. Even beyond the regular deploys, when working with frontend or mobile engineers who run into an API issue, can you unblock them within a few minutes? Most likely, you should have some staging server available without a PR review — for example, a "preview environment" on Vercel or using a direct deploy to a dev server. On frontend or mobile, you should have an ability to override the backend endpoint to support this flow.


Posted

Interactive guide to GPT-3 prompt parameters

The parameters in the OpenAI playground have always been a bit of a mystery to me. I wasn't sure when to turn on the frequency penalty, decrease the "top P", or use the "best of" parameter that triples the cost.

This tool lets you experiment with the impact of various GPT-3 parameters on the generated results. This should help you get a better understanding of how to adjust the parameters for your specific needs.

I've pre-calculated completions across different parameters using four different tasks: generating startup ideas, copywriting, summarization, and brainstorming. For each set of parameters, I've generated five different completions to give you an idea of the variety of possible outcomes.

[Edited: tool is currently disabled, since it got out-of-sync pretty quickly.]

Posted

Popular dependencies in open source FastAPI projects

This is a report describing the variety of Python libraries used with FastAPI in open source projects. The repositories were sourced using GitHub code search. I analyzed requirements.txt files as the most common source of dependencies. The report includes popular packages, FastAPI versions and dependency clusters.

You can use the report to explore new libraries or pick a dependency between a few options. If you want to discover how exactly a library is used with FastAPI, use GitHub code search: fastapi {package_name} filename:requirements.txt

Posted

How I learned Python: my Google queries from 2014 to 2020

Inspired by Sophie Koonin's blog post "Everything I googled in a week as a professional software engineer", I decided to open the entire history of my Google queries related to Python. The queries showcase all of my Google queries with the word "python", "django" and "flask". I'm publishing the list in hopes that it would be helpful for someone else.

If I were to scroll through such a list in 2014, I'd save a lot of time: for example, by learning about useful libraries ("arrow python", "shiny for python" and "dash python", "opencv python") or about the precise names of some concepts that I didn't know how to search for ("infinity scrolling django", "sentiment analysis python"). Try to scroll through the list and run by yourself queries that you find curious. 

I exported raw queries by running "select text, time from google_searches where text LIKE '%python%' order by time" on an SQLite DB, which I filled with Google Takeout data using Bionic CLI [1]. 

The data spans 6 years: from 2014 (I was 13) to 2020 (I was 19). I publish the queries without any changes besides translating some early queries from Russian to English. The whole dataset is messy and unstructured as was my learning process: driven either by random curiosity or a desire to launch some project.

"python" (1518 queries)

"django" (600 queries)

"flask" (279 queries)

I encourage everyone to look on their full Google Search history with a keyword filter. For me, some queries triggered particular happy old memories of projects I was hacking. Other queries showed a multi-year narrative of the learning process.

[1] Bionic is a tool, which my friend and I created, to load personal data exports from various services to a single SQLite database. 

Posted