ThoughtWorks | Application Developer | India | Sept 2021 [Offer]
Summary
I received an offer for the Application Developer role at ThoughtWorks in India after a comprehensive interview process focusing on OOPS, clean code, TDD, and data structures. I ultimately accepted the offer due to the company's culture and growth opportunities despite other offers.
Full Experience
I interviewed for the Application Developer role at ThoughtWorks in India. My journey began with an OOPS Pairing Round (R1) where I had to select a story, which involved creating APIs for user and password validation. ThoughtWorks heavily emphasizes OOPS, Clean Code, and Test-Driven Development (TDD). I learned that it's okay to admit if you're new to TDD; interviewers are understanding. The key here was to continuously communicate my approach and ensure proper naming conventions for classes, methods, and variables. They weren't necessarily looking for a complete solution but rather a strong thought process.
The second round (R2) was fantastic—it felt more like a discussion than a typical interview. I was presented with Data Structures and Algorithms questions, specifically tasked to implement my own LinkedList from scratch, add data to it, and then reverse it. Following that, I had to implement Queues using Stacks and Stacks using Queues. Beyond DSA, we discussed database design for a pizza shop, REST API design, and Java 8 features like Streams.
As my previous work involved the Networking Domain, I had an additional third round (R3). This round delved deeply into my project experience and included discussions on networking concepts like SIP, VOIP, and RTP protocols.
Finally, the fourth round (R4) focused on Social Impact and Behavioral questions. This round was designed to understand my perspective on social topics and how I would handle situations as a consultant, given that ThoughtWorks offers a consulting grade. A key takeaway was to avoid being biased towards one side in discussions.
I was thrilled to receive an offer from ThoughtWorks. Although the compensation was lower than other offers I had at the time, I chose to join because of the unique interview process and the company's culture. It has proven to be one of my best decisions, providing immense work satisfaction and opportunities to learn new technologies and directly engage with clients, all while maintaining a good work-life balance.
Interview Questions (2)
I was asked to create my own singly linked list from scratch, including methods to add data. Following that, I had to implement a function to reverse the linked list. The entire code needed to be written on my favorite IDE.
I was challenged to implement a Queue data structure using only Stacks, and then, conversely, implement a Stack data structure using only Queues. I had to write the full code for both implementations.
Preparation Tips
While the post didn't explicitly detail my specific preparation strategy, I gathered several insights from the interview process that serve as valuable preparation tips. For the OOPS round, it's crucial to have a solid understanding of Object-Oriented Programming principles, clean code practices, and ideally, some familiarity with Test-Driven Development. During this round, I learned the importance of continuously communicating my thought process and rationale for design choices to the interviewer. Using clear and proper naming conventions for classes, methods, and variables is also highly valued. It's acceptable if the entire problem isn't solved, as the focus is more on the approach. For technical rounds, be prepared to implement fundamental data structures like Linked Lists from scratch and demonstrate knowledge of common DSA problems, such as implementing one data structure using another. Familiarity with database design, REST API principles, and modern language features (e.g., Java 8 Streams) is also beneficial. For behavioral rounds, practicing how to discuss social topics without bias and preparing for questions on handling client interactions is essential.