20 April 2017
Apprenticeship: Unlocking Potential
I just finished my 6th week of the Gaslight Developer Apprenticeship. Myself, another mentee, and our mentor have been injected into an agile team at a large company in town. The team is operating on a vertical, which means we own both the back-end and front-end code for our part of the codebase. We are one of the many Agile teams that are collaborating together to create a huge customer facing application. There are two different versions of the codebase, making the experience appear quite daunting to say the least. The older one (using Angular) is currently in production and the new one (using React + Redux) is set to overtake the older one.
I’m slowly realizing that I have joined the project at a very exciting time. The shifting transition to a different codebase, the sizable increase of employees that will be working on the project, and the upcoming split of our Agile team— these are all very exciting things. The important thing to note here is that change is inevitable, especially in software development. You adapt.
It is hard for me to quantify and put into words exactly how much I am learning because it is all happening so quickly. It seems like only yesterday it was my first day, and yet I already feel right at home as I arrive in the morning, excited to start a new day of programming. The day to day process consists of paired-programming, rotating pairs twice a week. Bouts of development and bug chasing interject agile meetings, luncheons, and conversation. I often ask team members for advice on a story, which is an agile term for an assigned task. I always freely give help if another team member needs help on a story of their own.
The stories we define in our agile process are so varied that you inevitably end up touching every aspect of the codebase. In the developer apprentice journey, you learn by both absorption and intuition. You start to understand where you might look in the codebase to fix an error, what tools you need to use to do your research, and the rules for deploying code to production. Here are some of the key insights I’ve learned about development since starting my apprenticeship.
- Clear communication with your pair, other members of your team, and other teams is crucial. This goes above all else. Seemingly incomprehensible bugs can often be solved in seconds when you find someone that has seen a similar problem before.
- Own your work and help others own theirs. You must always be willing to help others get their work done, but do not do it for them. Ownership empowers individuals and brings forth their best efforts.
- Learn to cherish the git workflow. Merging, branching, squashing, and rebasing are some of the important tools of the trade.
- Don’t assume that somebody just “gets” something. We all have a limited body of knowledge and context and nobody can know exactly what you are thinking. Vocalize your thoughts to get everyone on the same page.
- Stick with a tricky defect until you have found a solution. There is no magic, there is always a root cause, and you can always arrive at a solution eventually. Breakpoints, print statements, commit logs, Google, and your team are all the tools you need.
- Understand the scope of the problem you are trying to solve and stick to it. Keep it simple and keep on task. Complexity in programming can grow exponentially.
- Eat an energizing breakfast and snack throughout the workday. Using your brain to think about complex problems burns a lot of calories.
- Take some time to continue learning on your own outside of work. Sometimes you need to sit down by yourself on a problem or a concept to help it sink in. A quiet environment where you can talk to yourself is a big help too.
There are so many positives that come from being a beginner in something. Do not rush for the journey to be over, to get to the ‘end’, or to ‘make it’. There is no end. You just keep going and that is what makes it fun.
(This post can be found originally at https://sashakoro.github.io/)