You can put your toe in first to see how cold it is, but then you have to jump soon thereafter. Apprenticeships are popping up all over the place as software development companies and junior developers have begun to realize the mutual benefits of the old-school practice. I am finishing up mine at DevMynd and want to share my experience jumping into the ocean of technology and landing a few feet from a life raft.
Every test suite, config file, database query, logo, button, and <div> tag comes from a team of enthusiastic individuals who actually give a shit. This is my first job as a developer and I only seriously started building software applications about a year ago. The DevMynd team has been so incredibly thoughtful and I feel reassured every day I go into the office because I know we’re in it together.
I learn best when I can work directly on a problem that I have not encountered, struggle through it, rally to an adequate solution, and then review the work and make it better. Knowing this, I asked to be staffed on a project as soon as my apprenticeship started. Other apprentices have worked on personal projects, shadowed a new consultant every few days, or cracked open a textbook or tutorial to read, listen, and learn. Being self-directed is a very important part of the apprenticeship. Yes, there is plenty of support, but you can’t fully take advantage of that support without some independent drive. The apprenticeship is very accommodating and gave me a chance to choose how I wanted to learn and work.
I love answering this question because the conversation can be quite outlandish or plain and simple – what is a day like at DevMynd for an apprentice?. Well… I get into work and gather my plan for the day. I find an open station and when my pair and I are ready, we’ll crack open Pivotal Tracker (agile tracking tool) and start on a card (normally a small end-to-end feature or bug).
I have had the opportunity to pair program every day here and it has been one of the most enjoyable parts of this job. Often I am asked to drive (do the typing while the pair navigates) on a complex implementation where I make ten mistakes and ask twenty questions. One of my favorite answers from a senior consultant is “I don’t know, let’s research and talk about that” — and then we will dig into a gem library or whiteboard together to learn something new. You never stop learning in this atmosphere.
At the beginning of my career, I was focused on simply getting unstuck. Now, I am starting to build up certain instincts to make it all happen more easily. In another year, I’ll know far more tricks, and eventually community best practices will come naturally. And while I grow, the rest of the team is also benefitting immensely. By asking the right questions and prodding experienced developers, we can re-imagine old solutions and make better products.
We also have an internal DevMynd standup where we each share what we have been working on and if we are blocked by anything. I love using this as a chance to ask a question and then have some knowledgeable people ready to chat right after. Later in the day I have a standup with the client where we can demo features, discuss design, plan and prioritize, or sometimes just say hi and ask a couple questions. An apprentice often looks no different to the client than other consultants. Interacting with people professionally, ability to present to clients, and communication skills (verbal and written) are highly valuable here.
Most of the projects I have worked on have been in the Ruby on Rails ecosystem, from greenfield (start from scratch) to enterprise. I’ve tackled a wide range of problems when working with clients:
- designing database schema
- debugging outdated and untested applications
- devops and deployment
- researching and implementing open-source solutions
- wiring up virtual machines
- maintaining and upgrading systems
Most of these were unfamiliar concepts before my apprenticeship (or novice experience only).
If you are considering applying to the apprenticeship, there are some things you can do now to ensure you start strong on day 1. Be code-agnostic! Stay open-minded to contrasting design decisions and syntax styles. Begin to understand the tradeoffs that go into each line of code. Put in time playing around with new technologies. Accept that for the rest of your entire career you will occasionally be frustrated at things you don’t yet know or understand. Brush up on your RSpec skills – you can provide value on your first day if you write strong tests. Prepare to be the worst and cherish the opportunity to rake in tons of new knowledge.
It excites me to think about how much other stuff is going on here that I haven’t learned yet or gotten the chance to work on (new languages and frameworks, non-web products). The DevMynd apprenticeship has been a blast. Every day I get a chance to ask a group of phenomenal people questions about the web and technology, and a wide variety of other interesting topics. I am fortunate to lean on the team at DevMynd while I continue to grow personally and professionally. So jump in, it’s not that cold, and our life raft is nearby.