I just concluded another full year with all of my work public on GitHub. 2017 was my eleventh full year as a software professional, and my third year at Code.org.
Unlike last year’s report, I’m using the calendar year (Jan 1-Dec 31) to pull stats for 2016 and 2017 in this report.
Stats
I merged 520 pull requests this year.
That’s down 6% from 554 in 2016.
491 (94%) within the code-dot-org organization:
- 455 on code-dot-org/code-dot-org
- 15 on code-dot-org/browser
- 7 on code-dot-org/johnny-five
- 5 on code-dot-org/circlarify
- 3 on code-dot-org/p5.play
- 3 on code-dot-org/playground-io
- 2 on code-dot-org/bramble
- 1 on code-dot-org/JS-Interpreter (but probably the most-viewed)
- 16 on molleindustria/p5.play
- 5 on rwaldron/johnny-five
- 3 on rwaldron/playground-io
- 2 on islemaster/connectmydots
- 1 on godotengine/godot-docs
- 1 on islemaster/hitotoki
- 1 on hejiann/beautify
I made 1,544 commits on code-dot-org/code-dot-org.
I again ranked #1 by commit count to that repository. That’s down 3% from 1598 last year.
I averaged 2.97 commits per pull request.
That’s up 3% from 2.88 in 2016.
I changed +57,215 / -43,451 lines on code-dot-org/code-dot-org.
That’s down a lot from +130,647 / -139,705 last year, and I also added more code than I removed – not necessarily a good sign.
I reviewed 719 pull requests by other people. I estimated 605 code reviews last year, so I’m up about 19%. (The comparison to last year is imprecise because GitHub reviews launched in December 2016.) Since I used all of my vacation this year, I averaged about 3.1 reviews per day, a moderate increase from 2.5 in 2016.
Features
Here’s a more qualitative look at my work this year.
Maker Toolkit
My main responsibility this year was Maker Toolkit, an extension to App Lab allowing students to use the Adafruit Circuit Playground board in the Physical Computing unit of our CS Discoveries middle school course. About 20% of my pull requests were work on this feature.
We built two ways to connect to the board: A Chrome App for use on Chromebooks, and an Electron App for use on other platforms.
We built a student-friendly Circuit Playground API on top of Rick Waldron’s Johnny-Five and Playground-IO libraries.
Teacher Dashboard and Accounts
About 10% of my PRs this year were collaborative work on improved Teacher Dashboard features and Accounts/Login features.
Internet Simulator
Internet Simulator had record traffic this year. As the tech owner of this project, I did maintenance work and scaling preparations, including work to scale our Redis datastore horizontally. This only accounted for about 3% of my PRs this year. I’m pleased that this project has been easy to maintain. Ownership of this project is passing to another engineer for 2018.
App Lab, Game Lab, Web Lab
Together, about 10% of my PRs this year were support work on our other middle/high school tools.
Tests, Tooling, and Technical Debt
About 35% of my PRs this year were dedicated to improvements to our tests, tools for the development team, updating dependencies, and general code hygiene. In fact, I gave a talk on our test improvements to about 300 people at AllDayDevOps 2017.
Operations
About 22% of my pull requests this year were related to daily operations: Deployment pipeline merges, dev-of-the-day responsibilities, hotfixes, bugfixes outside my regular responsibilities. This category should shrink significantly next year, because our pipeline merges are now automated!
New responsibilities
In October I was asked to become a manager. I’m now supervising four very talented engineers. I still spend the majority of my time as a developer. This was a very affirming change, and lines up with my changing role on the team over the last couple of years: Trusted with more code reviews, mentoring other engineers, and spending at least a third of my time on work affecting the whole team, like technical debt and test improvements.
Strengths and Goals
Reading through the strengths I called out last year, they still feel about right. I wasn’t successful at tackling all of my goals though:
Measuring my defect rate. I didn’t do this. Maybe I’ll try this again, but I’m starting to think there are better things to measure – and this may be a better team metric than individual metric anyway.
More consistent test coverage. I definitely improved in this area. I got very consistent about adding test coverage as I worked, especially in older code that I was updating.
I need a new book. I ended up picking up some leadership books in response to the new role, and I’m currently reading Clean Architecture by Robert Martin. I expect to continue this habit into 2018.
Find a new multiplier on the team. Our team now has several engineering initiatives going that improve our processes and tools. This has also become more of a team goal than a personal one, but I feel like I contributed to it quite a bit and I’m in a good position to do more of this.
New goals:
Learn to delegate. This is an important skill as I learn my new role. It’s not just about assigning work, but making sure I’m not a single point of failure for anything. I’m starting by passing ownership of Internet Simulator to another engineer.
Empower my reports. I want to help the people I’m supervising find meaningful work, opportunities for growth, and influence on the team.
Experiment with our process. Like a lot of small teams, we use a loose version of agile as far as it works for us. This year, I’d like to help the team try out some adjustments to that process and find improvements that stick.
Side projects
Finally, I’ve wanted to do more side projects for a while. This year I had three! And I feel pretty good about them.
Connect My Dots is a network visualization tool co-developed with my wife as part of her graduate work. We made some improvements this year, for use in networking workshops she’s been teaching.
Good-Enough Golfers is a near-solver for the “Social Golfer Problem,” useful for anyone who needs to generate a rotating seating arrangement.
Wildflower Child is an interactive toy, and my submission to the GitHub Game Off 2017 game jam.