Writing Words and Software

I have a problem when it comes to books. I want to read more than I have time to read. I’ve been able to mostly limit myself to just making insanely big Amazon wishlists, but sometimes I still can’t stop myself from buying books that “I’ll be sure to read soon.”

This has lead to a stack of unread books, and this year I’m trying to make that stack a bit smaller. One of the books I recently started reading from my backlog is T.E. Lawrence’s Seven Pillars of Wisdom. I’m not too far into the book yet, but in the introduction he talks about his process of writing it. He basically wrote the entire book from scratch 3 times along with numerous editing stages and re-works based on reviewer feedback.

The title itself came from another book that he wrote but decided not to publish because the considered it immature. Can you imagine having that kind of rigour going into what you write, before you publish it? We are used to having a fleeting thought and throwing it out there on Twitter for the world to see. I was struck by a thought and started pounding out this blog post. I’m certainly not going to spend 6 or 7 years working through different drafts of this and soliciting feedback before I put it out there for the world to see!

We live in different times and a tweet or blog post is a very different medium than a memoir style book, but have we gone too far? How much rigour and editing should we put into our public writing? What is the trade-off between getting something “out there” and making something good?

The internet is a medium the pushes us to one side of that balance. There is something about it that pushes us to publish our thoughts no matter how nascent or immature they might be – I feel it even as I type this post. How rare it is to pause even just for a few moments before we tap the send button. Taking 6 years to get our thoughts out there is incomprehensible.

I don’t think it is all bad, the push to publish. I’m publishing this blog post without taking a lot of time to review and get feedback. I certainly didn’t start it 6 years ago! However, we may do well to consider how the structures of the system we are in push us in certain ways. Are these ways all good? Could we be swinging the pendulum too far? Perhaps some between the extremes of 6 seconds and 6 years there is a sweet spot of thinking about the things that we publish to ensure that they actually will have a positive impacts on the world.

I’ve been talking about writing up until now, but if you take a moment to think about it, I think you’ll see the analogy to creating software. How much feedback and testing and thought should go into the software that we create before we publish it to the world? In software development, we aren’t generally trying to make something that will be an enduring classic that future generations will engage with 100 years from now, but are we really trying to make something that is an ephemeral as a tweet?

How much thought should go into the software that we publish? I think that if you look at social media platforms, you see a system that heavily rewards instant posting with little to no thought. I don’t know about you, but I find social media to be less and less helpful (although there are islands of usefulness in it). In software development we have a those that espouse code changes going live as quickly as possible. In doing so are we pushing our software systems to become as raw, unmediated and fickle as Twitter and Facebook? Are they going to become more like social media over time?

Let me clarify a few things. First of all, there are some great ways that I have seen people use social media. For example, it can be used as a way to test ideas and get some broad exposure to different ideas very quickly. If you are looking to grow and learn your ideas, social media platforms can be effective for that. The same applies to rapid releases of software development. If the point is to see if your idea is valid, or to better understand some different perspectives that you might be missing, getting your code out there as quickly as possible is a good idea.

If the point of sending your post out into the world is to get as many likes as possible, it seems much less likely to me that your are using the platform to do good in the world. The same with rapid releases of software changes. If the point is get your code out there so that you can have as many dollars as possible, it seems less likely to me that you are actually releasing in a way that is doing good in the world. Rapid releases are a useful tool, if used for the right thing; learning and growth.

A second thing. I am not advocating here for some form of long slow release process. In fact I think having the ability to nearly instantly release code to the public is an enormous advantage. What I’m advocating for here is that we use these kinds of things with thoughtfulness. Just because we can, doesn’t always mean we always should. Sometimes a tweet is the right thing, but sometime a blog post is better and sometimes you need to sit down and write an entire book.

Sometimes immediately releasing your code is the right thing to do, but sometimes a bit of patience and polishing pays off. Sometimes a long slow release pays off. But even then, consider T.E. Lawrence’s process for “releasing” his book.

He wrote the first draft and then lost most of it at a train station (Lesson: always use version control). He then rewrote it into a second draft, but with this draft he was just trying to get down as much as possible of the details before he forgot them. He made sure it was as accurate as possible, but in his words it was “hopelessly bad as a text.” (Lesson: create a prototype). He then wrote a third draft based on the accuracy and structure of the second, but written with much more care (Lesson: Learn from, but don’t ship the prototype). He then sent 5 copies of this text to friends of his for critical review (Lesson: Even things you think are good, can be improved by external feedback). He then incorporated that feedback into the final version of the book.

Overall Lesson: even when releasing something that needs more time and polish before going out, getting feedback along the way is important.

To pull this back to software development, if you are trying to release something that is good quality you will need to have learning loops in place. Testing up front is one such learning loop, but external feedback loops are important too. Just be careful to use that external feedback as a learning loop and not just as a way to feel good about having “released” something. In a world of rapid releasing, live code does not mean you are done. Done happens when you’ve made something that is making life better, not necessarily when you’ve shipped. Shipping is just an experiment. Make sure to treat it as such.

I’m hopeful for humanity. We have things like social media that have been around for a while, and we are starting to figure out their pitfalls. It has taken us as a species a bit of time to figure out this new medium. It doesn’t work like a book or even a blog post and so we can’t put the kind of trust in a post on LinkedIn or Facebook that you can in those other forms of writing. I think we are starting to figure that out and I’m hopeful that we will continue to get better at understanding how to use these platforms well.

In the same way, we have moved to shorter and shorter release cycles in software development, but we haven’t fully adjusted to the new world yet. We still sometimes think of those releases the way we thought of those big bang, year-long releases that we used to do. I think we are starting to get it though. A release is an experiment not a final state.

The more we learn the better we get. Keep on learning!

Photo by Raphael Schaller on Unsplash

Leave a Comment

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s