Asana Software Engineer Interview Questions
11+ questions from real Asana Software Engineer interviews, reported by candidates.
Round Types
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
Asana Fulltime SDE Tech Phone Screen Experience and Interview Overview
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.
Asana Virtual Onsite Interview for SWE
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
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
Has anyone done a phone screen at Asana lately?
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