I used to overthink a lot when I was a student. I used to enjoy coding, implementing new projects, both personal and academic. But when I got my first (part-time) internship at a startup, I was really scared. I didn’t know what to expect. I was scared that- what if they dump some complex task on me and I can’t do it? What if I create a bug that breaks the entire system? And many other questions like these kept punching my brain.
Well, they did dump some pretty interesting tasks on me from the first week. Basically, that’s how most of the small startups work in Bangladesh. Anyway, somehow I managed to complete those tasks, and all other tasks later on.
But that’s not what I’m writing about today.
Today’s article is about my first full-time job. About how my first few weeks were at Chaldal, when I started as a Junior Software Engineer.
When I interviewed here, my idea about Chaldal was- “Just another e-commerce platform”. I used to think that- they just have an App and a Website, probably a team of 4–5 engineers, some delivery people, some management people, and that’s it. The only reason I applied here is, some Glassdoor reviews said the engineering team is really great (Which I realized was true when I attended my first interview).
Anyway, after attending 3 interviews, I was really impressed about their engineering team, and I believe they were the same by me. So I got an offer and joined after a week.
Day 1:
I didn’t know what to expect on my first day, so I was nervous. But my first day wasn’t that scary to be honest. I had to go to office to collect my official laptop. The covid pandemic was going on that time and engineers were working from home (good old days! 😛).
I went to the office, collected my laptop, met my team-lead/mentor. He talked about what our team does, what my role will be on that team, and some other stuff. Then he suggested me to go home, take the rest of the day off and get some rest, as it’s my first day. So I came back home, lied down on the bed and took a looong nap. (Nailed it right?)
Day 2:
On day two, I had to setup a bunch of software and IDEs on my laptop. I was supposed to be working on the frontend. So my team lead instructed a senior frontend engineer (Shuvo vai) from our team to guide me to setup a project. Shuvo vai asked me if I had any idea about Linux and Git, and I confidently nodded my head. Then he gave me a git repository link and a documentation about how to setup that repo on my local machine.
So I followed the documentation and tried to setup and run the project, but the build was failing. I though I was missing something. So I read the documentation again and started over, but failed again. I was getting nervous, thinking myself as a dumb person who can’t even setup and run a project.
As everyone was doing home office, so I was not sure if Shuvo vai was busy with something important. So I tried not to bother him, and tried to figure the error by myself. I tried to google the error hoping “Stack Overflow” will have some solution, but couldn’t find any.
I spent the whole day and failed. Then I finally texted Shuvo vai, asking for help.
So anyway, what happened was- the project link Shuvo vai gave me was a demo project made with one of our in-house frameworks developed in chaldal. It was still on experimental stage that time, so there were a few bugs.
Shuvo vai told me not to worry about it. He just wanted me to read the documentation and go through the codebase so I can get a little bit familiar with the project.
So I was relieved finally.
Lesson: If you’re stuck on some problem, try to fix on your own. But don’t waste too much time on it. It’s okay to ask for help.
Day 3:
In chaldal the programming language we mostly use are C#, F# and JS.
I was totally new with F#, so my team-lead suggested me to practice problem solving with F# so that I could get used to the language.
So my next two/three weeks were like this-
Solve a problem
Push to Git
Add a senior engineer as code reviewer
Update the code according to review
Repeat if code reviewer is not satisfied yet
This helped a lot to develop myself actually. I used to solve a problem and iteratively make my solution better with the help of senior people. I got to know how their thought process work when they try to figure out the solution of a problem. Also learned to write clean code.
A few days later:
So life was going great, I was happy, solving problems, taking naps, starting to socialize with other junior fellows.
Then suddenly my team-lead texted me one day, asking to meet him at the office next day. He wanted to assign me a small task.
Next day he sat with me, gave me an overview of my task, gave me some idea about the codebase I will work on.
The task was to add a new column on a grid. The grid contained some parcel info and their delivery charges. My task was to add a service charge with the delivery charge and show it on the new column.
Another task was to change the schedule of a CRON job. I was not familiar with CRON jobs at that time, so he gave me some idea, gave me some documentation to read.
I was scared as always, but later figured out both tasks were very easy. It took me two days to complete and deploy it. Any senior engineer could’ve completed and deployed it within 10–20 minutes. But the reason he assigned me the task was not for the sake of the task, but for the sake of my growth. I got to know the codebase, I got to know the PR review process, the deployment process, got some idea about CI/CD.
A few more days later:
I was back to problem solving again for some days, and got a text from my team-lead one day. He suggested me to learn React so that I can start diving deeper on the front-end side.
I told him that I would like to work on back-end side. I assumed (from past experiences of my part-time jobs) that he will persuade me to work on front-end. But he took it very positively and told me to continue learning F#, as some of our back-end services are written with it.
Lesson: It’s normal to have your own choice. Express what you want to do and what you don’t want to do. If your choice is reasonable and your seniors are reasonable, they will understand.
The first big feature:
We have a courier service called GoGo Bangla. E-Commerce Business owners can signup there and deliver their products through our courier service.
Anyway, the signup process was manual in that site. There was a registration form on the site. It used to work like this:
Merchant/Business owner fills up signup form on website
System sends an email to merchant with google form link
Merchant fills up the form
Admin creates an Organization from admin panel with google form data
Admin creates an user account with merchant’s phone number and other info
Admin adds the user account as the manager to the organization
User account credentials are sent to merchant via email by someone
My task was to automate this signup process. After getting a short brief about the feature from my team-lead, I was ready to jump into coding. But he stopped me.
He introduced me to the Director of Gogo Bangla, suggested me to learn the details about the current manual process first. When this was done, he suggested me to create a document containing my design plan.
While writing the design plan I went through the codebase and discovered that all the APIs and functions required for signup process are actually already written. So all I have to do is create a bunch of screens to collect the data of merchant and then call the right functions in the right orders with the right data.
I created a flow chart. Created necessary functions on client side to pre-process and pass the correct data between client and server side. Another junior frontend developer was assigned to help me by creating the UIs. After he was done all I had to do is integrate.
When I was assigned this feature, I thought it was too complex for me and wondering why my team-lead assigned me a whole feature this early. But after finishing it I gained a lot of confidence.
(The feature wasn’t 100% perfect immediately. We often found some issues in production, and I got to solve them. After 2–3 iterations it was working without any issue. And it still is)
The Judgement Day:
It was the first saturday of July. My 6th month was ongoing in Chaldal. As it was an off day, so I had plan to sleep till afternoon. I got a call from chaldal that made me wake up. I was annoyed, yet received the call thinking some marketing person will try to sell me some eggs. But it was a call from HR. The HR manager informed me that my half yearly performance review was done last month, and I got a promotion. I was surprised because my probation period was not over yet. So I waited till sunday for the confirmation from my team-lead. Next day he called me and congratulated me. When I told him that my probation period was not over yet, he couldn’t care less. He said to me, “Your work is the proof that you deserve a promotion. Nothing else matters”.
Conclusion:
If you’re starting your career as a Software Engineer, don’t be too afraid. If you’re working at a company with healthy work culture, you won’t have to show output from the very first day. You’ll be given enough time to settle down. They will nurture you, help you grow. Most of the good Tech companies don’t ask for a whole bunch of skillsets from the fresh-grad engineers. What they seek is that you have good basics of programming, passion for programming, ability to learn and utilize your knowledge.