Hi everyone, I hope all is well with you and the weather is treating you well. It has been very rainy in N. Georgia the last few weeks, and now the sun has been a welcome sight in the sky. If you know me, I try and break out of the humbug of social media and provide perspective.
Sometimes though, a post just gets it done. And today was that day. And, I rarely if ever read the linked.in feed.
You don’t know what I am talking about yet, bear with me. What I read today may be one of the all time best satirical posts in existance. The satire was about tech questions asked in interviews and it was just brilliant. Before you read to the end, see if you can answer these questions for yourself and don’t use AI.
Reference: https://www.linkedin.com/in/oshricohen/ - Totally referencing this as I did ask what ChatGPT thought of this just to see in the end; just because. Mr. Cohen gets full credit and deserves praise.
Tech Interview Questions
In Python, how would you use the defragment() function on a tuple to optimize tuple access speed in memory? Please provide both O(n) and O(log n) solutions.
Describe how to implement a bi-directional RESTful WebSocket in vanilla JavaScript, ensuring that all HTTP verbs are supported natively by the socket interface.
What are the performance trade-offs between compiling a JavaScript file with GCC versus using the make command in recursive async mode?
Explain how the NULL_CACHE isolation level in PostgreSQL ensures zero-latency writes during concurrent UPSERT operations.
In Kubernetes, how do you leverage the pod-multiplier field in the Deployment spec to automatically horizontally AND vertically scale at the same time during a kubectl apply -f?
How does the CSS-in-JS-native GPU rendering pipeline in React 19 impact paint times for inline SVG elements with nested iframe components?
The first one I read about defragment()
before I saw the #satire tag. This had me hook line and sinker on how weird interviews and interviewing are these days. I literally went: “I’m sorry, what? Is this for real?!“
This post to me was why I still have faith in humanity and it fully made my day. Took a sip of coffee, and finally I got the joke. I felt totally gullible for having a think on this: “Did I miss something? A new feature in python? Did PG and React add something I don’t know. Iframes?“. Hook. Line. Sinker.
This is entirely why I don’t like interviewing in a tech audit kind of way. Nor, do I like giving interviews in this rapid fire sort of way. I just don’t feel it gets to the core of what I want, which is:
Can you learn?
Can you adapt?
Can you deliver?
Can you overcome?
That is basically all I care about anymore.
Show me your code, the best you have. I can pretty much see at a glance if we can work together.
I look for patterns and critical thinking, after that I ask myself: is this person going to be dedicated with the right attitude to deliver on time and on/under budget? Can I treat you like a peer and trust you to get the job done?
Let’s get you into a workflow and see how you perform.
After the first interview, what I do is give quick little homework assignments on what the team is actually working on. Something that you can also glance at and give me your feedback. No more than 15-30 minutes, tops. Then, on the second interview I want to know:
Tell me if you like what we are doing - is this for you?
Tell me how you can contribute - do you see something we can do better?
Tell me what your goals are - what do you want to accomplish in the next year?
Tell me what is your favorite thing to do in life - What brings you joy?
That speaks more to me than just a coding test. I need to know your headspace.
I would rather have you for a year or two at your top performance, gaining crucial experience and accelerating a team than twenty years of mediocre performance.
Also, I want to send you on your way with more than you started with. I want you to leave the team in a better position than we started with. I want to learn from you, and you from me. We should learn more together on the way! Woof, that is a lot of “I”, but it is the truth.
Lastly, have some fun! Work hard, play hard. There is always another problem to solve.
Elongating the time interviewing - in my opinion - produces bias and is a waste of finding out if one can perform. Give folks up to 90 days to prove themselves, we’ll work together to make that a reality and give you a fair shot at success. This bears repeating: a fair shot. That means equal opportunity to succeed.
There is an argument to be had that on-boarding is expensive, so let’s make sure that this works together. That way, when one is on-boarded they are truly on-boarded and empowered.
I’m not naïve; hiring is very dependent on the needs of the enterprise, but IMHO engineering interviews should not be a cage fight. It is to gauge if you can you help us succeed and us to help you. After the 90 days, let's review and move forward with goals and ambition. If it doesn’t work, it doesn’t work. My hope is that it does work, and we have a lot of fun working together.
That’s it. Enjoy life as it is the only one you have.
Tech Interview Answers (The Satire)
Ok, so for my non-tech friends or folks who did like I did and question myself, the answers for this are: these are not real questions. They are all fake-outs.
If someone asked this of me, they would have tripped me up. And I’ve been doing this for ages. There is just enough validity and eccentricity that had me going: “Ok, I need to look this up“. I guess these could weed out the liars? So there’s that.
But, “Please provide both O(n) and O(log n) solutions.” is just deliciously cruel. Chef’s kiss.
A lot of leet code tests want you to play that game: I struggle to see the point on how that helps me understand if you are sent loose requirements on a Greenfield or Evolutionary project that you can get to work in a creative way outside of leet tests.
I don’t know everything myself, so I must presume that you cannot possibly know O(1, n, log n) for *every* concept in every programming language with at least some testing. Plus, shoot for long term optimization in your code as brute force code may be the best ROI in the moment.
The point being: one does not have to be the encyclopedia.
Does it help me understand you know the concept? For sure. I’ve been doing leet code challenges to keep sharp and what I would prefer that you did was find a solution, then see if you can refine that solution. My favorite thing about the leet code UI is that you can work to find the optimal.
However, I could have also asked: “Can you tell me what time complexity is in computer science, and what does your experience tell you about X, Y, Z code for time complexity?“. With real code that the team is working on.
Show the team’s code in the interview, where is the harm in that? Walk through optimization together: even if they don’t know. Did you get to an answer? Did they rise to the occasion or give up? Did they work with you?
That will answer more about a person’s character and not put a candidate in a boxing ring. Also, they may have had a revelation on something they knew intrinsically and could never put the words to.
Build trust, not contempt.
Just like Big-O, my advice is keep the trajectory and slope of tech debt as small of an incline as is practical. Sometimes “fair“, treading into “bad“ may be the only solution available. Just try to stay away from “horrible”. As soon as folks add third-party services into the mix, one is forced into having to re-verify over and over again if they want to scale.
Anyways - just beautiful satire, so much so that I had to write this blog. Kudos to Mr. Cohen. This is what ChatGTP has to say on the subject. How correct do you think ChatGPT is?
Q: In Python, how would you use the defragment() function on a tuple to optimize tuple access speed in memory? Please provide both O(n) and O(log n) solutions.
Reality:
Tuples in Python are immutable. There is no defragment() function.
Defragmentation is a term from low-level memory management, irrelevant to high-level Python tuple usage.
Optimizing access speed to a tuple in memory via O(n) or O(log n) is meaningless—Python uses array-like contiguous memory under the hood, and tuple access is O(1).
👉 The joke: Taking a concept from OS internals and pretending it applies to immutable Python structures in algorithmically tunable ways.
Me: Started questioning the questions. Have I ever had to defrag a tuple?
Q: Describe how to implement a bi-directional RESTful WebSocket in vanilla JavaScript, ensuring that all HTTP verbs are supported natively by the socket interface.
Reality:
WebSockets do not use HTTP verbs like GET, POST, PUT, DELETE after the initial handshake.
REST is stateless and HTTP-based; WebSockets are stateful and TCP-based.
The idea of “natively supporting HTTP verbs” on WebSockets is a category error.
👉 The joke: Combining mutually exclusive paradigms (REST + WebSockets) and pretending there’s a “vanilla JS” way to unify them via native browser support.
Me: This was when I started going: WTF? That’s not how sockets work.
What are the performance trade-offs between compiling a JavaScript file with GCC versus using the make command in recursive async mode?
Reality:
GCC (GNU Compiler Collection) is for C/C++, not JavaScript.
make is a build tool that executes tasks based on file dependencies; it doesn’t have a “recursive async mode.”
JavaScript files are interpreted or JIT-compiled in the browser or Node.js, not compiled with GCC.
👉 The joke: Mashing up tools from completely different ecosystems (C++ compilation vs JS async code) and pretending they’re interchangeable.
Me: This can’t be real? GCC? Is that a thing in Vite I missed with Compilation? Was that acronym GCC or something else? This doesn’t add up. (I can code in C/C++ but by no means do I use that language every day. “Make” just made no sense TBH.)
Explain how the NULL_CACHE isolation level in PostgreSQL ensures zero-latency writes during concurrent UPSERT operations.
Reality:
There is no such isolation level as NULL_CACHE.
PostgreSQL isolation levels are: READ COMMITTED, REPEATABLE READ, SERIALIZABLE.
The idea of “zero-latency writes” is a fantasy; writes always incur latency due to I/O and transaction locking.
👉 The joke: Inserting a fake feature that sounds plausible to someone who half-remembers SQL terminology.
Me: I went and looked at PG17 and 18 beta to see if this was actually a thing in like WAL or something I don’t engage with day to day. SMF. I should have known better.
Q: In Kubernetes, how do you leverage the pod-multiplier field in the Deployment spec to automatically horizontally AND vertically scale at the same time during a kubectl apply -f?
Reality:
No field named pod-multiplier exists in Kubernetes.
Horizontal scaling = more pods; vertical scaling = more CPU/memory per pod.
These require different tools (e.g., HPA vs VPA), and you can’t trigger both simultaneously via kubectl apply.
👉 The joke: Making up a magical field that solves two hard problems at once, using one simple command.
Me: This is where I went, oh, this is a joke! Got it. Got. It.
Q: How does the CSS-in-JS-native GPU rendering pipeline in React 19 impact paint times for inline SVG elements with nested iframe components?
Reality:
No such GPU-native CSS-in-JS rendering pipeline exists in React.
Inline SVG with nested iframes is already a rendering and security mess.
React 19 (as of writing) has no such announced feature.
👉 The joke: Combining a complex, real front-end pain point (SVG + iframe rendering) with a fictional, GPU-accelerated React feature to parody hype.
Me: Paints times? Really? Word salad using iframes. Ugh, iframes.
If you made it this far, thanks for reading: it is a lot to take in.
My takeaway is that a lot of interviewing is built around this impossible rubric to let prospective employers know how you can help them in their project. I am 100% supportive of the academia and memorization of concepts, but once folks get into the real world, there is so much more nuance to the task at hand.
After twenty years at this: sometimes I get lost in the haze of “new“ jargon or ways of stating concepts I learned decades ago under less glamorous names. However, that is an entirely a different post!
So many times, we have to re-assess and challenge our takes on things and that I feel is the core trait I am looking for: a desire to succeed. We’ll figure out how that success manifests together, if you are up to the challenge.
Thanks for reading, don’t code tired!