ShopBack Post Mortem

Well I didn’t exactly die in ShopBack, but I’d want to document what I’ve experienced from the 3 months spent here. My official end date is next week and I think it’s the right time to do some reflection (again).

I like to split what I’ve learnt into three different categories. Mainly:

Software Engineering

Business Operations

Work Ethics

Software Engineering

I took up the biggest project so far in my software development career here. Rewriting the entire ShopBack website from near-scratch. The development has exposed me to really complex codebase with messy chunks of code here and there. Managing complexity and scalability is one of the key takeaways from this part of the internship. Writing code that works should not be the main concern as I progress on as a developer. It should eventually lean towards writing scalable code. In my 3 months here, I have been taught the right way to do things, while being forced to deal with the wrong way of doing things at the same time. It contrasts why the correct way is so much better by reading an example of poorly organised code.

The next step in writing code that scales would be automated tests. Testing allows developers to deploy with confidence and ensure that new features do not break the existing ones which works. As a frontend engineer, testing is rarely implemented due to the difficulty in testing user interfaces. (I mean seriously, there’s 1001 ways that a user interacts with your product) The next big project that I took up was to implement an integration test framework for the site I’ve written. I’ve spent two or three weeks on this so far and I hope that it could be finished before I leave the company. At least provide some documentation on how the testing framework works.

Other small improvements I’ve made as a developer will be my Git skills, familiarising myself more with Vim and most importantly, code style. My mentor was really big on writing code that looks pleasing to the eye so I guess it has influenced me. (Not as if my OCD wasn’t serious enough)

Some of the main code style mini-practices that I’ve taken away:

No trailing whitespace (Vim tells me about this all the time)

Newline at the end of the file

Spaces, not tabs

Consistent indentation

Naming conventions

Follow a style guide (Airbnb JavaScript, PSR etc.)

(and the list goes on)

These small mini-practices will affect the way code is written and how other people perceive my programming abilities. I hope I’ll be able to maintain the same level of code discipline in my school work as well as for future work opportunities.

Last but not least, understanding the deployment process and how scary things can get. Deploying has always been an exciting process. The DevOps workflow of separating different boxes to perform different functions, such as separating ‘feature’, ‘staging’ and ‘production’. These are deployment best practices that cannot be acquired by simply doing personal side projects. NUSMods follows almost the same convention but I’ve never tried to deploy anything there before.

Business Operations

Gaining knowledge in this field was not part of my main plan, however there are certain things that are good to know. I’ve been exposed to different ways that the company functions as well as the plans that they have to grow and scale at a fast pace. Mainly via data-driven processes and business operations.

Of course the secret formula is not to be divulged here, but gaining exposure in this field really opens up my eyes to how a company works on a lower level.

Work Ethics

Working in a startup has been really exciting. New features get shipped on a daily basis. There is deployment on every single day and there are always ad-hoc issues to be fixed on the fly while working on improvements to the product at the same time.

As a result, we constantly work after the standard office hours. Personally, I do not mind working the extra hours since I’m learning a lot in the process. However I think there should be some lessons learnt in work ethics here as well.

Over-promising is a dangerous habit and would more often than not land one into a very bad situation. If something seems unreasonable or unmanageable, it should be brought up and be negotiated with. Furthermore, since there are most likely different teams in a startup, it is also important to manage effective communication. At the end of the day, miscommunication will always lead to time and effort wasted.

Overall, I have enjoyed my time working for a growing startup that values hard work and passion. In fact I am really thankful for this opportunity and the important project that was assigned to me. As much as I want to stay for a longer period of time to take on more exciting roles or projects, it’s time to move on to greater things in life. (CS3216) I plan on touching up on my algorithms once more before the school term starts.

It’s been an enriching summer internship and I hope to recharge my batteries over this long weekend before the semester begins. Happy SG50! 🙂