Affinity · Software Engineer
Updated · 2026-10-02

Affinity Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Candidates describe Affinity as a company with user-facing products, and describe the Software Engineer role as building and maintaining scalable software behind them. The reported day-to-day work is building features alongside product managers, designers and other engineers, fixing defects, taking part in code reviews and refactoring existing code. The reports name no specific product, customer or team, so this guide does not guess at them. Read the posting you applied to for team details.

This guide is for candidates interviewing for a Software Engineer role at Affinity. It covers the three reported stages and the question families candidates report: technical and domain questions, system design, problem-solving cases, coding and behavioral. The stack candidates describe includes JavaScript, HTML5, CSS, MySQL and SQL, with Python or Ruby as alternative languages. React, Vue.js, AWS and Azure are described as nice to have.

Candidates report three stages: a half-hour informational call with the engineering director, technical interviews with engineers, and behavioral interviews. Reported timelines run from roughly 3-5 weeks to 4-6 weeks.

System Design (Service Implementation)JavaScriptWeb Technologies

37 min read

Browse Software Engineer questions

See the practice prompts

27Practice promptsAcross five skill areas

The reported topic list for this role is a web-development stack: JavaScript, HTML5, CSS, browser behaviour, MySQL and service implementation. The requirements candidates describe add RESTful API design and SQL, with React, Vue.js and a cloud provider as extras. Preparing for this loop therefore means being able to explain how a web application works from browser to database. Example questions candidates report include how to implement a feature with modern web technologies, how to optimize a slow API response, and the difference between XAMP and WAMP environments.

The reported questions fall into five families. Technical and domain questions cover web protocols, state management in a web application, RESTful API design and your relational database experience. Design questions cover real-time data processing, microservices, fault tolerance, scalability and trade-offs from your own architectural decisions. Problem-solving cases cover building a feature from requirements, debugging production, slow applications, analytics-driven engagement and a mid-project pivot. Coding questions are longest substring without repeating characters, binary search, trees or graphs, sorting a large dataset and reversing a linked list. Candidates describe coding as something you may be asked to do, not a certainty, so be ready for it.

The technical stage is reported to centre on your past projects and how you solve problems, so your own work is the main study material. Pick two projects you can describe in depth: the architecture, the part you owned, one bug, one trade-off and one measured result. Those same projects supply most of your answers in the behavioral stage, where candidates report questions on collaboration, prioritising, advocating for a technical decision and handling conflict. Keep a story bank so one project does not carry every answer.

01

Initial Screening

reported

Candidates report a half-hour informational call with the engineering director. It is described as a chance to learn about the company and to share your background, and no coding or design exercise is reported for it. Treat it as a two-way conversation: a short career narrative from you, then specific questions about the engineering team.

What to demonstrate

  • How you describe your background: roles, projects and the languages you work in
  • Your reasons for applying and the questions you ask about the engineering team

How to prepare

  • Write a short career narrative that names the languages and tools you have shipped with, mapped to JavaScript, Python or Ruby, and SQL.
  • Choose the one project you would be happiest to discuss in depth in the technical interviews, and be ready to say what you owned in it.
  • Write three questions for the director about how features move from product managers and designers to release, and how code review works on the team.
  • Ask what the remaining stages look like and who you will meet, then note the answer.
Affinity Software Engineer candidate reports ↗
02

Technical Interviews

reported

Candidates report multiple technical interviews with engineers of varying experience levels, centred on your past projects and how you approach problems. The coding, design, problem-solving and technical and domain questions in this guide are the material this stage draws on. Topics candidates list for the role are JavaScript, HTML5, web technologies, MySQL and service implementation. Approach it by narrating: restate the problem, state assumptions, give a first solution with its cost, then improve it.

What to demonstrate

  • Depth on your past projects: what you built, decided and measured
  • Problem-solving approach, including how you break problems into parts and choose data structures and algorithms
  • Working knowledge of web technologies and MySQL, including writing efficient queries

How to prepare

  • For two projects, write a sheet with the architecture, your own contribution, one bug you diagnosed and one trade-off you made.
  • Refresh JavaScript fundamentals you may be asked about: closures, the event loop, promises and async/await, and how the browser handles events.
  • Write queries by hand for joins, GROUP BY and HAVING, and practise reading EXPLAIN output on MySQL for a slow query.
  • Solve the longest substring, binary search and linked-list reversal questions aloud in JavaScript or Python, stating complexity and edge cases each time.
Affinity Software Engineer candidate reports ↗
03

Behavioral Interviews

reported

Candidates report behavioral interviews aimed at interpersonal skills and cultural fit. The leadership themes reported are facilitating discussion and building consensus, mentoring junior engineers, and handling conflict or differing opinions. Approach it with a bank of real stories, each with your decision, your reasoning and a result, rather than general statements about how you work.

What to demonstrate

  • Collaboration with a team and with cross-functional partners
  • Leading or influencing a technical decision, and handling disagreement
  • How you prioritise across several projects

How to prepare

  • Write five stories from real work: a hard project, a prioritisation call, a team collaboration, a technical decision you argued for and a conflict.
  • For each story, note the decision you personally made, the alternatives, and an outcome you can state with a number or a concrete change.
  • Add a mentoring example with a junior engineer, since mentorship is a reported leadership theme.
  • Rehearse each story aloud in about a paragraph and check that you say what you did, not only what the team did.
Affinity Software Engineer candidate reports ↗

PracHub editorial advice for the preparation topics above.

01

Answering the web-state question by naming a library instead of explaining where state lives

Separate server data, client UI state, URL state and persisted state, say where each should live, and name the trade-off of each. Then place a library such as React or Vue.js in that picture if you have used one.

02

Listing database features when asked about your relational database experience and the queries you wrote

Bring three real queries: a join, an aggregation and one tuned with an index after EXPLAIN. Be ready to explain every clause, since MySQL and SQL are in the reported requirements.

03

Drawing boxes for the microservices, fault-tolerance or real-time processing design questions without requirements or failure modes

Open with scale, latency and consistency requirements, then name what happens when each dependency fails, using retries with backoff, timeouts, idempotency and queues where they fit.

04

Coding the longest substring, binary search or linked-list question silently, with no complexity analysis or edge cases

Narrate: restate the input, give the brute-force cost, then the improved approach. Test on an empty input, a single element and repeated characters, and state time and space complexity.

05

Being unable to go deep on your own projects when the technical stage centres on them

Prepare two project sheets covering architecture, your contribution, a bug and a trade-off. Rehearse follow-ups on why you chose each technology.

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

21 technical prompts0 include a worked solution

Write a function to find the longest substring without repeating characters.

medium
Coding / Algorithms

Write a function to find the longest substring without repeating characters.

Approach
  1. Brute force checks every substring for duplicates in O(n^3), or O(n^2) with a set per start index; say that before optimising.
  2. Use a sliding window with a map from character to its last index: for each right index, if the character was last seen at or after left, move left to that index + 1; update the best length as right - left + 1.
  3. Moving left with max(left, last[c] + 1) prevents the window from moving backwards when the stored index is stale; each character is processed once, so time is O(n) and space is O(min(n, alphabet size)).
  4. Edge cases: empty string returns 0, all identical characters return 1, all distinct return n; in JavaScript, indexing a string reads UTF-16 code units, so emoji count as two unless you iterate with for...of or Array.from.
Follow-up
  • Return the substring itself, not just its length.
  • How would you find the longest substring with at most k distinct characters?
  • How does the solution change for a stream too large to hold in memory?

How would you implement a binary search algorithm?

medium
Coding / Algorithms

How would you implement a binary search algorithm?

Approach
  1. State the precondition: the array is sorted (or the predicate is monotone); binary search halves the search space each step, giving O(log n) time and O(1) space iteratively.
  2. Fix one invariant and keep it: with an inclusive range use lo = 0, hi = n - 1, loop while lo <= hi, and move lo = mid + 1 or hi = mid - 1; with a half-open range [lo, hi) loop while lo < hi and set hi = mid.
  3. Compute mid as lo + (hi - lo) / 2 (integer division) to avoid overflow in fixed-width integer languages; Python integers do not overflow, and JavaScript numbers are exact up to 2^53.
  4. With duplicates, write the lower-bound variant (first index with a[i] >= target) and derive first and last occurrence from it; test empty arrays, one element, the target absent, below the minimum and above the maximum.
Follow-up
  • Search for a target in a sorted array that has been rotated.
  • Find the smallest value x for which a monotone condition holds (binary search on the answer).
  • How would you search a sorted list whose length you do not know?

Solve a problem that involves manipulating data structures like trees or graphs.

medium
Coding / Algorithms

Solve a problem that involves manipulating data structures like trees or graphs.

Approach
  1. Pick the representation first: an adjacency list costs O(V + E) space and suits sparse graphs; an adjacency matrix gives O(1) edge checks at O(V^2) space.
  2. Choose the traversal from the question: BFS for shortest paths in unweighted graphs and level order in trees, DFS for connectivity, cycle detection and path enumeration; both run in O(V + E) with a visited set on graphs.
  3. Name the specialised algorithm when it applies: topological sort (Kahn's algorithm with in-degrees) for dependencies, Dijkstra with a binary heap in O((V + E) log V) for non-negative weights, union-find for connected components under edge additions.
  4. For trees, use recursion that returns a value per subtree (height, sum, validity bounds for a BST); a skewed tree makes recursion depth n, so switch to an explicit stack when Python's default recursion limit of 1000 could be hit.
  5. Edge cases: empty tree or graph, disconnected components, self-loops, cycles in what was assumed to be a tree, duplicate edges.
Follow-up
  • How do you detect a cycle in a directed graph, and how does that differ from an undirected one?
  • Given course prerequisites, return a valid order or report that none exists.
  • How would you find the lowest common ancestor of two nodes in a binary tree?

Discuss your approach to sorting a large dataset.

medium
Coding / Algorithms

Discuss your approach to sorting a large dataset.

Approach
  1. Ask how large, what key type, and whether stability matters; if it fits in memory, use the language sort: Python's sorted is Timsort (stable, O(n log n), fast on partly sorted data), and JavaScript's Array.prototype.sort is stable since ES2019 but compares as strings by default, so numbers need (a, b) => a - b.
  2. Know the trade-offs: quicksort is O(n log n) on average but O(n^2) with bad pivots, heapsort is O(n log n) worst case with O(1) extra space but not stable, merge sort is stable with O(n) extra space.
  3. For bounded integer keys, counting or radix sort beats comparison sorting at O(n + k) or O(d(n + b)).
  4. When the data exceeds memory, use an external merge sort: sort chunks that fit in RAM, write sorted runs to disk, then k-way merge them with a min-heap of size k, so the cost is dominated by sequential I/O passes.
  5. Often you do not need a full sort: top k needs a size-k heap in O(n log k), and in MySQL an index that matches ORDER BY avoids a filesort; across machines, sample keys to range-partition data, sort each partition and concatenate.
Follow-up
  • How many merge passes does an external sort need for a given memory size and file size?
  • How would you find the 100 largest values in a billion-row file?
  • Why does stability matter when sorting by several keys?

Write code to reverse a linked list and explain your thought process.

medium
Coding / Algorithms

Write code to reverse a linked list and explain your thought process.

Approach
  1. Iterate with three pointers: prev = null, curr = head; on each step save next = curr.next, set curr.next = prev, then move prev = curr and curr = next; return prev as the new head.
  2. State the cost: O(n) time and O(1) extra space; a recursive version is also O(n) time but uses O(n) call stack, which can overflow on long lists.
  3. Trace it out loud on a three-node list to show no node is lost, since saving next before relinking is the step that prevents losing the rest of the list.
  4. Edge cases: empty list, single node, two nodes, and making sure the old head's next ends up null so the result has no cycle.
Follow-up
  • Reverse only the nodes between positions m and n.
  • Reverse the list in groups of k nodes.
  • Use reversal to check whether a linked list is a palindrome in O(1) extra space.

The plan follows the three reported stages. Day 1 builds your project inventory, days 2-6 cover web fundamentals, JavaScript, MySQL, coding and design, and day 7 is behavioral stories and a full mock.

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 and inventory your projects
  • Write the three reported stages and, beside each, what you need to bring: a career narrative, project depth, and stories.
  • Pick two projects and write for each the architecture, your contribution, one bug you diagnosed, one trade-off and one measured outcome.
  • Compare the stack candidates describe (JavaScript, Python or Ruby, SQL, REST, with React, Vue.js, AWS or Azure as extras) with your experience and mark the gaps.

Deliverable: A one-page loop map, two project sheets, and a list of stack gaps to close this week.

02Web protocols, state and REST
  • Answer aloud the web protocols question, naming HTTP/1.1, HTTP/2, HTTP/3, WebSocket and TLS and when each applies.
  • Answer aloud how you manage state in a web application, separating server, UI, URL and persisted state.
  • Sketch a REST API for one resource of your choice with endpoints, status codes, idempotent methods, pagination and error format.

Deliverable: Spoken answers to the protocol, state and REST questions, plus a one-page REST API sketch.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
03JavaScript, HTML5 and building a feature
  • Refresh closures, the event loop, promises and async/await, and write a short example of each.
  • Build a small search box in plain JavaScript and HTML5 that debounces input and fetches from an API, handling loading and error states.
  • Answer aloud how you would build a feature from a set of user requirements, from clarifying questions to rollout.

Deliverable: Working code for the search box, a one-page JavaScript cheat sheet, and a spoken feature-building answer.

Practice prompt ↗
04MySQL, queries and slow applications
  • Write by hand a join, a GROUP BY with HAVING, and a window-function query for a schema you know.
  • Do PracHub's SQL practice questions on version gaps with window functions and on holding a per-tenant cap under concurrent creates.
  • Take one slow query, read EXPLAIN, add a composite index and record the plan before and after.
  • Answer aloud how you would optimize a slow-running application, working from measurement to fix.

Deliverable: Three handwritten queries, a before-and-after EXPLAIN note, and your spoken relational database and slow-application answers.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗
05Coding aloud
  • Solve the longest substring without repeating characters question with a sliding window and a hash map, in JavaScript or Python.
  • Write binary search iteratively, then handle duplicates and an empty array.
  • Reverse a linked list iteratively and recursively, then do one tree or graph traversal with BFS and DFS.
  • Explain how you would sort a dataset too large for memory, including external merge sort.

Deliverable: Tested solutions for the substring, binary search, linked list and one tree or graph problem, plus a spoken external-sort explanation.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗
06System design and production problems
  • Design a real-time data processing system: ingestion, queue, workers, storage and the read path, with failure handling.
  • Answer aloud the microservices, fault tolerance and scalability questions, using your own architecture trade-offs as examples.
  • Write up a production debugging story: symptom, first checks, cause, fix and prevention.
  • Outline how you would improve user engagement from analytics data: events, funnel, hypothesis and how you would test it.

Deliverable: One design diagram with failure modes, spoken design answers, a production debugging write-up and an analytics-to-action outline.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗
07Behavioral stories and full mock
  • Write and rehearse stories for the challenging project, prioritisation, collaboration, advocating for a technical decision, conflict and mid-project pivot questions.
  • Check each story states your decision, the alternatives, and an outcome you can measure.
  • Run a full mock: a short intro as for the first call, one project deep dive, one coding problem and two behavioral questions.

Deliverable: A story bank covering all six behavioral prompts and one recorded or peer-reviewed mock loop with notes.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗

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

Candidates report that the third stage covers interpersonal skills and cultural fit. The leadership themes reported are facilitating discussion and building consensus, mentoring junior engineers, and handling conflict or differing opinions. Prepare real stories that show your decision, your reasoning and a result.

Describe your experience with relational databases and provide examples of queries you have written.

medium
Technical / Domain Questions

Describe your experience with relational databases and provide examples of queries you have written.

Approach
  1. Choose one real system and describe its schema briefly: the main tables, the keys, and the relationships such as one-to-many or a join table. Name actual tables so the answer is concrete. MySQL is the database candidates list for this role, so say which version and storage engine you used if you know them.
  2. Walk through two or three queries you actually wrote, one per shape: a multi-table JOIN with filters, an aggregation with GROUP BY and HAVING, and one using a subquery, CTE or window function. Mention that CTEs and window functions need MySQL 8.0 or later. Explain why you chose INNER or LEFT JOIN, and what happens when a WHERE condition on the right-hand table removes the NULL rows a LEFT JOIN produced.
  3. Include one performance story: you ran EXPLAIN, saw a full table scan or a filesort, added a composite index with equality columns first and then the range or sort column, and re-ran it to compare. Note the cost of an extra index on writes.
  4. Cover correctness: transactions and what InnoDB's default isolation level (REPEATABLE READ) gives you, parameterised queries against SQL injection, and how you ran a schema change on a large table. Say only what you did, and name any gap plainly with how you would close it.
Follow-up
  • How would you speed up a query that joins two tables with millions of rows each?
  • Given an index on (a, b), which queries does it help and which does it not?
  • When would you denormalise a table, and what do you give up?

Can you describe a challenging project and how you overcame obstacles?

medium
Behavioral / Leadership

Can you describe a challenging project and how you overcame obstacles?

Approach
  1. Choose a project where you made decisions and the obstacle was real: a migration, a performance problem, unclear requirements or a dependency that slipped. A story where the obstacle was a tight deadline and you worked longer shows little.
  2. Open with a two-sentence situation, then name the obstacle precisely, for example a query that degraded as data grew or an API contract the front end could not meet. Spend most of the answer on what you tried, including the approach that failed and why.
  3. State the result with something checkable: latency before and after, a defect rate, a deadline met, or a process that changed. Close with what you would do differently.
  4. Keep the story at the level of your own actions. Saying 'we' throughout leaves it unclear what you did, so say 'I' for your decisions and name the teammates who contributed.
Follow-up
  • What was the hardest decision in that project, and what alternatives did you reject?
  • How did you know your fix worked and not that conditions changed?
  • What would you do differently if you ran it again?

How do you prioritize tasks when working on multiple projects?

medium
Behavioral / Leadership

How do you prioritize tasks when working on multiple projects?

Approach
  1. Give a real instance, not only a framework: list the competing items you had at that moment, such as a production defect, a feature deadline and a code review backlog.
  2. Show your criteria: user or revenue impact, urgency and cost of delay, what blocks other people, and effort. Say how you checked with the product manager or other stakeholders rather than guessing.
  3. Say what you deferred or dropped and how you told the affected people, so the trade-off was visible to them.
  4. Describe how you re-evaluated when something changed mid-week, since priorities rarely stay fixed. A weak answer claims you do everything or that you simply work harder.
Follow-up
  • Tell me about a time you got the order wrong, and what it cost.
  • What do you do when two stakeholders each say their item is the top priority?
  • How do you protect time for refactoring or technical debt?

Give an example of how you have successfully collaborated with a team.

medium
Behavioral / Leadership

Give an example of how you have successfully collaborated with a team.

Approach
  1. Choose a collaboration with cross-functional partners, since candidates describe working with product managers, designers and other engineers. Name the goal and who was involved.
  2. Show your own contribution and the mechanisms you used: a short design write-up, an agreed API contract between front end and back end, early code review, or a shared task board.
  3. Include one friction point, such as a requirement that changed or two people with different approaches, and say how you handled it.
  4. End with the outcome and what the team did better afterwards. Avoid a story where everything went smoothly or where you did the work alone.
Follow-up
  • What was your specific contribution compared with the rest of the team?
  • How did you handle a teammate who was not delivering?
  • What would you change about how that team worked?

Describe a time when you had to advocate for a technical decision.

medium
Behavioral / Leadership

Describe a time when you had to advocate for a technical decision.

Approach
  1. State the decision and the alternatives in one or two sentences, for example a library or architecture choice, a database design or whether to refactor now.
  2. Show the evidence you gathered: a prototype, a benchmark, incident history or a cost estimate. Show you tailored the argument to the audience, with delivery and risk for a product manager and maintainability for engineers.
  3. Describe how you handled the pushback: the objection you heard, how you addressed it, and any compromise you made.
  4. Give the outcome honestly, including if you were partly wrong or overruled and how you committed to the final call. A story where you simply won and everyone else was mistaken reads poorly.
Follow-up
  • What was the strongest argument against your position?
  • What would have changed your mind?
  • How did you act after the decision went another way?

How do you deal with conflict within a team?

medium
Behavioral / Leadership

How do you deal with conflict within a team?

Approach
  1. Pick a conflict about substance, such as a code-review disagreement, an API design dispute or a priority clash, and keep it professional with no villain.
  2. Describe your steps in order: understand the other person's position first, usually one-to-one; find the shared goal; bring data or a small experiment; and agree who decides and how before escalating.
  3. Show your own part honestly, including something you changed after listening, and describe how the working relationship stood afterwards.
  4. State the concrete resolution and result. Saying you avoid conflict, or that it is always the other person's fault, are the two answers that fail.
Follow-up
  • What if the other person still disagreed after you showed the data?
  • When have you escalated a disagreement, and how did you decide to?
  • How do you handle a disagreement with someone more senior?
  • 01

    Can you describe a challenging project and how you overcame obstacles?

  • 02

    How do you prioritize tasks when working on multiple projects?

  • 03

    Give an example of how you have successfully collaborated with a team.

  • 04

    Describe a time when you had to advocate for a technical decision.

  • 05

    How do you deal with conflict within a team?

  • 06

    Can you describe a time when you led a project and what the outcome was?

PracHub preparation framework ↗
How difficult is the interview process?

Reports give no reliable difficulty rating. The challenge is breadth: web fundamentals, JavaScript, MySQL, system design, coding and behavioral stories all appear in the reported questions. Plan for several weeks of preparation and use the seven-day plan to cover each area at least once.

Affinity Software Engineer candidate reports ↗
How long does the process take?

Candidates give timelines of roughly 3-5 weeks and 4-6 weeks, with several interviews spread across that period. Some also mention asynchronous communication as schedules vary. Ask your recruiter for the stages and expected timing at the start.

Affinity Software Engineer candidate reports ↗
What topics does Affinity test in interviews?

Candidates list JavaScript, HTML5, web technologies, MySQL and service implementation, along with system design, problem-solving cases and coding. One reported example asks about the difference between XAMP and WAMP environments, which are bundled local web server stacks. XAMPP is cross-platform and WAMP is Windows-only.

Affinity Software Engineer candidate reports ↗
What does the first call involve?

Candidates describe a half-hour informational call with the engineering director. It is reported as a chance to learn about the company and to share your background. Prepare a short career narrative and a few questions about the team.

PracHub Software Engineer practice ↗
Which languages and tools should I prepare?

The requirements candidates describe list JavaScript, Python or Ruby, web frameworks, RESTful API design and SQL. AWS or Azure, React or Vue.js, and agile experience are described as nice to have. For coding questions, choose the one language you are fastest in.

PracHub Software Engineer practice ↗
Will there be a coding exercise?

Reports describe coding as something you may be asked to do, with questions such as longest substring without repeating characters, binary search, linked-list reversal and sorting a large dataset. No take-home assignment is reported. Practise writing and testing each of these aloud before your technical interviews.

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.