productivity

Use AI in Your Kogan.com Coding Interview. We would Rather You Did.

For a long time, engineering interviews had this unspoken rule:

Close ChatGPT.
Turn off Copilot.
How dare you use AI to code! That's not real engineering.

We're not doing that.

If you're interviewing for an engineering role at Kogan.com, you can use AI. Cursor, Claude, ChatGPT, Copilot, whatever's already part of your workflow. Honestly, we'd rather see how you actually work with these tools.

Why we changed it

Our engineers use AI constantly. It helps write, debug, refactor, and unblock work across Kogan.com, Mighty Ape and the rest of the group.

So banning it for sixty minutes during an interview never really made sense.

The old style of interview mostly measured memorisation. The ability to recall patterns you've seen before and reproduce them under pressure.

That's not the job anymore.

What matters now is judgement. How you think. How you work with the tools. How you spot when something looks off. How you make decisions when the model gives you three different answers and one of them is subtly wrong.

That's a much more useful signal for us.

What this means in practice

Use the tools you'd normally use at work.

Paste the problem in.
Generate code.
Debug with AI.
Refactor with it.

We'll ask you to share your screen and talk through your thinking as you go, similar to how you'd walk another engineer through a PR or problem you're solving together.

Using AI won't count against you.

Blindly trusting it probably will.

What we're actually looking for

We're not measuring how quickly you can type out a perfect solution from memory.

We're looking at:

  • how you approach the problem
  • how you use AI as a tool instead of a crutch
  • whether you can tell good suggestions from bad ones
  • how you debug and validate output
  • whether you understand the code you're shipping
  • how you handle the moment the model confidently gives you nonsense

The engineers who get the most leverage from AI aren't the ones pasting prompts into ChatGPT all day. They're the ones applying judgement on top of it.

That's the skill.

A few simple rules

Use whatever language or stack you're strongest in. We care far more about how you think than whether you memorised framework trivia.

Talk through your reasoning. Silent copy paste sessions don't tell us much.

If you're stuck, say it. Good engineers ask good questions.

And don't ship code you can't explain. If we ask why something works, "the AI wrote it" isn't really an answer.

The reality

We run lean teams and move fast. AI tools help our engineers operate with more leverage than ever before, and the people who do well here tend to be the ones who adapt quickly and use the tools well.

So if you're sharper with AI than without it, that's completely fine.

Honestly, we'd expect you to be.

Project Spotlight: Optimise Product Updates/ Creates on pipelines

Challenge - Our platform which houses millions of products were subject to regular updates by Marketplace sellers via APIs or by Kogan.com's internal teams. However, an arduous average update pipeline duration of 8 hours hindered the prompt visibility of these changes to customers on the website or app.

Determined to tackle this challenge, our focus rested on expediting the update process while concurrently reducing infrastructure costs so that our customers can swiftly access the most recent product information.

An analysis of the update pipeline revealed several areas requiring our immediate attention:

  1. Repetitive Update Events - recurrent API calls made by Marketplace sellers resulted in duplicated update events for the same product. This redundancy significantly impeded operational efficiency.
  2. Sluggish Database Queries - inefficiencies in database queries engendered prolonged processing times, undermining the timely dissemination of updated product information.
  3. Architectural Bottlenecks - restrictive architectural elements posed as bottlenecks, impinging on system throughput and curtailing overall performance.

To overcome these hurdles, the following measures were taken:

  1. Enhanced Diffing Logic - by leveraging an opensearch cluster, we revolutionized our diffing logic. This sophisticated cluster facilitated real-time comparison of incoming API payloads. Consequently, if no alterations were detected in the product information, redundant requests were skipped, culminating in a more expeditious system.
  2. Optimized Database Queries - a Thorough optimization of database queries was undertaken, incorporating prefetching techniques and mitigating the prevalence of joins and n+1 queries. This meticulous overhaul addressed the root causes of sluggishness, resulting in expedited processing times.
  3. Introduction of a Datastore - a revolutionary datastore was introduced, specifically designed to house denormalized product data. This datastore formed the bedrock of product information display to customers, effectively reducing dependence on Opensearch and enabling its gradual scaling down. The introduction of this refined infrastructure bolstered system responsiveness and agility.

By implementing these measures, we were able to address inefficiencies on our product updates in a timely manner. Our actions played a big part in providing our customers a more seamless experience on our site! This also enables us to scale our operations so we can support a wider range of products and continue meeting the needs of our customers in the future.

Management Command Aliases

Management Command Aliases

Django Management Commands

A quick minor efficiency tip for today that'll make your life at the Django command line incrementally better.

You're using django-extensions in your project, right? If not, go and rectify that problem immediately.

The best feature™ that django-extensions provides is the shell_plus command. You know the worst thing about `shell_plus`? The name. That's a long name to type out into your shell, especially since it's snake_case, and I type the command approximately 15,000 times per day. Wouldn't it be nice to alias `shell_plus` to something like `sh`? Well, now you can!