Everything I've learned in this past year as a developer
Tags: year, review, javascript, firstyear
Published: 2019-01-18 18:57:30

---
title: Everything I've learned in this past year as a developer
published: true
description: My reflection on everything I've learned in this past year working as a full-time developer.
tags: year, review, javascript, first-year
---

I joined freeCodeCamp back in December 2016. Between then and March 2018, I had an internship, worked in digital marketing, taught at a local meetup. 

March 2018 - I started working as a full-time developer (Front End Engineer). I feel like I've learned a lot between then and now.

My intention for this article is to: 
    1. reflect on what I've learned for my own benefit
    2. provide insight on what you might learn in your first role

## What I've Learned
Here are all the major things I learned about during the last 10 months. 

### Git Workflow
Before I started this job, I knew git and the basics of version control (using GitHub, creating PRs, etc.). However, I had never used a "solid" workflow. 

To give you an example, ours is something like this:

1. create `feature-branch` from `master`
2. once done, test your branch by merging into `dev`
3. if it looks good, submit PR to merge `feature-branch` into `master`

Now I use this process for on personal projects as well. I even submit PRs (even if I'm the only one on the project) because it's good practice. 

Also, writing good commit messages is highly underrated. Read [this post](https://chris.beams.io/posts/git-commit/).

### React & Redux
I had read the React docs before this job but I hadn't built much. It's funny because the first week or second week, I remember a co-worker saying, "Go look at the Redux docs, build something, then show it to me." It was a reminder that this is the type of industry where you learn a lot on the job (which I love!). 

With our current project, the majority of my time is spent writing React and Redux.

### Next.js
I hadn't heard about [Next.js](https://github.com/zeit/next.js/) before starting here. One of the biggest projects I've working on (and is my main focus right now) uses Next.js.

Next.js is powerful and does it's job well, but the documentation can sometimes be lacking. However, don't let that deter you from using/learning it. It's built by the ZEIT team, which I have a lot of respect for. 


### Unit testing (Jest, enzyme, react-testing-library)
When I first started this job, none of the front end projects had unit tests. At first, I didn't think much because a) I didn't have any experience b) I didn't understand the important of unit testing. 

Our manager and architect asked us to incorporate testing. when we started our most recent project. I'm thankful they did because I've learned a lot about the importance of testing. 

We were using enzyme when we first started but luckily, react-testing-library came out and we switched to that :) (it provides a much better developer experience IMO). 

### CICD (Continuous Integration, Continuous Deployment)
Before this job, I didn't know what this was. 

My co-workers taught me. Essentially it seems to boil down to scripts. I like to think of it as "take the commands you use when you start up the project locally and put those in a script."

Fortunately, I had the opportunity to set up the CICD pipelines using Atlassian's Bamboo for the front-end projects. I was guided by my co-workers and eventually wrote some documentation. We now use Bitbucket pipelines, but the previous experience taught me enough to feel comfortable with a new platform. 

Then for the deployment part, we have a few scripts which update the deployments in Kubernetes.


### Docker + Kubernetes
Similar to CICD, I hadn't used Docker much before starting this job. At my first job working as a web developer, my boss wanted me to research Docker for WordPress development. He hoped it would solve our problem of setting up projects locally. I couldn't figure out so I dropped it.

Fast-forward to this job- they were running everything in Docker containers so I was forced to learn.

I haven't learned much but I know how to create a Docker image, run it locally inside a Docker container and push it to a registry. That's about it. Luckily, that's all I've needed to know.

We also use Kubernetes to orchestrate everything. I don't mess with it much but I've been able to learn a little bit based on how we use it.

### Bitbucket, JIRA, Confluence, Bamboo, Pipelines
I'm a big fan of GitHub and GitLab so when I heard they were using Bitbucket, I was a bit disappointed. I don't like the UI as much as GitHub but hey, it gets the job  done :) 

We use JIRA for managing issues/tasks, Confluence for Documentation and Pipelines for CICD processes (we were using Bamboo for a bit).

As I mentioned earlier, we used to use Bamboo and now we use Bitbucket Pipelines. The fact that this is built into Bitbucket is pretty awesome :)

I'm just waiting to get access to GitHub actions so I can set it up for my personal projects. 

### Agile | Scrum 
I wasn't familiar with agile software development before this job. I just worked on things as needed and that was it.

When it comes to Scrum, I've learned to really enjoy it. The way that we do is like so:

1. Before we start a sprint, we meet as a team (back-end, front-end, manager, architect, product) and we choose stories to add to the sprint. We select a certain amount based on our velocity.

2. We start the sprint (usually two-weeks in length) then gather the front-end and back-end and talk through the first story. We break them up by vertical slice - so we create a subtask for the front-end work and the back-end work. Then we work it in tandem with the back-end team.

3. At the end of the sprint, we give demos and check to make sure our work meets Product's acceptance criteria. If it does, we claim the points for the sprint. 

4. After, we do a retrospective where we share what worked, what could be improved and kudos.


## Conclusion
All in all, I think I've learned a lot in the past year. I feel like I understand a lot more about the "Software Development Life Cycle" as a whole. It's a fun industry to be in. 

I'm thankful for my job and the opportunity to learn something new everyday working as a developer :)