Author Archives: Lou Franco

Useful Books I Admire

I am trying to write a useful book on technical debt. I am near the beginning of the process and still trying to find the format. To do that, I’ve been thinking about useful books I have read and what I loved about them.

The first one that came to mind is Writing Down the Bones by Natalie Goldberg. It’s part memoir and part writing exercise workbook. It’s similar to the Artist’s Way by Julia Cameron, but the tone resonated more with me. Bird by Bird by Anne Lamott would also fit this category. These are books you are meant to apply immediately.

I’ve been writing a lot about The Four Disciplines of Execution lately. This book’s style is just a very straight-forward business how-to with case studies. For me the technique is so compelling, that the format almost wouldn’t matter. It’s a four-step process with four-steps clearly described.

All of Rob Fitzpatrick’s books are great, but The Workshop Survival Guide is particularly useful. The authors assume that you have a workshop coming up and are in a hurry. They don’t waste time and get right to helping you design it.My favorite part is the structures for workshops of various lengths. Best tip is to use Q&A to make the timeline springy. Makes me want to give a workshop.

Looking at my post on Great Software Writing (that influenced me personally), eXtreme Programming is the one that strikes me as the most useful. This book introduced me to CI, unit-testing, pair programming, and refactoring. I use the lessons from this book daily.

4 Week 4DX Checkin

I’m using techniques from The Four Disciplines of Execution (4DX) this year to help me reach my important goals. I documented my setup process in these posts:

  1. 4DX: Applying the First Discipline
  2. 4DX: Applying the Second Discipline
  3. 4DX: Applying the Third Discipline
  4. 4DX: Applying the Fourth Discipline

The gist is that you (1) identify an important goal (2) design and act on lead measures — things you control that you can do at any time that will add up to that goal (3) create a compelling scoreboard and (4) have regular accountability.

I chose to have 3 goals in 3 separate areas of my life that have segregated time. The book stresses having only one goal, because they are imagining that you apply this to work—I do have only one work goal.

For my work and personal growth goals, I have done my lead measures at or more than the level I wanted and I am making progress. Things seem to be going fine there.

For my fitness goal, I am doing what I set out to do, but I am not seeing progress, so it’s time to rethink if my lead measures are right. In my case, I think they are generally good things to do, so I will keep doing them, but they are obviously not enough.

In 4DX, we are supposed to periodically make sure our lead measures are taking us where we want to go. So, I want to share my thinking. The point is not my specific fitness goals or process—if you disagree with my fitness approach, that’s fine—the point is that I am trying to incorporate new knowledge and try something else.

Here’s my thinking:

My fitness goal is to reduce body fat with the lead measures of strength training and higher protein breakfasts. The result so far is that I am getting stronger (can do more pullups, lift more), but my body fat % hasn’t changed at all. My weight also hasn’t changed, but I am ok with that. I have been using a body fat scale since 2019, so I looked at my history, and I see that my lowest body fat % was when I was doing the most running. This is frustrating.

I chose to lower the amount of running I do because I am trying to avoid knee problems. I don’t have any now, and I want to keep it that way. During my lowest body fat periods, I was training for half and full marathons, which I am not planning to ever do again.

So, it appears that for me, I might need more cardio. From my research, I know that this may inhibit muscle growth, but that effect is because of calorie deficit. So, I will add more cardio (but low stress activities like swimming, rowing, and the elliptical) and I need to find a good healthy source of extra calories. I hate to rely on protein shakes, but that will be part of it. I have also seen some research that would indicate that I should substitute whole starches for tofu and tempeh because of their high fat content.

So, my breakfast will have fewer tofu scrambles with tempeh bacon and I’ll have to come up with a bean/quinoa breakfast. I also make an egg substitute from mung beans that has better macros than Just Egg, which I’ve been having a lot of. I will also cut bread as much as I can—mostly this is a problem because I use plant burgers as an easy lunch—I’ll just have to have it with no bun.

So, my new lead measures are to keep the strength workouts, add three 30+ minute low-stress cardio workouts, and keep the breakfast, but lean more on beans/quinoa/mung beans and less on tofu and tempeh, and skip the bread as much as I can. I will need more calories, but I will find them in whole starches.

In any case, don’t let my fitness choices distract you. The point is to periodically look at your desired lag measures for your goal and make sure your lead measures are moving towards it. It’s not something you can see every day, but I think four weeks is enough.

Write for Yesterday

I aspire to write a post every day, but sometimes I’m busy and I forget. I don’t want to break the streak, so I allow myself to post to yesterday, which I’m doing today.

Build a Progress Bar for Your Work

When I begin a coding session, I start by taking the task I need to do and breaking it down in fine detail. For example I am working on personal productivity system, which has a “Project” concept. In my first pass, Projects just had a name field. I was just working on getting the relations right. Now, I want to flesh it out a bit. I have a Jira issue with the title: Add “color”, “startDate”, and “endDate” fields to Projects.

Here’s how I break that down:

  1. Add fields to DB entity
  2. Add fields to DB createProject, updateProject
  3. Test DB
  4. Add fields to server GQL createProject, updateProject
  5. Add fields to client GQL createProject, updateProject
  6. Add fields to client GQL project query
  7. Add fields to client model and redux initialize
  8. Add fields to redux createProject, updateProject
  9. Add fields to API/Optimistic updateProject, createProject
  10. Test API/optimistic update/redux
  11. Add a color picker for setting color
  12. Add UI to create project dialog
  13. Add UI to update project dialog
  14. Test UI

I could get more granular, but this is about the level I like. I put them in my task manager to keep me on track and to make sure I’ve thought the problem through. This will roughly be the order I do it and the commits I make.

It guides the session and keeps me on track. If I don’t finish, I just move the incomplete tasks to the next day, which lets me preserve some of the momentum from the previous one. Also see: Green, Refactor, Red, where I end the session with a failing test for the next task I want to do.

Short-Form Style

There’s a style of writing you see a lot on LinkedIn Posts. It’s meant to be easy to consume.

It works well there because it meets the user where they are—in a hurry.

But, it doesn’t work for a whole book.

Short form media is great to bring attention to a topic with humor or emotion, but we read books because we want more than that. You are ready to go deeper. The only way for an author to communicate that depth is to create interesting, cohesive paragraphs that have a range of sentence types and clauses because deep content is nuanced and you need the clauses to understand it. The paragraphs need to be longer than than a sentence. The sentence length needs to vary.

Or else every sentence will sound equally important.

Or equally unimportant.

And it’s exhausting to read.

Note: The third season of my podcast was all about sentences and paragraphs. Episode 28: Complex Sentences and Episode 29: Loose Sentences are particularly related to what I am getting at here.

Monetizing Waste

I did some consulting for a major industrial chemical company 20 years ago and one of the interesting lessons I learned was to use my waste.

Each chemical process they ran generated the desired output and some waste products. But, they thought of that waste as just another chemical compound that could be the input to another process. A big part of the business was designing and selling products that made use of waste that was being produced. For that new product, the waste had negative cost because they would have had to pay money to dispose of it.

Using waste helped me start App-o-Mat. I bought the domain as soon as the AppStore opened in 2008 because I thought it was a cool name. I didn’t do anything with it, but kept paying for it every year.

In 2013, I decided to leave my job and do consulting full-time, and I was hired to write an app using Cordova (PhoneGap). At the time, the online documentation for it was pretty bad, but I had figured it out and made my own template for projects that brought together and configured the most useful plugins I found to make Cordova apps look and act more like native ones.

But, I still thought that Cordova too hard to learn, so I made a YouTube tutorial series showing how to use my template and build a minimal blog reader app. I put it all up on App-o-Mat.

App-o-Mat has been valuable to me in two ways:

  1. It has generated leads for my consulting business
  2. The site itself is written in Django, which kept me sharp in Python and web development during the time I was doing iOS full-time.

But I might not have done it if I didn’t have some waste product I could use to get it started.

Making Time

You can say that you find time to do something or take time to do something, but I like saying I make time to do something.

Time, of course, can’t be made, so it’s magic if you do it.

Paying off Tech Debt Makes You Happy

Chapter 1 of Joel Spolsky’s User Interface Design for Programmers is titled “Controlling Your Environment Makes You Happy” and contains a story of Joel’s time working in a bakery which concludes:

The more you feel that you can control your environment, and that the things you do are actually working, the happier you are.

This is why I Use My First Commit to Fix CRAP. It takes 5-10 minutes and lets me exert some control on my environment. I start each day with a small success. If I feel frustrated later in the day, I just do it again.

Money Dials in Software Design

When I read I Will Teach You to Be Rich, I learned to concentrate on increasing income, not reducing costs. In that same book, Ramit Sethi also talks about the concept of money dials.

There are some things that you love so much that you would be willing to pay more to get a better version. You turn those dials up, and then you ruthlessly cut everywhere else.

The concept of money dials also applies to software product design. There are some things in your software which make it unique and valuable—is there a way to turn that up? Can you invest so much along those lines that it would be impossible for competitors to copy?

To afford that investment, what do you not need at all? What can you reduce to the minimum? It’s not just that it would cost less, it’s also less code and possible legacy thinking that stops you from making progress on areas where you have turned the dials up.

Passive Voice Commit Messages

I saw a suggestion to use Subject-First Commit Messages to make it easier to scan the log. I switched over to this about two weeks ago and like it.

When you write commit messages this way, they tend to result in passive voice sentences like “Project cleared from project prompt dialog when closed” and “Title added to date prompts”. Many style books suggest that you not use the passive voice, which is then repeated as a rule. But, the passive voice is useful, and is often used by the best writers (go check your favorite). Even those style books (like Strunk and White) give exceptions.

When writing a sentence, it’s important to control the subject. In most commit messages, the implicit subject is the programmer. For example, in “Added title to date prompts”, the subject “I” is dropped. Since we know that the programmer is making the commits, we don’t need to constantly repeat it. It’s better to pick the most important noun in the sentence and make that the subject, and to do that (in English) you have to use the passive voice.

I talked about this in Write While True Episode 37: The Passive Voice Was Used. If you want to see a thorough take-down of anti-Passive Voice zealots, watch Larry McEnerney analyses the Gettysburg Address, which I discuss in the podcast episode.