My tiny steps towards a Software R&D

I have been talking to a lot of friends and colleagues and they wanted to know how was my preparation and how was my journey towards Atlassian as a Software Developer. In this blog, I would like to share my journey towards getting a job in a Product Company and has the steps which I followed to achieve this.

All the big steps taken in life start with some motivation. Mine too. So before starting your preparation, find motivation, answer the question “Why do I need this”. This will help an individual to stay on track during uncertain times.

Most of the R&D’s look for Problem solvers and Innovators. This should be the main theme of your preparation. Improve your problem-solving ability and develop an innovation mindset.

On these lines, the understanding of the Algorithm and the Data structure will be an indicator of the ability of a candidate in solving other problems. This should be the starting point for the preparation.

To start with, buy a copy of Cracking the Coding Interview by Gayle Laakmann McDowell. This is a very practical book and a remarkable guide to approach the interview. Go through the concepts and try solving the problems in the exercise section. This will be a good starting point and helps you to understand the very basics of the overall interview process.

Don’t Reinvent the wheel, there are a lot of algorithmic and data structure problems already solved. Time is the key in solving a problem in the interview and hence trying to solve a problem without having a basic idea of it, takes a lot of time to solve. So, it would be helpful if you practice a lot of problems and also review the solutions by others. It would also be helpful to learn the standard algorithms to solve the general problem(eg: Floyd’s cycle detection algorithm to detect loops in a linked list).

On these lines, geeksforgeeks is a great place to practice/review/learn the problems. Look out for /data-structures/ and /fundamentals-of-algorithms/ sections of the website.

The outcome of this preparation should enable you to

  1. Understand the fundamentals of Data structures and Algorithms.
  2. Choose the appropriate DS to solve a given problem.
  3. Perform all the operations related to a DS.
  4. Understand the complexity of any given problem.
  5. Optimize the complexity of a given problem using algorithmic paradigms.
  6. ETC. You will learn a lot of things along the process.

Decide on a Programming language for coding exercises/interviews. Choose the language which you are most comfortable with and which would be helpful for competitive programming, to explain this to you with an example, it’s pretty straightforward to create and manipulate a data structure in python/JS, but it would require more number of lines to do that in JAVA/C++.

The Object-Oriented thought process. Most of the candidates are good in a programming language, but an understanding of the underlying framework is most important. Similarly, with OOP languages like JAVA, the Object-Oriented thought process is very essential. In these lines, Head First Java is a great book to start with. This also needs to be accompanied by the best practices, hence the understanding of the Design Patterns and how to refactor the code is necessary. Source making is a great place to learn these, look for the design_patterns and refactoring section of the website.

Most of the companies follow Test-Driven Development as it has a lot of advantages and it is one of the best practices for a developer to inculcate. Practice the TDD by driving the code through the tests.

An important characteristic of bigger software systems is their design. As a developer, it is essential to have ideas for designing these scalable systems. This can be learned by being involved in the architecture phase of a project and also by reading various aspects of the design. Start with learning the system design of a URL shortener. The System Design playlist by Tech Dummies consisting of ~30 videos, will give you a great overview of how the software systems are designed. It would also be helpful to get some understanding of the components of the System Design(Like DB, Messaging Queue, Using an API Gateway, etc..).

As an outcome of this study of the System Design, a candidate should be able to,

Design a Software System capable of catering the requirements, with the right choice of components during the design(should be able to justify your decision). You should be able to come up with the High level and Low-level designs. You should also be able to come up with designing the RESTful APIs. Some exploration of the UML is also advised.

Micro Service Architecture facilitates a good design by separation of concerns. Characteristics of a Microservice Architecture by Martin Fowler gives you a good understanding of the Micro Services world. You should explore this with an example to enhance your understanding and should be able to come up with a design based on this.

Develop the agile mindset. Most companies use this in their Software development lifecycle and hence it is important to align with this mindset. Practicing this is the best way to learn it and you can also read more about the best practices followed by a lot of companies on these lines.

Prepare your CV. The CV should be straight to the point, it should describe and reflect your current skills, experience, and abilities. The CV should not be too minimalistic(Which does not expose the necessary information), nor too descriptive(Difficult for a recruiter to go through all of it). Find a middle ground.

Apply first. After preparing and practicing well. It’s now time to apply. Keep applying to all the companies that you would wish to join(Do not hesitate). It will take some time for the recruiters to review the CV and to respond back to the candidate if the Job Description matches well with your CV. Meanwhile, keep practicing!!

It would be great to ask your peer(friend/ex-colleague/classmate) for a referral, but make sure you are prepared enough to give the interviews for the company to which you are being referred.

Be confident. During an interview the confidence is the key, it helps you to think clearly and approach a given problem with better ideas. Keep talking, always keep communicating your ideas, ask more questions, explain the thought process you have while solving the problem. By doing this, the interviewer will be able to guide u in the right direction and will be able to access the candidate.

Have an Impossible(I’m Possible) attitude. Even though the journey seems long enough, hard enough, But it is possible to crack the interview and get a job. Have a positive ➕ mindset throughout the journey and be patient enough to savor the sweet fruit.

Remember, “The two most powerful warriors are patience and time.”- Leo Tolstoy.

All the best!! You will succeed, Just Keep going!!

Connect with me on most of the social media platforms, with my name: Srinidhi Harathanahalli. Would be happy to connect with you 😃 and help you out if needed!!

Clap if you like the story 👏.