Thursday, January 10, 2019

“Wave helps brave entrepreneurs simplify their financial lives to build stronger, more professional, and more sustainable businesses.”
Wave is a financial services company located in east Toronto. They’re goal is to empower small business owners by taking the burden of accounting, payroll, payments and more. It was founded in 2008 and during the time that I was working the entire company went through a rebrand to align more to the companies values, and the essence of believe.
My learning goals The goals I had were:
When I had joined Wave the mobile team was just starting to transition from React Native to Native iOS/React Native hybrid. I had the great opportunity of learning both Swift/iOS and JavaScript/React Native. Starting my work term, I was unsure which platform I would be working on more therefore my goals were mostly language agnostic.
The skills I wanted to learn were mostly Swift and iOS mobile development as I was very interested in that entering my coop position. I worked on integration Firebase notifications as well as implementing the core GraphQL service we were going to use more in the future. It was exciting learning about GraphQL vs REST APIs and I started attending the GraphQL meetups with a few of my coworkers. Later on, the mobile team was assigned to rebrand the mobile applications and I was apart of remodeling all the UI components and screens to fit our new look. I felt like the Wave rebrand helped me understand a lot about React Native and how it works as well as our apps and their structure, while working mostly on the UI side. The rebrand was an amazing experience as we watched an entire organization quickly change with a new logo, colours, and typography. There were many rounds of testing which also increased my attention to detail and I had a lot of opportunities to question some of existing user interfaces and propose new changes with the help of our designers.
Working with Swift/iOS was great as I learned more about mobile applications and how they worked. I felt like it also strengthened my object-oriented skills, during my internship my coworkers often suggested many books/websites that explain different programming patterns. It was great to be given the time to truly learn about how things worked rather than just trying to brute-force and get a solution easily. This will help me for my next work experience, as I’m constantly faced with the question “How do I make this better?”, to help refactor, abstract and make my code cleaner and more readable.
Working with JavaScript/React Native taught me a lot about good component/container design and how JavaScript can be a little frustrating due to the language being untyped. Learning React Native is very beneficial as it is quite similar to React which is a very popular web framework, that many companies have also adopted. In addition, I got to learn how to make UI components and how to make them reusable and modular. I also got to learn about the pain points of React Native, which later down the road I can identify what type of mobile application (Natively or React Native) to create based on my requirements. I also learned about sending and creating data bridges to connect both sides of a mobile applications and how the design of what you send can affect your performance.
My second half of my coop term I was dealing with larger features and wanted to improve the quality of code I written. I worked with vague problems that didn’t have a straightforward solution and took a lot of investigation. I had I started reading a lot about MVC (Model View Controller) architecture, as well was understanding what makes good components and container design.
For the Swift/iOS work I did I got the change to create a dynamic environment switcher, and the freedom to implement however I wanted. I wanted to implement easy and modular as well as thinking about the pain points of adding and removing environments as well as specific API keys. My pull request for that went through a lot of changes I learned amazing neat things about swift like @objc functions and how powerful enums could be.
I also had to integrate a webview created by another team into our mobile application, and learned a lot about webviews in react native and how they’re implemented differently on iOS and Android. It was very interesting to investigate and test different communication ways between our mobile application and the webview page. It also helped build my communication skills as all the input and output requirements for the webview had to be documented and be communicated.
Looking back at my goals,
I got very comfortable with git, learned how to rebase, and even fix annoying project.pbxproj merge conflicts. During my first four months, I was getting more comfortable at code reviews, what to look at, and review. It was great to be able to ask specific questions, and even add code suggestions.
This goal was probably the one that I feel like I achieved the most. My team had an internal rotational on call where the person on call would be the liaison between teams and customer success in case bugs and other issues rose. The rotational on call also had time to maintain and update dependencies and look into new technologies that we could use in the future. Taking apart of this role made me feel like an important member of the team as well had taught me how to fix and take on bugs.
With time I started to think of what I was doing on a broader scope, and taking a step back from the details of a design really helped, I had a lot of practice with white boarding the design of what I was doing and thinking of different edge cases of what could go wrong and where. This is still an ongoing skill, as best practices change over time. I absolutely believe I now understand how powerful swift is and how you don’t need classes as much as I first thought I did, protocols, structs, and enums are super powerful and have amazing use cases! I also understand React native much more and watching so many conference talks, as well as reading blog posts helped educate me and like JavaScript more at the end!
My communications skills lacked a little at first as I wasn’t sure how detailed I had to make my daily stand-ups notes, after a few weeks it was easier to ask for help and collaborate, pair programming was something that was encouraged for big vague tasks as well was white boarding what the design of our solution would look like. Overall I felt like I learned a lot of new skills and technologies that are transferable to other workplaces as well as university courses. I was extremely happy and proud with the work I produced and the people I worked with.
At Wave I had the oppertunity to be apart of the mentorship program twice. The first time I learned about IT and networking, it was great to learn about something different from what I do in my day to day life. The second mentorship I did was product design, I was super interested in that and got the oppertunity to create a product from scratch and be able to do research questions as well was interview people with prototypes that I designed. It was a great experience and diffenetly changed the way I look at technology right now!