8 things I learned during my internship
Tags: career, codenewbie, beginners
Published: 2020-06-07 01:51:08

1. [Wireframing & prototyping](#1)
2. [Version control](#2)
3. [It pays off to contribute](#3)
4. [Back End wizards are your best friends](#4)
5. [Deploying](#5)
6. [Your worth =/= lines of code](#6)
7. [Localization](#7)
8. [Experience > money](#8)

After learning web development via online courses for a year, a long awaited opportunity arose - Front End internship for some real life experience! I've been at it for a few months now and my responsibilities revolve around designing the GUI and building Vue projects. It's been like trying to drink from a firehose - so much information! You can watch as many Udemy lectures as you want, but nothing quite prepares you for that very first developer job. Here are some takeaways I've gathered from my experience so far:

###1. Wireframing & prototyping :building_construction: <a name="1"></a>	
As a freelancer my workflow was pretty straightforward: 
 1. Idea
 2. Generic sketch on paper
 3. Coding

During my internship, I quickly learned that this isn't how things work "in the real world". As projects get bigger and more people are involved in the decision making process, it's important that you spend time coding the right thing. Our project's new feature needed a GUI but its design had to be a team decision, therefore I was tasked to build a clickable prototype. My freelancer 3-step process turned out to be a team effort of 7 steps:
1. Idea
2. Sketch on board
3. Basic wireframe on Balsamiq
4. Internal user testing (asking team members to click through and gather feedback)
5. Analzye feedback and build a prototype on Proto.io
6. Internal user testing (asking team members to click through and gather feedback on the reassessed version)
7. Coding

I thorougly enjoyed the collaborative aspect of all this where you can lean on expertise of your team members. As a developer, it's easy to focus on the technical and forget nuances of the product itself. Gathering feedback on prototypes before even touching the code editor helps avoid unpleasant surprises and make sure that you create something that brings value to the users.

###2. Version control :clock3:	<a name="2"></a>	
This was something I never really got into before the internship. As a beginner, my solo projects felt too small for version control and the idea of git commands being able to modify my files felt.. downright scary (what if I accidentally delete all my stuff?). When I anxiously admitted this to my team it naturally earned a collective gasp "You've never used git???". I'm lucky to have good spirited coworkers and very soon my Slack was full of links and tutorials to nail the concept and a cheat sheet of the commands I need to get my repo running. I've now worked with Bitbucket repositories, branched and merged and pull requested for 2 months and while merge conflicts still seem a bit scary, version control in general is becoming more and more second nature.
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/q98lagiggj3xcobjpgf3.png)

###3. It pays off to contribute :handshake: <a name="3"></a>
You get back what you give. As an intern I had to learn things from scratch and naturally there were hiccups along the way when you just didn't know what to do. I looked up Discord channels Vue Land and Vuetify to network with fellow developers. It was heartwarming to see how responsive people were in offering help when I felt most hopeless.

To give back to the community, I started responding to other beginner's questions as much as my knowledge allowed. This had many benefits:
1. By thinking along to someone else's problem I learned and solidified what I already knew myself
2. It's a great confidence boost. As a beginner it's often discouraging to realise the mountain of tools and languages you still don't know. But seeing someone's question, having a :bulb: go off, make a suggestion for a fix and hear back it works... there's hardly a better drug for me in terms of feeling like a coding wizard despite my humble experience
3. Networking with developers working with same technologies. What started as a typical help request grew into a casual fun online comradery. Joking about shortcomings of a certain technology or sharing the pains of getting something to work really helped me feel like I "belong"
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/705vowutiwtznw559owk.png)
4. It got me noticed by Vuetify's core team. I was active in asking/offering help and shared a self-made helper class cheat sheet in Vuetify's discord channel. Not long after I was approached and asked if I'd like to become a contributor. Naturally I said yes, and ever since I've worked on drafting some beginner tutorials and been a bit closer to the product in general. I'm excited to see where this can lead in the future!
![Alt Text](https://dev-to-uploads.s3.amazonaws.com/i/wwu631ii5kkrg2ejuo3s.png)

###4. Back End wizards are your best friends :mage_man: <a name="4"></a>
Building something in a small company is a piggyback process. When building logic for the app, have a good talk with the people who "magic" the data into it. When there's effective collaboration between Front/Backend, you can bring projects to life so much easier. 
![amazing](https://media.giphy.com/media/3ohhwoy4AB7fXp0GVq/giphy.gif)
Quite often you can avoid dozens of lines of code and confusing nested loops in Front End codebase by having some help from Back End (tweaking API calls, adding new data fields, normalising data etc).

###5. Deploying :rocket: <a name="5"></a>
We needed a clickable demo of the prototype accessible for the team and for a prospective user as well. I spent the day learning how to [deploy Vue apps](https://cli.vuejs.org/guide/deployment.html#heroku) and how to hook them up to Heroku. It was a definite learning curve about remote repositories and it feels awesome knowing how to bring projects live now!

###6. Your worth =/= lines of code :trophy: <a name="6"></a>	
I come from a call centre/customer support background. For years, my worth was pretty much calculated in the number of e-mails I did per day and if I took extra 10 min for my lunch/pee break, it was very well noticed.
![Alt text](https://media.giphy.com/media/622tjz4c1x1B62VHEu/giphy.gif)
Only after working as a developer for a few months I realise how dehumanising that sector was and the detrimental effect it eventually had to my perception of self worth. It's hard to detach yourself from a mindset of "must produce visible results" and accept that you ARE working even when you spend hours watching tutorials or a bug in your console or drawing pseudo code on post-its. As a customer support agent my work revolved around immediately perceivable daily results. As a developer my work revolves around projects - my team trusts me how I spend my time, as long as the long term goals are met. There is a daily morning checkin call, but after that I get to put on my headphones, zone in and do my thing. My team trusts my process and it's awesome. 

###7. Localization <a name="7"></a>
Before my internship I never had to deal with matters related to localization or multilingual interfaces. In Switzerland though, basically every site needs to be in German, Italian and French. This affected my development in several ways:
 1. Translated button elements can break UI. For example a basic button with a 1-word English label may look awesome, but not when it needs to be a 2-word French expression. It's now in the back of my mind not to put text label buttons in places where their width needs to be fixed.
 2. Dates can not be hardcoded, since most of the time you save a `new Date()` object and render it in DOM with `.toLocaleDateString()` or something similar.
 3. Learning to implement i18n to switch interface language and replace all hardcoded values in the codebase with references to i18n locale files.

###8. Experience > money :money_with_wings: <a name="8"></a>	
In my area in Switzerland, a junior front end web developer with 0-2 years of experience gets roughly 6-7K USD/month. I've self-taught myself for the past 1.5 years and of course it's easy to daydream about those paychecks. But experience in agile web development is more important to me than a paycheck right now. The team I'm working with creates a great environment to observe and gain the skills I need on my journey to call myself a web developer with confidence. 
![Alt text](https://media.giphy.com/media/vgsj2QCJGv7Xi/giphy.gif)
Big-shot positions may be in the books one day, but for right now, my job is to be a sponge and enjoy the ride :roller_coaster:

If anyone stumbled here and would care to mention their takeaways from their very first web dev job, I'm all ears!