readme

About this readme

This is a README. It's a good starting place to understand how I think about work. These are ideas, not beliefs, they evolve and improve when discussed; so please reach out with questions and different perspectives.

MoreMy README is inspired by those that GitLab employees create. Often their READMEs will reference the GitLab values that mean the most to them.

History

After debating in high school, I entered college as a political science major. I could write (and argue), but I wanted to learn to problem solve and build so I studied economics, data science, and a bit of programming before joining McMaster-Carr as a developer after graduation. During my time at McMaster, I worked on a variety of web, back-end, and infrastructure projects as both a developer and manager. Besides many interpersonal lessons, managing taught me that I wanted my career to have a greater focus on solving engineering problems and so I went back to school for a Masters in Computer Science. My LinkedIn has more details.

More The transition from a narrative-driven thinker to a systematic one was very difficult for me and I failed at a number of things I tried, including a math minor. Over time I learned the essential skill of all systematic thinking - debugging. Ask me about my other failures and what I learned.

How I strive to work

These practices make my work more productive and enjoyable. It's worth investing in tools and processes that make these practices easier. Think knowledge work tools, not just developer tools.

PracticeDescription
See insideStart with printing: Effective debugging and feature development require understanding a system's internals. Approach problems by building out the functionality to understand a system and changing the system will come easier.
Visibility is a feature: Instead of each developer adding and removing print statements, create a printing feature. Create a standard vocabulary so that once a developer understands one system they have a short way to go to understand the rest. Consider flags to allow various levels of verbosity and exclude printing from release.5
DocumentWhy document: When individuals and teams write documentation they scale their impact.
More "Written documents are the most scalable way of disseminating information. (Larson quoting Bu 148)" 1
"The best solutions to frequent interruptions I've seen is a culture of documentation, documentation reading, and a documentation search that actually works. (Larson)" 2
Content over presentation: An organization's expectations and systems should allow writers to focus on content not presentation. In most cases markdown is good enough.
More This readme is rendered markdown with a touch of html for the "More" sections like this. I don't love the lines between subsections in this table and could have improved it in html but I reminded myself, "Content over presentation".
Visible: We wouldn't hide code until its ready for production so why hide documents? Your document pipeline should let stakeholders follow along as documents are developed. Perhaps extend the dev/prod convention to indicate when work is ready for review.
More: Put conclusions first, make points concisely, and include More sections (embedded footnotes) and references so that the audience can opt into greater depth and reproduce your work or form their own opinions. Documents provide thinking platforms through their collected resources and analysis. The ultimate decision may look nothing like the original recommendation and still the document was a success.
Gather document data: Documents are products within your organization and you wouldn't be okay with a product that has no measures would you? Gather reactions, comments, questions, and measures of effectiveness. If this is difficult, build tools to facilitate it.
More A mini-project on my radar is to demonstrate document data collection by allowing feedback and displaying view data for this readme. Its important to consider the context when determining whether feedback should be public or for the document creators alone. In many cases, like for this personal website, private will be the right call.
Log what and whyWhy log: It's important to know what you did and why. In comparison to messages within a channel or emails, logs enforce a formatting convention and searchability that aid discoverability. And like queues in software, logs also create a subscription model that allows interested parties to opt into depth.
Daily Logs: Sharing a daily accounting of the previous day and intentions for the day ahead help set my direction and let colleagues and managers know when to engage. IC daily logs fit nicely in a team channel. Manager daily logs fit nicely in a leadership channel. Resist the pull to write performative daily logs.
Decision vs Meeting Logs: Knowledge work produces decisions that grow into code changes and documents. In the past I've logged meetings but wonder if decisions are a more helpful organizational unit.
Learn your contextLearn the mental models that organizational leaders use in order to color in the context in which you work. You'll become a better ally to leadership and gain a deeper understanding of the frictions you face and their possible solutions.
MoreUnderstand your Team's Productivity - can categorize using Larson's categories - treading water, repaying debt, innovating.2
• How many engineer's are on the team? How many team's on this product? How many teams does your skip-level manage for this product? Have these changed recently? Will they change soon?
• What are some examples of features this team has rolled out in the last 6 months? How many of these features were innovation, how many were addressing technical debt?
• How gelled is the team? How long has the team existed? How long has the tech-lead been on the team? Longest serving member? Average member?
• What are the team's biggest blockers to releasing new features? To answer this, map the development lifecycle using system's thinking.3 What is the team's monthly commitment to on-call work?

How I strive to work with people

The people are the best part of working in tech. They are creative, thoughtful, driven, and self-aware enough to recognize pandering. Even so, we are all human and need reminders. These are mine.

MoreThese are my reminders and they closely relate to my weaknesses, yours are likely different. Critically important practices that come easy for me aren't mentioned here because I take them for granted. I may add them in the future for completeness.

PracticeDescription
Be creative not perfectCollaboration can turn crazy/stupid/bad ideas into great ideas. Find people who enjoy speculating and sharpening ideas.
Seek perspective and supportProximity to technical and people problems can skew your understanding. Seek perspective from people outside your team, even your company. They'll see the forest when all you see are trees. They can also help keep you accountable when you need to have uncomfortable but necessary conversations.
It's never too late to build a relationshipRelationships make work more productive and enjoyable and we should invest in them for their own sake. However, even if you find yourself clashing with someone over work it's not too late to build a relationship with them. Their ideas and approach likely have merit even if it differs from your own.
TeachIf you can't put it in your own words, you don't understand it yet. Ask someone to teach you something and explain it back or teach someone new.
Discuss how we workyou.discuss(this, me); For instance, what do you think of this syntax?
Have funProfessionalism is respecting others and being dependable. If you've got that down there's still plenty of room for fun. We spend too much of our lives working to not enjoy it.

Modes of work that energize me

These are the modes of work that I try to make a significant part of my work week.

ModeI am energized by
MakerFocused time to read, write, and problem solve.4
CollaborativeCollaborative time to learn, teach, imagine, and plan. i.e Yes please to a coffee chat but let's walk or stand at a whiteboard.
In personSerendipitous conversations and personal connection I find when spending time with colleagues in person. This is important enough to me that in a hybrid environment it's worth getting creative with.

Types of work that energize me

This is my ranking of the types of work I find most fun to build and use. I try to work on products with these characteristics. These ranking map closely to the people and ideas that inspire me and are likely the reason why I love to fixate on the human computer relationship.

TypeDescription
1. ToolsI strongly believe that our tools shape us. Creating new features, ease, and discoverability for users, builders, and designers gives me lots of joy.
2. DogfoodingI think that great products come from teams that use their tools. This is important enough that its worth getting creative/having fun with. Empathizing with users is still important because you likely won't represent the diversity of your users but that empathy should follow naturally from your own experience rather than require heroics.
3. ComplexityComplexity creates puzzles and finding simple (even boring) solutions to puzzles is why we engineer. Right?
4. PerformancePerformance requires understanding your system's actual not ideal state. This requires investing in tools to measure and understand your system and then creating creative solutions that limit complexity. Performance is fun because its hard.

References

1. Larson, Will. Staff Engineer: Leadership Beyond the Management Track. Stripe Press, 2021. Michelle Bu, Payments Products Tech Lead at Stripe.
2. Larson, Will. An Elegant Puzzle: Systems of Engineering Management. Stripe Press, 2019.
3. Meadows, Donella H. Thinking in Systems: A Primer. Edited by Diana Wright, Chelsea Green Publishing, 2008.

🔒 Pardon my locks: Some ideas deserve a conversation.

Hidden: Weaknesses and Superpowers