My first byte at Gousto

I joined Gousto in January this year and I thought it would be helpful for any developers who are interested in applying to hear what it’s like to work with us. When I applied I was working at a digital agency for a little over a year where I mainly worked with PHP CMS’s such as Drupal, alongside jQuery. And given that this is the first startup that I have ever worked for, I did not know what to expect. Nevertheless I was eager to have my first startup experience to learn something new and challenge myself in a fast paced environment.

What I learnt in my first month

When I started, my first task was to set up a local development environment on my laptop. Our development environment uses Vagrant to create an Ubuntu virtual machine with all the available Gousto services installed. The Vagrant box represents a closest approximation of our system currently running on Amazon Web Services. This means that each developer can work locally on any of the installed services with little to no external dependencies.

Once my dev box was set up, I was introduced to a Kanban Jira board with selected real bug tickets of varying complexities. For the first two weeks I worked through these tickets which covered a wide range of the Gousto codebase. But for the most part I focused on the frontend service, which is running Laravel that serves various javascript applications that use frameworks such as Reactjs and Knockoutjs.

Working on the Kanban board gave me time to learn and understand new technologies that I have not worked with before. For example one of the assigned ticket tasked me to filter out empty categories of any given products, on a page built with React and Redux. Essentially I had to filter out any product categories where its stock was 0 in the immutable state in the reducer function.

1
2
3
4
5
6
7
8
9
products.forEach((product) => {
product = Immutable.Iterable.isIterable(product) ? product : Immutable.Map(product);
if (stock.get(product.get('id'), 0) > 0) {
product.get('categories').forEach((category) => {
let currentProdCount = state.get(category.id, 0);
state = state.set(category.id, currentProdCount + 1);
});
}
});

In addition I wrote corresponding unit tests using Jasmine to ensure that correct categories are displayed.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
it('should update product count only for products with stock', () => {
let initialState = Immutable.OrderedMap({});

let action = {
type: CONSTANTS.LOAD_PRODUCT,
products: [
{id: 'prod-1', 'categories': [{id: 'cat-1'}, {id: 'cat-2'}]},
{id: 'prod-2', 'categories': [{id: 'cat-1'}]}
],
stock: {
'prod-1': 10000,
'prod-2': 0
}
};

let expectedState = Immutable.Map({
'0': 1,
'cat-1': 1,
'cat-2': 1
});

expect(Immutable.is(categoryReducer.productCount(initialState, action), expectedState)).toEqual(true);
});

I also joined one of the team in their morning stand up meetings, and observed the agile scrum sprint planning and retrospective meetings. And when the majority of the tickets were addressed on the rampup board, I joined their 2 week sprint. I was then introduced to the Gift Service, which is a nodejs microservice that is in charge of adding gifts to our customers orders. It was a challenging first month but I learnt more than I did in the previous year, and it was exciting to witness the pace at which the Gousto technologies are changing.

What happened since then

Since then I worked on both front and backend of the Gousto services, where I built the “My Gousto” account page using React and partially reimplemented how our Subscription works. Of course throughout all this time I’ve had great support from my colleagues, and learnt a lot through pair programming and any feedback from code reviews for my pull requests. And coming upto my sixth months here, I look forward to what is coming down our technology roadmap, which I will leave you to ponder until our next article…

Joon
Junior Software Developer