Asana

Asana Software Engineer Interview Questions

11+ questions from real Asana Software Engineer interviews, reported by candidates.

11
Questions
6
Round Types
5
Topic Areas
2021-2025
Year Range

Round Types

Phone Screen 3 Onsite 2 OA 2 Coding 2 System Design 1 Phone 1

Top Topics

Questions

I found a lot of helpful posts on the forum when I was preparing for the interview, so I'm posting this to give feedback. I haven't received the results yet. I applied for a Team Leader (TL) position,

These are all interview questions, and it's quite strange that they didn't turn on their cameras... The questions are the same as the second round questions here: https://www.1point3acres.com/bbs/thre

First Round of Challenges: Off Camera Zoom Questions 1/2: * You are shown two code snippets on the coding panel without writing any code, and asked what they do. Also, the time and space complexity of

LeetCode #973: K Closest Points to Origin. Difficulty: Medium. Topics: Array, Math, Divide and Conquer, Geometry, Sorting, Heap (Priority Queue), Quickselect. Asked at Asana in the last 6 months.

LeetCode #238: Product of Array Except Self. Difficulty: Medium. Topics: Array, Prefix Sum. Asked at Asana in the last 6 months.

Hey everyone! I’ve got my remote onsite interview with Asana coming up soon. From what I’ve heard, it includes three parts: a Code Review round, DSA + LLD, and a System Design (HLD) round. I’ve been b

Hey everyone, Next week I will be doing the Asana Technical Phone Screen (60 min). I passed their OA yesterday, which was just the CodeSignal General Assessment. Has anyone done this phone screen befo

Asana Phone Screen

Phone Screen 2023

This will be my first ever internship phone screen (I got perfect score on codesignal) does anyone have any info on how difficult the phone screen is? Also does this mean I passed the resume screen si

Was just invited for one. Any pointers? And before anyone asks, the job posting is closed now, unfortunately.

## Round 1 - Coding / OOD ## Problem Design an ASCII art rendering system. Support rendering rectangles, triangles, and text banners to a 2D character canvas. Each shape is a separate class. The canvas can combine multiple shapes and print the result. ```python class Canvas: def __init__(self, width: int, height: int, fill: str = " "): ... def draw(self, shape: 'Shape', x: int, y: int) -> None: ... def render(self) -> str: ... class Rectangle: def __init__(self, width: int, height: int, char: str = "*"): def pixels(self) -> list[tuple[int,int]]: ... class TextBanner: def __init__(self, text: str): def pixels(self) -> list[tuple[int,int,str]]: ... ``` ## Example ``` c = Canvas(10, 5) c.draw(Rectangle(4, 3, "#"), x=1, y=1) c.render() # ---------- # | | # | #### | # | #### | # | #### | # ---------- ``` ## Follow-ups 1. How do you handle overlapping shapes — which one takes priority and why? 2. How would you add a `Triangle` shape that fills using Bresenham's line algorithm? 3. How would you support layering (z-index) so shapes can be explicitly ordered? 4. How would you serialize the canvas state to a JSON file and restore it?

## Round 1 - Coding / OOD ## Problem Simulate a turn-based grid game where cats try to catch rabbits. Each turn: rabbits move randomly to an adjacent cell; cats move one step toward the nearest rabbit. If a cat and rabbit occupy the same cell, the rabbit is caught. Simulate until all rabbits are caught or a max turn limit is reached. ```python class Animal: def __init__(self, animal_id: str, x: int, y: int): ... def move(self, dx: int, dy: int): ... class Cat(Animal): def choose_move(self, rabbits: list['Rabbit']) -> tuple[int,int]: ... class Rabbit(Animal): def choose_move(self) -> tuple[int,int]: ... class Game: def __init__(self, grid_size: int, cats: list[Cat], rabbits: list[Rabbit]): ... def step(self) -> list[str]: # returns ids of caught rabbits this turn ... def run(self, max_turns: int) -> dict: # returns {"turns": int, "caught": list[str], "escaped": list[str]} ... ``` ## Example ``` cats = [Cat("C1", 0, 0)] rabbits = [Rabbit("R1", 4, 4)] game = Game(grid_size=5, cats=cats, rabbits=rabbits) game.run(max_turns=20) # -> {"turns": 8, "caught": ["R1"], "escaped": []} ``` ## Follow-ups 1. How does your cat movement strategy change if there are multiple rabbits — does the cat chase the nearest or apply some heuristic? 2. How do you prevent two cats from targeting the same rabbit inefficiently? 3. What happens on a toroidal grid (edges wrap around)? 4. How would you add a line-of-sight constraint so cats can only move toward rabbits they can "see"?

See All 11 Asana Software Engineer Questions

Full question text, answer context, and frequency data for subscribers.

Get Access