Posts categorized as: software-engineering
I have been in the “enterprise software engineering” industry for 22 years.
During that time, I have briefly but technically become a cloud startup millionaire. I published the first book with “cloud-native” in the title (and yes, the goddamn hyphen is correct, I said what I said). In fact, I have invested so many hours into mastering my craft that I literally have to turn down invitations to speak at conferences on the regular, even in this post-COVID era.
There are many things most people don’t know about working in Software Engineering.
For example, did you know…
We reinvent the foundational dogma of our entire industry every 7-10 years. I’ve seen three cycles! The equivalent of a graduate-level education with multiple software engineering specializations is freely accessible on the Internet, and most engineers don’t look at it. We have overwhelming volumes of data that tell us specific software engineering models work, and we do the opposite most of the time.
Laboratory science has much in common with software engineering:
We take a new language or technology and experiment with it to see what it can do and how it performs. When we practice Test-Driven Development, every failing test that we write encodes a hypothesis: that the test actually will fail! We gather and study data obtained from our system and its surrounding environment as we troubleshoot incidents. We hypothesize causes, and we try to reproduce results.
Today we’ll walk through the next summarization level we need in our dev logs: monthly reviews.
We’re slowly climbing a mountain:
Daily logs tell us the quantum details of what we did on a specific day. Weekly reviews roll those details up into atomic accomplishments for the week. Monthly reviews compose those accomplishments into molecular deliveries. Pardon the poor quantum physics analogy, but I think it’s apropos. We are building what Tiago Forte calls “intermediate packets.
Today I’m going to teach you how to begin your journey to harvesting insights from your dev log.
You should expect a healthy ROI from the time you spend capturing your daily activities. Simply writing down everything you do each day isn’t enough. Reviewing and summarizing the week is like conducting a mini-retrospective with yourself.
Unfortunately, most people never conduct a single weekly review.
Because they don’t know how. Not only that, but:
To harvest meaningful patterns from your dev log, you’ll need to capture the same things daily.
I’ve been engineering software for 21 years, and I’ll share what I’ve routinely kept in mine. Your context is different, so your list will be also. Just make sure you capture the same things daily.
Use this list as a skeleton to start from. It’s easier when you aren’t starting from a blank page!
In 2001, Lamont Adams of TechRepublic chiseled what would become ten commandments of Gerald M. Weinberg’s timeless wisdom: Egoless Programming. Today we’re going to learn its third commandment:
No matter how much “karate” you know, someone else will always know more.
First of all, this is a good thing. My friend Neal Ford has said that as soon as you are the smartest person in the room, it’s time to look for another room.
In 2001, Lamont Adams of TechRepublic chiseled what would become ten commandments of Gerald M. Weinberg’s timeless wisdom: Egoless Programming. Today we’re going to learn its second commandment:
You are not your code.
This is without a doubt one of the hardest lessons for any early-career engineer to learn. As humans, we take pride in our creations. Unfortunately, software is soft because it’s meant to be changed, rewritten, and very often discarded completely.
In 2001, Lamont Adams of TechRepublic chiseled what would become ten commandments of Gerald M. Weinberg’s timeless wisdom: Egoless Programming. Today we’re going to learn it’s first commandment:
Understand and accept that you will make mistakes.
This one should be obvious. But we engineers often behave as if our fallible human nature does not extend to our chosen craft. And as much as I’d love for that to be true, it simply isn’t.
In 1971, Gerald M. Weinberg wrote1 these Ten Commandments upon the stone tablets of The Psychology of Computer Programming.
Well, they weren’t really written in stone. But they have stood the test of time. Wise is the software engineer who learns them and puts them into practice.
1. Understand and accept that you will make mistakes. Assume that you will write bad code. Find it and fix it before it affects users.