I recently watched a couple interviews with Cory Doctorow discussing AI. He explained the concept of the "Reverse Centaur" from the title of his upcoming book . Here's how he defines that term on his blog : In automation theory, a “centaur” is a person who is assisted by a machine. You’re a human head being carried around on a tireless robot body. Driving a car makes you a centaur, and so does…
I've had many jobs over 20+ years in the software industry, and every one of them has been dysfunctional to some degree. Of course, that's normal. No person is without flaws, and the same is true of jobs. Even my best jobs had dysfunction. There are many ways for a job to be dysfunctional... Micromanagement Unreasonable deadlines Poor communication Etc. But something I've learned over time is that…
I had to turn off comments on this blog several years ago because most of the comments were being left by bots, and it felt like an uphill battle trying to manually remove them over hundreds of blog posts. I'm really bummed about that, because (back when people still read blogs) I would get a steady trickle of comments from real people who wanted to say something about my posts. It feels more like…
I remember many years ago interviewing at a software consultancy where one of the consultants in the meeting was talking about a project they had going on. He was marveling at how fast the team of junior developers on the project was " cranking...out...code. " I'll never forget the way he said it, and the look of awe on his face as he slowly shook his head back and forth. This of course happened…
If your team has consistent, reliable delivery of working software to production, you’re crushing . Don’t mess with it. It's astonishing how many teams in real world software development can't do this. I've witnessed it over and over and over in my career. If you have a backlog, sprint planning, a dependable QA function (even if manual and/or slow), and scripted deployments on-demand, you are very…
I really enjoy doing UI work: being close to the user's mind, thinking deeply about interaction design, and how small changes can massively improve someone's day. But in order to market oneself as a “Front-End Engineer” in the current landscape requires dogged attention to fashion trends, and I'm on Team Evergreen , baby. Early in my career in web development, I loved reading Jakob Nielsen and…
From the principles of the Agile Manifesto : Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely . Extreme measures are always doomed beyond a limited time horizon. Whether we're talking about diets or software development practices, without sustainability you have nothing. Initiatives to increase…
When I was coming up as a young web developer. the concept of progressive enhancement was kind of at the hipster vanguard of web development. This was in the phase of the web where JavaScript and CSS feature parity amongst browsers could not be taken for granted like it is today. The idea of progressive enhancement was that you started by making your web application work on an essential…
I recently came across a blog post called Seeing Like a Software Company by Sean Goedecke on Hacker News . The post hooked me right away by introducing to my vocabulary the term "legibility": By “legible”, I mean work that is predictable, well-estimated, has a paper trail, and doesn’t depend on any contingent factors (like the availability of specific people). Quarterly planning, OKRs, and Jira…
Conway's Law is foundational to software engineering. It says: Organizations which design systems...are constrained to produce designs which are copies of the communication structures of these organizations. If you've ever had any job in the software industry, you've almost certainly seen this play out in the architecture of your codebase. Group A works on Thing X and Group B works on Thing Y, so…
If you want to move fast, don’t make speed your goal. Make smoothness your goal. Fast naturally follows smooth. Every software organization wants to be fast. And fast has a certain look to it. Buzzing Slack channels, video calls, people huddled around a screen or whiteboard. It's very easy to conflate "high touch" work practices with speed. As I mentioned in my previous post , one of the huge…
Value, value, getting value to users. Work on the most valuable thing, always. You could probably summarize the Agile philosophy as "deliver value to end users faster." What's the next most valuable thing we could work on, get it done, and get it out to production. With a sprint cadence, we commit to a strategy for two weeks, we work as a team through the items in our sprint backlog, and we…
Teams vary in the amount of handwringing their leaders do about sprints that aren't perfectly rightsized. What if we bit off too much work at the start of the sprint and can't finish it all by the end? What if we overestimated the work and didn't fit in as many tickets as we could have? I've worked with teams where having work incomplete on the last day of the sprint was no big deal, it happened…
In the software engineering profession, there's a concept called "resumeware". It's software that was made with the engineers involved in the design specifically making choices about technology stacks in order to have marketable experience to put on their resume in order to improve their future job prospects, regardless of whether they're a reasonable choice for the system at hand. You can kind of…
I've been a subscriber to the r/ExperiencedDevs subreddit for a few months, and I've noticed a common pattern. Someone will post a question to the group desperately seeking advice about some stressful situation that they are clearly very worked up about at their job. The author's specific concern or complaint could be just about anything, but the general feeling is that from their point of view…
Writing unit tests is one of those tasks that software engineers often see as tedious. In fact, I've heard from fellow engineers that unit test generation is one of their favorite uses of LLMs . Let the AI write them! I've always been deeply uncomfortable with this use of LLMs, even though I'm all for reducing the tedious aspects of work in general. Unit tests are not boilerplate code. If you've…
Decision-makers can remain irrational longer than you can remain solvent. (Or, in this context, remain employed.) - Will Larson, " Career Advice in 2025 " "AI" coding tools like Copilot went from a mere curiosity to full-blown silver bullet territory in a few short years. I'm all for reducing the accidental complexity Fred Brooks wrote about in his classic essay on software engineering, but what’s…
One of my optimistic beliefs about software engineers is that we're full of good ideas about how things around us could be improved. We're smart people, problem solvers. We read tech news, we're friends with engineers at other companies, we bring diverse career experiences to each job--in other words, we're at least vaguely aware of better ways of doing things that are happening in other places.…
I found a site called Progression.fyi that curates a list of "career frameworks," or in other words, the level-progression system of titles that a bunch of tech companies use for their software engineers. It's pretty interesting to peruse. Several of these companies define what the often nebulous title of Staff Engineer means to them, which I find particularly compelling. Here are a few companies…
One of the greatest services that software engineers provide is that we help people understand their own thought processes. We're transcribers of human thought, in a way. We have to understand a human process so intricately that we can write down instructions in another language that the dumbest, most literal being on earth (a computer) can follow. We hold a mirror up to the user: We built this…
I've written before on this blog about the different personality traits of software engineers, and how different traits balance each other on a team. Some of the spectra I came up with were: Dreamers ↔ Pragmatists Big Picture ↔ Detail-Oriented Move Fast & Break Things ↔ Slow & Methodical Optimists ↔ Pessimists Answerers ↔ Questioners Recently I read a comment on Hacker News (which I can't find…
The Product Owner has the final say in backlog prioritization. But who writes the backlog? Is it always the product owner? My experience with Agile has been that, in the real world, the backlog contains two types of items: The "user stories" that discuss functionality from the perspective of an end user Technical stories--including things like technical debt, maintenance, package upgrades, etc.…
I feel like every job I've ever had in software there has been some old legacy system hanging around that everyone denigrated and perennially spoke about replacing with a newer, shinier system. That replacement was always coming any day now . By the time I'd moved on to a new job, that legacy system was still running, quietly doing some important function for the business, having somehow survived…
There are tensions in Scrum anywhere you have intra-sprint cycles that must resolve by the end of the sprint. In my last post I wrote about manual quality assurance and the tension that causes in a Scrum setting. Another one of these intra-sprint cycles that most Scrums teams include in their process is code review . You could, in a way, consider code review to be another form of "QA". In both…
After working for many years in the software industry, almost always using a methodology resembling Scrum, there are certain tensions that I've come to believe have no good solution--at least--I've never seen them solved elegantly. One of those tensions comes from manual quality assurance. When sprint backlog items need to be manually tested by dedicated QA people, there is simply no clean way to…