Introduction

My name is Ayush, and I am a software engineer from Surat, a city in the western part of India. I took my first programming class in 9th grade, and I was immediately hooked. The ability to codify logic into lines of code and get a bunch of electrical circuitry to do anything you can think of still blows my mind 15 years later. As I did not have a strong notion of what I wanted to do, I pursued Electrical Engineer as a major for my undergraduate degree. I also explored my interest in Computer Science by completing a minor degree in it. In my studies, I gravitated towards math, statistics, and computer vision as they offered a perfect blend of Computer Science and Electrical Engineering for me. My thesis was on removing smoke and specular artifacts from biomedical images using probabilistic modelling. After graduation, I joined Goldman Sachs as a software engineer, and I learned a lot about the software development process in a formal setting. However, I still wanted to do something in the computer vision/data space, so I came to the U.S. in 2019 for a master's degree. In my program at Georgia Tech, I took courses related to computer vision and deep learning, and did my thesis in 3d reconstruction domain. After that, I joined Amazon as a software engineer and learned designing backend system using micro-services. In my current autonomy engineer role at Skydio, I work on 3d scanning software for our drones. My responsibilities include design of the user facing application, core API design, and a few things in the embedded stack. In the day-to-day work, I use my experience in building software systems, computer vision fundamentals, and photogrammetry.  

Software Development Fellow

career options

Computer Science has proliferated into many engineering disciplines in the last decade, and as a result there are many different career paths, each requiring several distinct skill sets. Here are a few of them which I have some experience or interaction with.
1
Frontend Engineer
2
Backend Engineer
3
DevOps Engineer
4
Machine Learning Engineer
5
Autonomy Engineer
6

Software Development Fellow

 skills

What are the main hard skills you use on a daily basis in your current job?

1
Programming and Scripting Languages
Most of the code I write is in Python, but it occasionally involves a bit of C++. Python is used for user-facing software on our drones, and C++ is used for critical components in the middleware which require efficient low-latency code. I have not had formal training in these two languages, but the fundamentals are shared between most languages. So it's important to master a few of them and learn others on the go according to the requirement. The core skill set is transferrable across the tech stack, and employers do not expect candidates to know the exact tech stack used by their teams. Each of my jobs has had an onboarding period of a few months to gain familiarity with the tools and technologies used by the team.
2
Computer Vision Fundamentals and Mathematics

To design a 3d scanning and dataset collection software for autonomous drones, I need to use the computer vision fundamentals, particularly related to Photogrammetry. I need to understand the math behind the 3d reconstruction technologies and translate user requirements into math and logic which we can then program. I learnt the basics in school through courses focused on this domain, and by taking on research projects.

3
Version Control System
I collaborate with different software engineers both within and outside of my team, and we rely heavily on Git for tracking our individual changes, resolving conflicts, and reviewing each other's work. I learnt the basics of Git in school to collaborate with my classmates for projects and homework.
4
5

What are the main soft skills you use on a daily basis in your current job?

1
Communication
Effective communication skills are important in any job, and software development is no exception. It is essential to understand user requirements and communicate technical topics to non-technical stakeholders, convey your ideas to your teammates, and raise any concerns with the leadership of the company. Communication is a skill which can only be built through practice, and it is essential to put ourselves out there, and gradually refine this skill.
2
Problem Solving
Each software product has its own bespoke requirements, and software design patterns and paradigms need to be adapted to those specific requirements. Problem solving skills are also useful in debugging code, performing root cause analysis, and figuring out the performance bottlenecks in the code. This skillset can be developed by taking on challenging and new tasks head on, competitive coding challenges, diving into the code bases and technical description of software systems you might not be familiar with.

3
Time Management
As a software developer, there is always a backlog of technical debt to be reduced, bug tickets to be investigated, new features to be delivered. These competing priorities make time management an important skill, both at a personal level and to ensure the team is on the right track for long-term sustainability. This skillset can be developed both inside and outside the software engineering domain, even in the academic program, by utilizing calendar blocking and scheduling, task prioritization, and estimating the hours required for each task.
4
5

Ayush

’s personal path

Tell us about your personal journey in

Software Development Fellow

:

After my undergraduate degree, I did not have a clear idea of what a job in software development entails. As I result, I explored various domains and industries: like banking, Android app development, test infrastructure development through a combination of internships and other course projects. Being open to various opportunities helped me get a better picture of the professional landscape and build a portfolio for my job applications. During my master's program, I applied to countless jobs. LinkedIn is particularly helpful for networking and finding open positions. Networking events like career fairs are also important avenues to learn about different companies and apply. Often, job hunting can get frustrating because of the sheer amount of repetitive work needed to tailor resumes, write cover letters, etc. But it is important to be resilient and dedicate some time every day towards this. It is also important to always be technically prepared for the interviews with regular practice of algorithms, data structures, and system design. You may land an interview at any time and being prepared and confident allows you to tackle them as quickly as possible. For my current job, I interviewed for their internship back in school but was not selected. I joined a different company after graduation, and after a year I applied for their full-time position again with better preparation - and finally made it.

What would you tell your younger you regarding building your current career?

I would advise my younger self to be more open to stepping out of the comfort zone. I should explore more opportunities that do not exactly incline with my areas of interest of that. I was also late to realize the importance of networking, and my younger self should put in more effort in meeting people and getting to know about their work and careers, discuss and share ideas.

Final thoughts & tips

To conclude, I would urge you to follow your passion and instincts. Be confident in your abilities and leverage your experiences to tackle any new opportunities life presents you with. Software engineering is a dynamic and changing field, now more than ever. Your career might not evolve in a straight line, and that is perfectly fine! Rely on your network and be open to getting help and support.
Ayush Baid

Ayush Baid

Software Development Fellow
Open Avenues Foundation
Open Avenues Foundation

Ayush is a Software Development Fellow, based out of Bay Area, California. Ayush works as an Autonomy Engineer at Skydio, working on inspection and mapping software for drones. Ayush has a Masters in Computer Science from Georgia Tech, with specialization in Machine Learning. Ayush likes to play the piano, read, and be outdoors in his free time.

More like this