I can't remember the last time I wanted something this badly. A company that I had my eye on for a long time, MX, was offering a brand-new program geared towards newer engineers: an apprenticeship. I currently working as a developer for another company, but I knew that working with MX would help me take my skills to another level. I had to apply.
The apprenticeship, according to this link, was meant for individuals who were just starting their software development careers either from a developer "bootcamp" or through self-teaching. The program was detailed to be three months, paid the equivalent of $14.50/hr., and promised the opportunity to work on a production codebase that served millions of requests per day. Anyone who's involved in the Utah Ruby community knows MX is innovating in the banking industry with their product, and taking their business in a spectacular direction. I had applied at MX once before in the very beginning of my career, but I was rejected because my skill level didn't match what the company was looking for at the time.
Sounds interesting, right? So I applied.
My application, for the curious, can be found here. I submitted my application in July, and was chosen for an interview. I was one of four potential apprentices in the interview, along with a host of mentors and senior developers. We were given a problem and asked to solve it as a group. The focus for the interview was not the answer to the problem, but how we worked it out and interacted as a group. So, we talked out the problem at length, had lunch with the interviewers, and we were sent on our way!
I spent the next who-knows how long worrying about whether or not I came off too strong in my interview, didn't say enough, said too much, or otherwise botched the interview. Normal worries that one might have when within grasp of a goal you've had for quite some time.
Who-knows how long later (less than a couple weeks), I was notified that I was selected for one of the apprenticeship positions! Oh MAN was I excited.
The Gravity of Choice
The apprenticeship was geared towards people who were relatively new to software development and coding, but that didn't really describe me when I applied. At the time, I had been working as a founding member at a small SaaS company, doing double-duty as technical support and development. I’ve also worked on my own side projects for a couple years. I applied because I wanted the experience that working on MX’s codebase alongside their amazing team could provide.
There were a few pros and cons in taking the apprenticeship.
- I would get to work on, what I knew to be, an incredibly established and advanced codebase, which is perfect for raising my skill level
- I would get to work with some of the best minds in software development
- I would get to work on a product that interested me
- My commute was shorter, they work an hour less than at CE (scheduled work hours, anyway), and their brand new building is beautiful
- I would be taking a considerable pay cut
- There was a lot of potential in the startup I was working for, and I was one of the founders
- Starting over on a codebase that I knew nothing about could yield a high learning curve
After 10-ish days of really hard and careful consideration, I decided I was going to accept the apprenticeship. I told the company I was working for at the time, and everyone was happy and excited for me, although I knew they were a little worried how they'd get by without me (hehe).
Away I went. I started on September 1st, and that brings us to now.
So far, we're a couple weeks into the apprenticeship, and I must say, I'm really liking the company. There have been a few things that, professionally, I had wanted from a company that I haven’t been provided to this point in my career, and MX was able to provide those in my first week:
- A company-provided work machine
- More insight to the business
- And to work from home more (to kill my commute).
In the first week of this apprenticeship, I got all 3 of those things. So, that was a huge check off my 'things I need from my company to be fully satisfied professionally' list.
How We Compare
I can't reveal any specific information, nor would you want someone revealing specific information about your business. But, I can tell you a little bit about the projects we've been given so far, and how our team dynamic has helped us accomplish our tasks.
Most of the projects so far have been fairly simple. If any of us had worked on them individually, we probably could have completed them really quickly. But, that's not the point of the apprenticeship, and we knew that from previous talks with senior developers. So, we all got together, talked out the problems, and figured out how to solve them.
We always came to a solution for the problems, which was the benefit of this approach. Everyone usually has at least one creative solution, so we hash out all of the ideas, come to what we think is the best combination of all the solutions, and implement it.
There some downsides to having many people work on a single project, though.
For example, we have come to understand the concept of “mob programming.” One person ends up doing the coding because, really, only one person can do the coding, while the remaining four watch and provide feedback. This sounds great in theory, but having that many people work on the same thing is difficult. Each person might have their own idea about how to implement the code, for example. Imagine multiple people trying to build a canoe from the same tree— that's kind of what it's like.
The Second Week
In the second week, our group got into a groove. We've been given tasks that are more challenging, and assigned multiple projects, so we're not all working on the exact same thing. Also, we tend to branch off into smaller pairs or groups. So far, that's working pretty well. The hard part, now, is making sure we all get the same knowledge of the platform. We've talked about doing micro presentations on what we did so everyone is on the same page. We haven't implemented this, but I'm sure I'll write another post about our collaboration.
Thoughts So Far
The codebase is still a little intimidating to me because I don't know all of the products very well. The pace is a little slow because the company very strongly encourages high-quality code. My own personal learning style is to drink from the proverbial fire hydrant of knowledge, and I know not everyone is like that. Also, my only previous professional development experience involved the sales people selling something and the engineers building it as fast as humanly possible. So, maybe the slow pace is just MX doing things how they should be done.
Despite all of that, I'm really glad I took this apprenticeship. It's given me some amazing insight into my own development and some advanced techniques. I've already met some really amazing people who are incredibly talented, and when the leadership of this company talks to you, you can justfeel their desire to help our customers and change the way the banking industry works. I'm always excited to go to work the next day, and I absolutely cannot wait to see how much more I learn. It's absolutely amazing at MX.
By Cameron Kidman, MX Engineering Apprenticeship