In June, 2018, I started working at PromptWorks as their second Apprentice Software Engineer. During my time here I have learned a ton about consulting, agile development, and programming. Here’s a look at the apprenticeship program from my application through the day I graduated to become a Software Engineer.
A little about me
Prior to joining the team at PromptWorks, I had a career as an arts administrator at a feminist arts center based at a large state university. One of my responsibilities was maintaining the center’s websites, which sparked my interest in coding and led to my joining the Flatiron Online Web Development Bootcamp.
The first phase of the interview process was an initial screening via phone. During this screening the interviewers explained the interview process, elaborated on details about PromptWorks and the position, and provided time for my questions and concerns. This screening was a great experience in that the interviewers laid out the entire process including what they would be looking for later on in the interview process.
The next phase was the take-home coding exercise, which was to refactor a small Python CLI app. The focus of this was to take the working app and make it better by fixing subpar code, adding more tests, and refactoring to make the program extensible. After all of the code samples were collected, they were anonymized and submitted for blind review.
The final phase was an onsite visit. During this visit, I first paired with one of the engineers to make a game app from scratch in the language of my choice. The focus of this was not to complete the game, but to work collaboratively with one of the PromptWorks engineers and talk through my thought process. Next, I demoed one of the projects I had made for Flatiron to the interview panel. Lastly, there was a more typical formal interview with the CEO, an engineering manager, one of the project managers, and an engineer.
Overall, the interview process was well thought out and every step mirrored experiences I had as an apprentice. The process covered the skills required to be a successful consultant and mirrored many of the daily activities I encountered during my apprenticeship, and now as a Software Engineer.
The apprenticeship lasted three months and consisted of learning about agile development, working on client projects, and independently developing a project. During my first two weeks, I had a crash course in the agile process and how it is used at PromptWorks. The intention was to have me work on one client project throughout the duration of my apprenticeship, but because of the unpredictable nature of client work, I ended up working on a total of 4(!) client projects. In addition, I also participated in a discovery (a process where we collaboratively plan and strategize with clients and stakeholders to develop product requirements), estimating the cost of a project for a prospective client, on-site client visits, and tested hardware for multiple projects. Working on multiple teams with about half of the engineers and most of the Project Managers gave me the opportunity to experience different work and coding styles
The second component of the apprenticeship was my personal project. I chose to make something related to my previous career in the arts — Tour-est, a web-based app where cultural centers can upload images and information for visitors to do self-guided tours at the sites. I decided to create the app using Ruby on Rails (RoR) and React since I was familiar with RoR, but React was new to me and is used frequently at PromptWorks. My project was treated the same way as a client project and I went through all of the same initial steps before I began developing. I got to work with a Project Manager, Amber, who worked at PromptWorks when I began my apprenticeship. I first had a mini discovery with Amber, where we went through my goals for Tour-est and solidified my vision for the app. Next, we refined user stories, which involved walking through how different types of users would experience the app. After we solidified what we would be building, we created a backlog of cards for the project by breaking down everything into the steps required to create the app. Since it is used on client projects, Pivotal Tracker was the tool I used for tracking my backlog and completed cards. Following creation of the backlog, I had to estimate how long I thought each card would take me to complete. Amber guided me through the first time estimating cards and had me only estimate a few stories at first until I got a good handle on how much time it took me to complete different tasks.
With the planning completed, it was time to start building my app! To help guide the development of my project I pair programmed daily with one of the engineers, Ray, who acted as my mentor and collaborator for the project. My typical workflow for would be to pair with Ray to get started on something new, which I would usually finish independently. I would then work on a card (or two) that was more familiar and submit a pull request (PR) when the card was completed. At PromptWorks, the workflow when completing a card is to submit a PR for your team members to view the changes you made, review, give feedback, and discuss potential changes. Your work can be merged into the project after the PR is approved. We decided to mirror this workflow on my project, but since the team was just me, Ray and several engineers volunteered to review my PRs. This was great because I got feedback from multiple people on my project and I got to experience a different way of collaborating than I was used to.
In total, the apprenticeship provided plenty of support and mentorship in learning to fix bugs, performing client-related work, and engaging with engineers during daily pairing sessions to make progress on my apprentice project. Additionally, I had biweekly informal one-on-one check-in meetings with my manager, Sarah, and more formal monthly reviews where I demoed my apprentice project and received feedback and peer reviews to help me grow as an engineer.
I had a great experience and learned so much as PromptWorks’ apprentice. It was a great way for a career changer like me to learn more about working as a Software Developer and quickly ramp up to be a contributing member on a development team.