Working with Startups for over a year - I
I wrote this post to summarise my experience of working with Startups as a part-time SWE Intern / Consultant for almost a year. This was a unique experience for me, and I had varied learnings from the Startups that I worked with; some were major learnings, which made me grow as a Software Engineer.
Remote working has become a norm for many companies in the pandemic and it made it easy for an undergraduate student to work at a startup, which makes it quite enriching to have a fair share of corporate experience before diving into the real deal. I personally like working at a startup, and due to the fact that I don't have any experience working at a FAANG company yet.
I was working with all the startups as a part-time intern, so it meant that I could work with 2 startups at some point in time. This also meant that sometimes, I did feel burnt out, and it made me consider my decision of working at 2 startups as an intern. Nobody encourages you to try this path out, and I would be elaborating on my experiences with it in my next blog post.
In the first part of the blog, I would be sharing my learnings and in the second part, I would be deep-diving into my experiences of working with different startups, and how I fared throughout the year. I will also share some of the resources that I found useful while looking for my next/new gig. The learnings are in no sequential order.
Some of the learnings I gathered while working in a startup
Below is a summary of some of the most important learnings/observations, I had while working with startups. Many of the observations, might not make much sense, especially if you are working for a short duration of time. The longer you are involved, the more context you have about the problems that a startup is solving, and the general framework that you can observe with any early-stage growing company. It becomes more apparent about how startups function, and how you can work on making yourself more productive and efficient.
Communication is really, really important
Communication in general, is one of the vital non-technical skills for any Software Engineer. You can be a rockstar coder, but if you don't have fair communication skills, it would be difficult for anyone to appreciate the work.
Startups generally don't have a strict hierarchy; you would be working under CEO/CPO, if the headcount is too small; while some of the startups have some structure, and you would get the task spec from the Product / Manager, whom you would be reporting. Having a clear communication is important, making sure you can translate the features / queries into business terms because most of the time, people won't be understanding the technical jargons that we use it freely.
It also becomes important to be clear and responsive with your communication skills, if you have any feedback for your current role, or you would want a shift in your set of responsibilities; all of them require you to be clear, crisp and to the point in communicating your thoughts.
Being a clear communicator helps you in being in the same page with your team-mates, and in case of startups, it becomes imperative that each of the personnel can operate independently and still share the context with other team-members, and clear communication is one of the way to achive that.
Relationships are important
In the startup world, atleast for the Software Engineering startups, you can find people donning the hat of multiple roles and responsibility. The very people who were VP of engineering at some big tech company can very well be your next colleague, trying to setup the boilerplate of the code you are writing :P.
To sum it up, people are one of the most important assets in a startup. Just to give an example, the VCs who are one of the institutes who would fund the startup, often base their conviction for funding, on the pedigree of the core team of the startup. Having the core team of the startup belonging from a prestigious background, or experience in a big tech company, or having the experience of already successfully operating a startup gives them a confidence on their abilities to operate a startup successfully. Ideas are important, but so are the people, who are willing to forsee the vision from the idea state to reality.
Having good relationships with the startup members, becomes important. Having an ability to maintain and develop relationships with the team-members, could easily connect you to numerous people in the tech world. Networking works in the similar way as well, and people are willing to trust someone who either has a well defined pedigree/experience in that field, or someone whom they know and trust.
Just to give you an example, I was able to get my current job, because I was in touch with one of the recruiters of my current company since my 3rd year of college. I was applying for an internship role, but was unsuccessful in getting one. Having contact with them, and maintaining a cordial and responsive communication meant, that she was able to reach out to me, once there was a job opening. Having good contacts with people generally help you grow in the long run.
Learning curve is really high
Startups are often known for their high learning curve, and even if you have a prior background in a field, startups would challenge you like never before. I had been dabbling with different aspects of software engineering, like frontend, backend, infra, etc. Still after joining a startup, there were numerous things that required attention, but I didn't have much background to start with.
Using one of my experiences as an example, I didn't had much experience working with infra side of the things in Software Engineering. Infra can mean different things to different people, so to provide context, I wasn't aware of hosting an application to production, and all the related things that are present. AWS is one of the popular platforms used for managing the infra side of the things, and so when I joined the startup, I was expected to pull out a rabbit from the hat, for AWS :D
I was quickly trying to absorb the sea of information, and the learning curve was pretty high, atleast at the start. I was learning about EC2, and the other managed services, which would make a Software Engineer's life much more easier in managing things. I quickly started learning about AWS ECS, and other nuances that I would encounter while deploying the applications to production.
Suddenly, terms like high availability and low latency started to make sense, and I quickly realised that my application could certainly improve the latency for handling each requests. High availability of the applications became more important than before, and suddenly I started taking a close look at optimising the applications, and writing code with more thought and care.
Having a structured setup for work is important
I am not sure if this is relevant for a startup, but I decided to write about it for any kind of desk work which is related to coding. All of my internship(s) have been remote, so it made sense for me to invest in the basic infrastructure for making sure I am productive to code.
This holds for any other skill as well, so having a workstation, where you can perform well becomes really important. If you have a chance to setup your workstation, you can take a look at getting those ergonomic chairs(they would save you on your future back issues :D), those are pretty helpful, since our trade requires us to sit at the same place for more than 10-12 hours in a day.
You can easily see yourself working for 10-12 hours at a startup, so make sure that you don't slouch in a sofa, or find yourself working from your bed, just to save yourself that extra effort of sitting in a chair and working. Trust me, your energy is renewed when you seperate your workplace with your relaxation place.
If possible, get those dual monitor setup, this is pretty helpful for developing applications on the go, and help you monitor numerous log files, while you are investigating any issue in production. I am a sucker for dual monitor setup, helps me in getting a bird's eye view for the whole work.
Standing table seems to be in trend, but I haven't got a chance to try it out. It does seem useful, especially for changing the posture, and making sure we don't sit at the same place for a prolonged period.
Pace yourselves out: Focussing on one thing at a time
I often found myself overwhelmed with different number of challenges at the same time. This is the common theme at any startup, so it makes sense to break down the challenges, and address them one at a time.
While learning new technologies, I often visualized the whole task as a series of dependent sub-tasks, which you could work upon before moving onto the next one. I also made sure, that I was able to switch to tasks, which were not related with each other.
Referring to the diagram, you can focus on sub-tasks which are not related with each other, and this way make sure that you don't fret over the whole task, but rather focus on the sub-tasks on the go.
Try covering the sub-tasks in a topological ordering
Getting business feedback and having impact
Startups are often out to validate a niche engineering idea, which might turn out to be business-wise profitable. So it becomes important to make sure, that each of the iterations are making are adding some value to the business.
Just to give a context, I was working on adding a plugin feature for one of the startups(Cyble). While I was writing up code and churning out test suites, I personally didn't find it intellectually challenging. It was supposed to be a plain Python code, which was pretty standard, along with writing test suites for the plugin. However, it made a lot of business sense, because the plugin was supposed to be a start of a partnership with Splunk. The conversation that we had with the engineering team for integrating team, quickly made me realise about the business impact that I was creating for Cyble.
So it becomes important, that for a startup to make an economic sense, it would be crucial that the product makes a business sense, and all of the decisions, to a future feature that you are planning to make, should all make a business sense. That doesn't mean that you would suck the life out of any work which doesn't have any business impact, as startups are often known for working and experimenting with things, but somewhere down the line, as you would find, features and product decisions are often influenced by business impact.
Getting feedback is also important, as your product should make an impact on the work of the users for which they are using your product. An example for this, would be the time with Infinity Box that I was working, and we were building a scheduling application, which would help in assigning collection agents to collect back the Infinity Box(reusable food-containers) for clean-up. The alpha version of the application didn't suit our use case, and by gathering feedback and having the users on the mind, meant that we were able to come up with a decent application, which would be one of the foundation blocks for Infinity Box to run their business operations.
Reducing duplicate code : Story of using a single repo for multiple projects
I was working with Infinity Box for more than a couple of months, and at times when I was not writing code, I was consulting them for building up a solution for catering their operational challenges.
One of the challenges that we felt, were for getting acclimatised with the coding standard, and how the whole codebase was structured. We were using the micro-services based architecture, and this meant that we had 1-2 member teams, who handled the whole cycle of developing the feature to deployment to production. This also meant that, people were covering shifts for other teams, whenever we had bandwidth to attend to. So it required us to use a standardised code-base which could have been understood by all the teams.
This saved us a lot of time and effort later on, and although I had used my judgement to make sure we follow a standardised coding approach, this had more exponential returns, by making us compatible with practical challenges, where other teams could jump in to cover for the people who were the code owners.
Some of the resources for finding Internship/Consultation
I found the following list of resources useful for getting my next gig.
People often criticise LinkedIn for being a platform which has cringe-worthy posts throughout, and I don't disagree with that :P
However, there are lot of posts about big-tech companies and startups, which post about the open internship roles, which I find really useful for applying for one.
You can reach out to the recruiters/co-founders/CEOs of startups and share your interests about working for the company as an intern. People value a lot of previous experience and open-source contributions, especially if you are looking for a SWE/DevOps/SRE role. Make sure to be to the point and not beat around the bush, for they value a clear communicator to work with :)
Y-Combinator : WorkAtAStartup
Y-Combinator is an American technology startup accelerator, which helps startup raise their seed funding, and build their product, while having mentorship from founders of big companies who have made it big :)
I used the WorkAtAStartup section to find any open roles for internship. There are lot of startups here in YC which don't have their careers page setup, so there is a high chance that you would be able to contact with the co-founders directly and share your interests in working with a startup.
Careers Page : Can be a hit or miss
I often found careers page of any company, as one of the places, which might help you in getting an interview opportunity, but it's often not guaranteed. A Careers page is a necessary poison, which would hurt if you don't apply, but certainly doesn't help all the time. You can try getting a referral, sometimes it does help in getting response from the recruiting team. I had applied to Facebook many times with a referral, so I had got a response(which was often a rejection xD) always.
Personally, I had applied to a lot of companies for an internship role, but I found very few companies including Google, which revert back with an opportunity to interview. That is how I got to interview for Google SRE New Grad role, so I would often consider applying in one.
Reaching out to recruiters, especially for FAANG companies might not make a lot of sense, but then my current job(at the time of writing this post :P) was because of reaching out to a recruiter, so you never know :D
Twitter is one of the most underrated resources for getting an internship/jobs. I have found twitter to be one of the best place to upskill and share your technical learnings.
The tech-twitter has a lot of people from different sections of the tech; you could find startup founders, to highly experienced Individual Contributors, to folks working at FAANG companies. In short, it is an informal place for tech folks to hangout, and a place to share your learnings and ask for any open roles.
You can follow relevant folks in Twitter, may be follow me to start with :P