AVIV Group · Software Engineer
Updated · 2026-10-02

AVIV Group Software Engineer
Interview Guide

THE 60-SECOND BRIEF

AVIV Group runs digital real estate platforms in Europe, the property-search products where people look for homes and follow the property market across several countries. Candidates describe the Software Engineer role as building, scaling and maintaining those platforms: backend services, event-driven architectures, and cost-focused work under the FinOps label, plus refactoring older systems so new features fit. Android appears both in the nice-to-have requirements and in a reported code review question, so some teams work on mobile code. The role sits next to Product Managers and other engineers, turning business requirements into technical specifications, reviewing code and mentoring peers.

This guide is for candidates interviewing for a Software Engineer position at AVIV Group. It covers the four reported rounds, the ten reported questions (working in existing code, code review, tracking user events, event-driven architecture, technical debt, and three behavioral prompts) and a seven-day plan. It does not cover compensation, and the exact content varies by team and seniority.

Candidates report four rounds over roughly 3-5 weeks: Initial Screening, Technical Assessments (take-home assignments or live coding), Behavioral Discussions and Final Team Discussions. They also report that the process varies by team and seniority.

FinOps (Financial Operations)System DesignCoding Challenges

36 min read

Browse Software Engineer questions

See the practice prompts

16Practice promptsAcross five skill areas

The reported questions fall into three groups. The first works from code that already exists: fixing a unit test in a provided codebase, adding a method to provided code for a functional requirement, reviewing code against Android or backend best practice, and explaining how you would track specific user events. The second is architecture: who owns the source of truth while a system migrates to an event-driven design, how you produce a high-level design when time is short, and how you balance feature delivery against technical debt. The third is behavioral: past projects, a plan to improve a team's engineering practices, and advocating for a technical direction in a group. The topics candidates associate with the loop are system design, coding challenges, event-driven architecture, FinOps and cloud cost optimization.

For the coding questions, the practice that matters is reading unfamiliar code rather than writing from a blank file. The requirements candidates describe list Java, Kotlin or Go, automated testing and cloud-based architectures, so pick whichever of those you are strongest in and rehearse a fixed routine: run the failing test, read the failure message, reproduce it in the smallest form, decide whether the test or the code is wrong, fix the cause, then add the test that would have caught it. Extending provided code works the same way: read the neighbouring methods, match their conventions, handle empty and invalid input, and add tests next to the change. Candidates are also advised to ask clarifying questions before coding and to talk through their reasoning.

The architecture questions reward concrete mechanisms over vocabulary. A source-of-truth debate during an event-driven migration is a question about data ownership: which service may write each entity, how other services learn about changes (an outbox table or change-data-capture feeding a broker), how consumers stay idempotent, and how you reconcile when two copies disagree. Be ready to say where you accept stale reads and where you do not, since the reported guidance names consistency versus availability as a trade-off to discuss. Because FinOps and cloud cost optimization appear as topics, also be able to name the cost levers in a design, such as storage tiers, retention, data transfer, over-provisioned compute and chatty cross-service calls.

The behavioral prompts are about influence as much as delivery. Candidates describe the role as including code review, mentoring and collaboration with product managers, so prepare stories where you made a decision, explained it to people outside engineering, and changed how a team works. Candidates also report advice to state trade-offs for every technical choice and to stay flexible when constraints change, which means each story should include the option you rejected and why.

01

Initial Screening

reported

Candidates describe the first stage as a review of basic qualifications and fit, and one report says the process starts with a conversation about expectations and experience. Treat it as a structured walk through your background against the role's requirements: a modern language such as Java, Kotlin or Go, automated testing, and cloud-based architectures, with event-driven systems, FinOps or cloud cost work, and Android as extras. Have a short, factual career summary ready and be able to say which extras you have actually touched.

What to demonstrate

  • Basic qualifications and fit for the Software Engineer role
  • Alignment between your experience and the stated expectations
  • How clearly you summarise your background

How to prepare

  • Write a short career summary that goes through the requirement list in order (language, automated testing, cloud-based architecture) and names one project for each.
  • Mark which nice-to-have items (event-driven systems, FinOps or cloud cost optimization, Android) you can discuss with a concrete example, and which you should describe honestly as exposure only.
  • Prepare factual answers on location, notice period and compensation expectations, and ask which formats the later rounds take for your team and level.
AVIV Group Software Engineer candidate reports ↗
02

Technical Assessments

reported

Candidates report that this stage may be a take-home assignment, live coding sessions, or both. The reported coding-style questions in this loop start from existing code instead of a blank file: fixing a failing unit test, adding a method to provided code, reviewing code for Android or backend practice, and explaining event tracking. Whichever format you get, practise that way: read first, reproduce, change the minimum, test the change, and say what you are doing as you go.

What to demonstrate

  • Working code in a take-home or live coding format
  • Debugging and unit-test skill, a reported evaluation area for this role
  • Extending existing code without breaking behaviour that already works

How to prepare

  • Take a small repository in Java, Kotlin or Go, break one test on purpose, and practise the routine of reproducing, finding the root cause and fixing the code rather than the assertion.
  • Add a method to code you did not write, matching its naming and error handling, with tests for empty, null and boundary input.
  • Review three real pull requests aloud with comments labelled blocking or optional, covering at least one Android or backend change.
  • If you receive a take-home, keep commits small and add a short README that lists your assumptions, trade-offs and what you would do with more time.
AVIV Group Software Engineer candidate reports ↗
03

Behavioral Discussions

reported

Candidates describe these conversations as aimed at your professional trajectory and your problem-solving methodology. The reported behavioral prompts ask about past project experience and how it prepared you for the role, how you would plan improvements to a team's engineering practices, and a time you advocated for a technical direction. Answer with decisions you personally made, the alternatives you weighed and a result you can defend.

What to demonstrate

  • Professional trajectory and how your past projects connect to this role
  • Problem-solving methodology as you describe it in real situations
  • Communication of decisions and trade-offs

How to prepare

  • Choose three projects and write each as context, your decision, the rejected alternative, the result and what you would change.
  • Prepare a plan for improving a team's practices that starts from a measured problem such as flaky tests or slow reviews.
  • Rehearse the advocacy story out loud, including the strongest argument against your position.
AVIV Group Software Engineer candidate reports ↗
04

Final Team Discussions

reported

Candidates describe the final interviews as focused on strategic and cultural alignment with the team. Because the stage is strategic, rehearse the strategy-flavoured reported questions as well as your stories: balancing immediate feature delivery against long-term technical debt, giving a high-level design when time is short, and settling a source-of-truth debate in an event-driven migration. Expect the conversation to depend on the team and seniority.

What to demonstrate

  • Strategic thinking about engineering decisions
  • Alignment with the team you would join
  • How you handle trade-offs and disagreement in a group

How to prepare

  • Write a short policy for splitting time between features and debt, with a rule for what counts as debt worth paying down now.
  • Practise a design walk-through that begins with scope and constraints, names the data owner for each entity, and states the trade-off you accept.
  • Prepare questions about how the team reviews code, tests changes and decides on architecture, so the conversation runs both ways.
AVIV Group Software Engineer candidate reports ↗

PracHub editorial advice for the preparation topics above.

01

Making a failing unit test pass by loosening the assertion or special-casing the input without finding why it failed

Reproduce the failure, read the message, and decide out loud whether the test or the code is wrong. Fix the cause, then add a test that fails without the fix.

02

Giving a code review that lists style nits, or says the change looks fine, while a null case or error path goes unmentioned

Review in priority order: correctness, data and security, tests, then readability. Label each comment blocking or optional and write down the reason for each blocking one.

03

Answering the source-of-truth question with 'use events' without naming who owns each piece of data

State one writer per entity, how changes reach other services (outbox or change-data-capture), how consumers handle duplicates, and how you reconcile disagreement. Say where stale reads are acceptable.

04

Presenting one architecture as the only answer, with no trade-offs, then having no response when the constraints change

Give the option you choose, the one you rejected and the cost of each. Candidates are advised to stay flexible, so say what new constraint would make you switch.

05

Telling behavioral stories in 'we' with no personal decision, alternative or measurable result

Write each story as your decision, the rejected option, the outcome and one change you would make. Cut any story you cannot attach a result to.

Choose a category, try a prompt, then open its approach, worked solution or follow-up when you need it.

12 technical prompts0 include a worked solution

Track a rolling failure rate per destination for circuit decisions

easy
sliding windowring buffercircuit breaker

The egress service delivers about 1,500 webhooks per second across roughly 40,000 destinations, each call bounded by a 10 second timeout. Maintain, per destination, the failure rate over the trailing 60 seconds so a caller can ask before dispatch whether the circuit should open. Attempts arrive as (destination_id, finished_at_ms, outcome). Requirement: amortised O(1) per attempt, with total memory bounded by the destination count rather than by traffic. Give the structure, its exact memory, and the rule that stops a destination with three attempts from opening a circuit.

Approach
  1. Name the exact-deque version and then reject it as the default. Holding timestamps and advancing a tail pointer past anything older than now minus 60 seconds is a correct two-pointer window at amortised O(1) per attempt, but its memory tracks in-window traffic, so one destination in a retry storm holds hundreds of thousands of entries while thousands of quiet destinations hold none.
  2. Use a ring of 60 one-second buckets per destination, each bucket a pair of counters for attempts and failures. On an attempt, advance the ring by the elapsed whole seconds, zeroing at most min(elapsed, 60) buckets, then increment the head. That is amortised O(1) with a fixed footprint per destination.
  3. State the footprint: 60 buckets times two 4-byte counters is 480 bytes of payload per destination, so 40,000 destinations is roughly 20 to 25 MB with per-entry overhead, bounded by the catalogue rather than by the rate. The cost is granularity, since the oldest bucket ages out in whole seconds, which is far tighter than the decision needs.
  4. Require a minimum sample before the circuit may open. A destination with three attempts and three failures reads as 100 percent and is not evidence; a floor of roughly 20 attempts in the window makes the ratio meaningful, and below that floor use a run of consecutive failures as the trigger instead.
Follow-up
  • The fleet is 30 instances and each sees roughly a thirtieth of a destination's traffic. Where does the rate actually live, and what does a per-instance answer get wrong?
  • A destination answers in 9.5 seconds and succeeds. It is not failing but it is consuming your per-destination concurrency. What signal should open the circuit here?

Diff a projection against the primary without per-row point reads

hard
reconciliationrange hashingthrottling

The listing projection has drifted and some rows show a stale version. The primary holds 40,000,000 resource rows across 12,000 tenants while serving 1,200 writes and 14,000 reads per second. The obvious repair, reading each resource row and comparing its version against the projection, is correct and would eventually finish. Explain precisely why it is unacceptable here, then give a diff that finds the differing rows, state its complexity, and make it safe to run against a live primary. Replication lag is usually under 100 ms and is not bounded.

Approach
  1. Quantify the naive cost rather than calling it slow: 40,000,000 point reads at even 0.5 ms each is over five hours serialised, and the only lever is concurrency, which is exactly what you cannot spend. The primary's pool is sized for the write path, and 40,000,000 random reads evict the buffer cache that sustains the 85 percent cache hit rate, so the audit degrades the system it is auditing.
  2. Replace random access with one ordered pass per side. Both sides can be read in (tenant_id, resource_id) order, which is a sequential scan on each and a merge join in O(n) time and O(1) memory. For a dense diff that is the whole answer, and it reads the primary once instead of 40,000,000 times.
  3. For the expected sparse case, compare range hashes instead of rows: partition the key space, compute per range an order-independent aggregate over hash(resource_id, version), compare aggregates, and descend only into ranges that differ. With d differing rows and branching factor B, at most d ranges mismatch per level, so the drill-down examines O(d log_B(n/d)) ranges and reads full rows only in mismatching leaves.
  4. Aggregate with a sum modulo 2^64 or a multiset hash, never XOR. XOR is order-independent but self-cancelling, so two rows wrong in the same way, or a row duplicated on one side, leave the range aggregate matching and the range is declared clean.
Follow-up
  • The diff reports 900 stale rows. How do you decide between patching those rows and rebuilding the projection from resource_revision?
  • Same job, but the projection lives in a search index that cannot be scanned in key order. What changes?

Find overlapping job attempts and peak concurrency from lease records

medium
sweep lineintervalsleases

A day of job_run history yields about 50,000,000 attempt records: (job_run_id, job_type, attempt, started_at, finished_at which is NULL when the worker died, lease_expires_at). Leases expire on a clock, so a job that outran its lease ran twice. Produce (a) every job_run_id whose attempts overlapped in wall-clock time and (b) the peak number of simultaneously running attempts per job_type with the minute it occurred. Target O(n log n). State how you treat a NULL finished_at and what clock skew does to your answer.

Approach
  1. Define the interval before sorting anything: an attempt occupies [started_at, COALESCE(finished_at, lease_expires_at)). finished_at is observed and lease_expires_at is only a promise, so every attempt without a finish contributes an estimate and the whole result is a lower bound on overlap rather than an exact count.
  2. For peak concurrency, sweep: emit 2n endpoints, sort by (timestamp, kind) with ends ordered before starts at equal timestamps, then walk the sequence maintaining a counter per job_type and record each type's maximum with its timestamp. O(n log n) dominated by the sort, O(n) space, or O(1) extra if the sort is external and the walk streams.
  3. For overlap detection, do not compare attempts pairwise. A single global sort by (job_run_id, started_at) gives both the grouping and the order; within a group, keep the maximum end seen so far and report an overlap exactly when the next start is less than that running maximum, which is one linear pass after the sort.
  4. Half-open intervals matter and are easy to get wrong: with closed intervals an attempt ending at the same millisecond another begins reads as concurrency two, and across 50,000,000 records that artefact swamps the real signal.
Follow-up
  • A handler is not idempotent and you have found 400 overlapping jobs. Which of them actually caused damage, and what would you query to find out?
  • Peak concurrency for one job_type is 4 against a configured cap of 4. Is the cap working, or is the data hiding attempts that never started?

Each day targets one reported question type or round: working in existing code, code review, event tracking and event-driven design, then cost, debt and behavioral stories. Days that point at PracHub practice problems use that practice set as extra rehearsal, not as company material.

Small steps. Visible outcomes.0 / 7 completed
ONE WEEK · YOUR PACE

Prepare, practise & reflect

One practical outcome each day. Spend longer where you need it.

0 / 7 done
01Map the loop against your background
  • Write the four reported rounds in order and mark which one you feel least ready for.
  • List the must-have requirements (Java, Kotlin or Go, automated testing, cloud-based architecture) and the nice-to-have ones (event-driven systems, FinOps or cloud cost work, Android), and write one real example or an honest gap for each.
  • Choose three projects for the project-history and advocacy stories and write a one-line decision and result for each.

Deliverable: A one-page round map, a requirement-by-requirement evidence list, and three project one-liners.

02Fix and extend existing code
  • Take a small repository in your strongest language, break one test, and fix the root cause while narrating each step aloud.
  • Add a new method to code you did not write, following its conventions, with tests for empty, null and boundary input.
  • Solve the PracHub practice problem on tracking a rolling failure rate per destination to rehearse writing a new method with edge-case tests.
  • Work the PracHub practice debugging problem about exports that duplicate a row range, and write down the reproduction steps you used.

Deliverable: One bug-fix commit with a reproduction note, one feature commit with tests, and a written solution for each of the two practice problems.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗
03Code review for Android or backend
  • Review three real pull requests aloud, at least one backend and one Android, and write every comment with a blocking or optional label.
  • Build a personal checklist ordered correctness, data and security, tests, readability, with backend items (idempotency, timeouts, N+1 queries) and Android items (main thread, lifecycle, state loss).
  • Pick your three most frequent comments and note which linter or CI check would remove the need for them.

Deliverable: Three written reviews, a one-page review checklist, and a list of three checks to automate.

Practice prompt ↗
04Tracking user events and event-driven basics
  • Design an event schema for tracking user actions in a listing-search flow: event name, id, timestamp, schema version, user or session identifier and consent handling.
  • Decide how events are delivered and deduplicated, and where an event can be lost or arrive twice.
  • Work the PracHub practice problem on diffing a projection against the primary without per-row point reads, and explain what it teaches about keeping a derived copy in sync.

Deliverable: A written event schema with a delivery and deduplication note, and a worked solution to the projection-diff problem.

Practice prompt ↗Practice prompt ↗
05Source of truth and design under time pressure
  • Write a migration plan for one entity moving from direct database calls to events: single writer, outbox or change-data-capture, idempotent consumers, reconciliation job, and where stale reads are accepted.
  • Practise a high-level design for a service of your choice with a fixed timer, in this order: scope, data owners, read and write paths, failure modes, trade-offs.
  • Work the PracHub practice problem on detecting a concurrent edit in an update path, and relate it to who may write a piece of data.

Deliverable: A one-page migration plan, one timed design write-up, and the concurrent-edit solution.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
06Technical debt, cloud cost and improving practices
  • Write a policy for balancing feature delivery and technical debt: how debt is recorded, what triggers paying it down, and how you explain the cost to a product manager.
  • List the cost levers in a typical cloud design (storage tiers and retention, data transfer, over-provisioned compute, chatty service calls) and give one example of measuring each.
  • Write a plan to improve one engineering practice, with a baseline metric, a pilot, a checkpoint and a stop condition.
  • Work the PracHub practice question on why the owner filter ignores the listing index as an exercise in performance and cost reasoning.

Deliverable: A debt policy, a cost-lever list with measurements, a practice-improvement plan, and the index question solution.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
07Behavioral rehearsal and full mock
  • Tell the past-projects story and the advocacy story aloud, including the rejected option and the strongest counter-argument.
  • Run a mock in which you answer one event-driven design question, review a short piece of code, and answer one behavioral prompt back to back.
  • Write the questions you will ask the team about reviews, testing and architecture decisions.

Deliverable: Recorded or written final versions of two stories, notes from the mock, and a list of questions for the team.

Practice prompt ↗Practice prompt ↗Practice prompt ↗

Expand any day for tasks and deliverables. Your progress is saved on this device.

Candidates describe the behavioral and final team conversations as covering professional trajectory, problem-solving method, and strategic and cultural alignment with the team. For a role that includes code review, mentoring and working with product managers, the strongest stories show a decision you made, the alternatives you weighed, how you persuaded or listened to others, and a result you can state.

Perform a code review focusing on Android or backend best practices.

medium
Technical and Domain Proficiency

Perform a code review focusing on Android or backend best practices.

Approach
  1. Start by saying what the change is meant to do, based on its description and tests, before commenting on any line. Then review in priority order: correctness first (null and empty input, off-by-one, error paths, resource cleanup), then security and data handling, then tests, then design and readability.
  2. For backend code, look at transaction boundaries, retry safety (is the handler idempotent if a request or event is delivered twice), N+1 queries, missing timeouts, unbounded result sets, and backwards-compatible API or schema changes. In Kotlin or Go, check coroutine or goroutine lifetimes, context cancellation and ignored errors.
  3. For Android code, look at work on the main thread, lifecycle-aware collection of streams, references to Activities or Views that outlive them, state loss on configuration change, and scope choice for coroutines.
  4. Check the tests: would they fail without the change, do they cover the edge cases, and do they depend on time, network or ordering? A change with no test for its main branch is a review finding by itself.
  5. Write each comment so it can be acted on: quote the line, name the risk, suggest a fix, and mark it blocking or optional. Say what is good about the change as well, and ask a question when you are unsure rather than asserting a bug.
Follow-up
  • Which of your comments would block the merge, and which would you leave as suggestions?
  • The author disagrees with your main comment. How do you resolve it?
  • What would you automate with a linter, static analysis or a CI check so a person never has to write that comment?

Discuss your past project experiences and how they prepared you for this role.

medium
Behavioral and Strategic Alignment

Discuss your past project experiences and how they prepared you for this role.

Approach
  1. Pick two or three projects that map onto the requirements candidates describe: backend services in Java, Kotlin or Go, automated testing, cloud-based architecture, and event-driven or cost work if you have it. For each, give two sentences of context, then spend the time on what you personally decided.
  2. Make the link to this role explicit in one sentence per project, for example how a migration you ran taught you to keep consumers idempotent, or how a flaky test suite led you to change how you test.
  3. Include one trade-off per project: the option you rejected, what it would have cost, and why the choice you made fit the constraints at that moment.
  4. Close with a result you can defend (a measured change, an incident that stopped recurring, a release that became safer) and one thing you would do differently now.
  5. The mistake that sinks this answer is a chronological tour of employers and technologies. Use 'I' for your own work and name teammates' contributions separately.
Follow-up
  • Which part of that project was yours rather than the team's?
  • What was the hardest trade-off, and what did you give up by choosing as you did?
  • Which of your projects is least like this role, and what carries over from it?

How do you approach providing a strategic plan to improve engineering practices within a team?

medium
Behavioral and Strategic Alignment

How do you approach providing a strategic plan to improve engineering practices within a team?

Approach
  1. Begin with diagnosis, not tools. Gather evidence of the actual problem: escaped defects, flaky or slow tests, review turnaround, repeated incident causes. Pick one or two problems and record a baseline number for each.
  2. State a measurable goal and a small first step the team can try, such as a pilot on one service: tests required on changed code, a short review checklist, a CI gate for the flakiest suite, or a written decision record for architecture changes.
  3. Cover buy-in: talk to the engineers affected, explain the cost in their time, make the pilot reversible, and align the timing with the delivery commitments of product managers.
  4. Roll out in phases with owners and a checkpoint. Review the metric at the checkpoint, keep what moved it, and drop what did not.
  5. The mistake is a wish-list of tools or a mandate with no baseline. Show that you would measure first, change little, and let evidence decide what spreads.
Follow-up
  • A senior engineer says this will slow delivery. How do you respond?
  • Which metric would you check after the first checkpoint, and what result would make you stop?
  • How would the plan change if you were a team member rather than the lead?

Describe a time you had to advocate for a specific technical direction within a group setting.

medium
Behavioral and Strategic Alignment

Describe a time you had to advocate for a specific technical direction within a group setting.

Approach
  1. Choose a decision with real alternatives, such as a message broker, a migration approach, a testing strategy or a build-versus-buy call, where reasonable people disagreed. State your position and the criteria you used.
  2. Show the evidence you brought to the group: a prototype, a benchmark, an incident history or a cost estimate. Say how you presented the trade-offs, including the costs of your own option.
  3. Describe how you handled the opposing view: state it fairly, say what would have changed your mind, and adjust the proposal where the objection was right.
  4. Report the outcome honestly. The group may have adopted your plan, a mix, or the other option; if you were overruled, say how you committed to the decision and what you did to make it succeed.
  5. The mistake that sinks it is a story in which you were right and everyone else was slow. Candidates are advised to show flexibility, so include a point where you changed your position.
Follow-up
  • What evidence would have changed your mind?
  • How did you explain the decision to people outside engineering?
  • What happened afterwards with the colleagues who disagreed?
  • 01

    Discuss your past project experiences and how they prepared you for this role.

  • 02

    How do you approach providing a strategic plan to improve engineering practices within a team?

  • 03

    Describe a time you had to advocate for a specific technical direction within a group setting.

  • 04

    How do you balance immediate feature delivery with long-term technical debt reduction?

  • 05

    Tell me about a time a test or code review caught a defect before it reached users.

  • 06

    Describe a time you reduced the cost or complexity of a system you owned.

PracHub preparation framework ↗
How should I split my preparation time?

Split it across the three reported areas rather than going deep on one. Spend practice sessions on working in existing code (fix a failing test, add a method, review a change), on event-driven design with a clear data owner for each entity, and on behavioral stories. Candidates are advised to practise explaining their thinking aloud, so speak your answers instead of only reading about them.

AVIV Group Software Engineer candidate reports ↗
How long does the process take and how many rounds are there?

Candidates report four rounds over about 3-5 weeks: Initial Screening, Technical Assessments, Behavioral Discussions and Final Team Discussions. They also say the process varies with the team and the seniority of the role, so ask your recruiter which stages and formats apply to you.

AVIV Group Software Engineer candidate reports ↗
Which languages and technologies should I prepare?

The requirements candidates describe name modern languages such as Java, Kotlin or Go, automated testing and cloud-based architectures. Event-driven systems, FinOps or cloud cost optimization, and Android are listed as nice-to-have. Candidates are told that strong software engineering fundamentals matter more than a specific stack, so do your coding practice in the language you are strongest in.

AVIV Group Software Engineer candidate reports ↗
Is there a take-home assignment?

Candidates report that the Technical Assessments stage may be a take-home assignment, live coding sessions, or both. Prepare for each. For a take-home, make small commits, add tests, and write a README listing your assumptions and trade-offs. For live coding, practise the read, reproduce, fix and test routine while speaking your reasoning.

PracHub Software Engineer practice ↗
What topics does AVIV Group test in interviews?

Reported topics are system design, coding challenges, event-driven architecture, FinOps and cloud cost optimization. The reported questions cover fixing a unit test, adding a method to provided code, reviewing code for Android or backend practice, tracking user events, source of truth in an event-driven migration, high-level design under time constraints, balancing delivery with technical debt, and three behavioral prompts.

AVIV Group Software Engineer candidate reports ↗
How do I prepare for FinOps questions without cloud cost experience?

Learn the main cost levers and how each is measured: storage tiers and retention, data transfer between services or regions, over-provisioned compute, and chatty service calls. Then take a system you know and describe two changes that would lower its bill and what each would cost in latency, complexity or risk. Being honest about exposure and reasoning clearly about trade-offs is better than claiming experience you lack.

PracHub Software Engineer practice ↗
Sources & methodology 3 sources ↗

No official company page is cited. Rounds and questions come from candidate reports and PracHub editorial material; each source shows the date it was read.