• Skip to primary navigation
  • Skip to main content
  • Skip to primary sidebar

Dion Almaer

Software, Development, Products

  • @dalmaer
  • LinkedIn
  • Medium
  • RSS
  • Show Search
Hide Search

Archives for December 2014

Tetris and software development

December 19, 2014 Leave a Comment


https://twitter.com/evantedesco/status/544647752014385154

Ever since hearing Evan say this, Tetris has been stuck in my mind. It isn’t that I long to get a game in, but rather the analogy is lodged in there. It is just so easy to riff on, and it comes up as you go through your day.

When you are having a great day you are in the zone and the flow state
kicks in allowing time to slow down, and the pieces that you need seem to be coming at you. Doesn’t that feel fantastic? The flip side is an incoming shit storm, with pelting requests and a list of work to get done that is more than you can ever get too. You blink and the day is done seemingly moments after it began.

Tying this to software

Tetris is a very simplistic closed system. To play the game well we need to understand the system. What are the rules? What does the board look like? Don’t rush, or be lazy. The small mistakes add up, but also know that you can focus and clean them up. There is much that we can do to package up abstractions and have a clear view of what is happening, preparing for what is coming next.

As software engineers we can hack this system to our advantage in a way that we can’t do as game players. Our game thus becomes meta.

How can we hack the game to our advantage?

Isolate mistakes

You are having a clean game and then you make one silly mistake. Man it makes you mad. A lot of work has to be done to fix that mistake, and the debt needs to be paid. How can you use abstractions in your software to isolate various sections so mistakes can’t get out of hand? What if you could create multiple surfaces where the abstractions aren’t leaky? Take a flesh wound vs. a fatal one, giving you time to clean it up and move on.

Creating new pieces

The rules get you pattern matching the small number of pieces that could come your way. The constraints mean that you quickly learn certain tactics, but what if you could create more pieces that fit in nicely? If you can create any piece the game becomes boring, but in reality that isn’t a huge concern as the pieces are very complex and you don’t fully know how they all fit together.

Morphing pieces

Having new pieces is important, but being able to morph pieces after the fact would be even better. This would allow you to make more mistakes and give you the ability to change the past.

Reset

Sometimes the board is just too messy, and you need to know when it is time for the nuclear option to reset the board. This is an expensive option as it often speeds up the clock while the business waits for value to be created as the debt is collected.

A very common mistake made is to reset, thinking it is the “easy option” vs. doing the work to refactor your way out. A pre-requisite to this move is understanding Second System Syndrome before you implement it.

Immutable state

The strong push for immutable deployable containers has huge advantages. I remember cheering when one of our Linux servers had an uptime long enough that it went around the clock. These days, this is a bug not a feature. The longer a system is running like that the greater the chance that things have been mucked around and a cancer has been created. It is far better to clean up the system regularly as that enables stability.

We often long to be stable, thinking that this means standing still. However, nothing is stable. The environment is always changing, so it is actually far better to give in to that and to instead embrace it.

Homeostasis

I now try to think in terms of homeostasis. Dave Thomas does a fantastic job of talking about this in relation to agility and how you have your hand on a rudder making changes. The best pilots are making many frequent tiny changes to keep a small oscillation around the direction you are looking to grow.

When you set the thermostat at 68 degrees the temperature is never set there. The best thermostat will make subtle changes to the air flow to keep it as stable as possible versus having a system go off and on with large bursts that cause large fluctuations.

Build the habits to deal with the constant change and then trust in your systems, just as you trust your body when you run. You probably aren’t thinking “arrrrr I am fallllllling!” at each step, but that is what is happening.

My mission is to create architectures that allow me to make small changes to get to a better path over time. Now and then we evolve something new that allows and requires a reset, but sometimes the evolution is subtle enough that you can’t see it as it happens.

Now, back to the Tetris game of live and getting Zen enough to deal with the blocks that keep falling!

Building your mind, one brick at a time

December 16, 2014 Leave a Comment


“Reading and experience train your model of the world. And even if you forget the experience or what you read, its effect on your model of the world persists. Your mind is like a compiled program you’ve lost the source of. It works, but you don’t know why.” — Paul Graham

I have been reflecting on this topic a lot recently. I loved Sam Harris’ recent book Waking Up and it once again got me into a trance of:

  • I don’t remember anything. Ask me to recount events from when I was 24. Holy crap. An entire year, yet how many events can you bring to mind?
  • What I do remember is edited.
  • Well, what am “I” then? If you took away my memories what do I become? If you sever the hemispheres via a callostomy then you see a view of the world where there are two consciousnesses

Yikes.

Time is rushing by and I am trying to do better by being mindfully aware of the now vs. the past or future. The decisions that I make in the now will compound over time. When you see the effects of compound interest in money, think about what that could mean to the compounding of events and how you spend your time?

This lead me to the analogy of building a house.

Your actions every moment build the house, and at the end of the time you have one ready for you to start occupying. When building that house, ask yourself some questions:

  • Do you want to cut corners? If so, which ones? (Are you looking to save time? Are you looking to find the right balance where the foundation is still more than sound, but the savings are meaningful?)
  • Are you proud of your craft?
  • Do you focus on building a strong foundation and understand where you get leverage?

While you are at your house warming you realize that you don’t remember brick number 20345. You don’t remember its details, or the details of how you placed it. But the sum of the actions and your experience ended up creating what you now stand in. Each brick kinda matters.

With this in mind I try to use my time wisely. I want to lay that brick down correctly so it can be built on for the future. I won’t take the short cut and have that candy bar. I won’t skip the gym. I won’t sit in front of the TV because it is the easy option and I am tired.

Fun balance

Then I started to wonder. Do I want to be just a foundation? Where is the room for the innovation in the house? For trying things? Why are our schools like grey boring cells vs. more like creative spaces from Dr. Seuss?

alphabet schoolio

While I am building I need some time to let loose and to try something new. It is OK and expected that it won’t always work, so try to give it space and measure to know if it is sound after the fact.

It is a really bad idea though to be in one mode while thinking that you are in another. I try to combat that by allowing myself explicit time to let of steam. I have a “cheat day” for food every week. I will have a glass of wine with friends to de stress and have some fun. I will have free time to do whatever I want with (which could include seeing that gratuitous movie!). These release valves can allow me to be focused when I need it.

I hope to get better at this over time, and then the house continues to strengthen its foundation while becoming more interesting. I have always loved how software is malleable and can be improved after the fact. The mind is the same.

The age excuse

One mantra I have for myself is to not use age as an excuse. I don’t want to stop working out because “I am getting old”. I don’t want to stop working as “It is time to retire”. These are cop outs. The brain is trying to force you into the path of least resistance. We are built that way and need to keep fighting it.

As we learn how important it is to always be pushing the brain to learn new things, I often wonder about the role of experience vs. learning. How can you best optimize for the outcome that you are going after? For example, if you learn a language there are a slew of ways to do it. Tim Ferris is the king of the 20/80 rule here: 20% of the effort for 80% of the reward. There are ways to do a more efficient job of learning and you should fight to find them.

That brings me back to where we began with Paul Graham and reading. I have such a backlog of books that I sometimes start to feel stress. I then want to rush to read faster, which results in less absorption of the material and learning less. Instead I fight to read slower, take notes, and let things really sink in. I want to pack away the knowledge so it can be used in the future (both in my brain and also via tools).

I am trying very hard to lay the bricks with precision, but also not losing sight of the fact that I want to have a joyful, original life journey.

After all, you don’t want your running program to be easily reversed back to any old source code do you?

How Slack built a well loved product going against Peter Thiel and native app fashion

December 5, 2014 Leave a Comment


I enjoy watching companies do fantastically well against the grain. It is the opposite of schadenfreude, and although the Germans may not have a word for it the budhists have the concept: mudita.

One example as of late is Slack. We were incredibly early adopters when we jumped from Campfire to it a long time ago. Its valuation growth has been astounding and we love the product.

Here are two lessons of Slack’s early success that buck the trend:

Slack and incremental improvement

Peter Thiel talked about how your business needs to build something that is 10x better that what is out there. Larry Page and others have also talked about the need to leap-frog. Revolution over evolution.

Imagine for a second that Stewart Butterfield had decided to start off with Slack (versus doing another genius pivot) and he had come out and said:

“We are going to do a better group chat! It will be worth billions!”

You would have laughed. It is such a crowded market. Hell 37Signals decided to close up shop on Campfire and focus on Basecamp. They thought that it was basically done and weren’t adding features!

“According to Fried, Campfire and Highrise will likely sell for single digit and tens of millions respectively”

Slack was a better Campfire. It’s search was so much better (with ElasticSearch and friends it is so much easier to make search awesome in your products!). They added features (e.g. private groups really matter to many companies. I wonder if 37Signals missed this as they are a small company that didn’t need it themselves?). They polished (how they grok URL pasting).

On paper if a large IT organization were to compare the features of Slack to HipChat and Campfire and [insert all the others] you would end up with a table of checkmarks and crosses, yet this doesn’t tell the tale. Again, people *love* Slack. I am sure there are people who enjoy the other tools, but I don’t hear the same passion. If you took it away, how would the masses react!

Of course, there are many many companies who came along and just did something better. Facebook to Friendster/MySpace. WhatsApp to all of the other chat apps. Google to AltaVista. iPod compared to the Argos.

Oh ok, some of those are “10x better”, however you define that ☺

Slack isn’t (all) native

UPDATE: I got this wrong! Ali Rayl of Slack corrected me, letting me know that although the Mac app is MacGap, the iOS and Android apps are native. Fascinating… they feel all so similar. I would love to understand if anything is shared. It feels like there is a lot of Web going on here. I am shocked!

To build a product that doesn’t feel like it was a mediocre UX means native right? Especially if it has to work real-time and be highly interactive!

Slack wears its Webbiness like the iPhone 5c embraced plastique. The Mac app is MacGap and the forthcoming Windows app is built on top of Atom Shell. In the Mac app, I used to enjoy being able to get to an Inspect Element popup, and you can select text all over the UI!

What about under the Web hood?

You have to deeply care about the craft and be on the bleeding edge right?

These days you would expect Slack, as an app pushing the Web, would be diving into React or Angular or Ember.

There is no way it would be powered by some brute force DOM manipulation with jQuery right? No ugly brittle code like this?

$(“#col_channels_bg”).parent().prepend(‘

starred

    channels

      dms

        <a id=”im_list_collapsed_more” class=”list_more hidden”>X</a></div>

        groups

          </div>‘);

          Huh, and that killer node (whoops io.js? ;) or go backend? Nope, LAMP.

          Huh.

          It is very humbling to be reminded that although I care deeply about the craft of software development, you shouldn’t get too anal about every aspect and instead should focus on the quality of the product. I am sure the Slack team cares deeply about many parts of the software process, and it is working for them.

          Don’t get me wrong, the UX isn’t perfect (whose is?), and I think that a totally native desktop experience would be superior but there are trade offs. Who are the players on your team? How quickly can you develop features across the platforms?

          Maybe it is good to explore being more of a Slacker? Stay humble!

          p.s. I do love the other subtle touches, such as the fun release notes!

          Next Page »

          Primary Sidebar

          Twitter

          My Tweets

          Recent Posts

          • I have scissors all over my house
          • GenAI: Lessons working with LLMs
          • Generative AI: It’s Time to Get Into First Gear
          • Developer Docs + GenAI = ❤️
          • We keep confusing efficacy for effectiveness

          Follow

          • LinkedIn
          • Medium
          • RSS
          • Twitter

          Tags

          3d Touch 2016 Active Recall Adaptive Design Agile Amazon Echo Android Android Development Apple Application Apps Artificial Intelligence Autocorrect blog Bots Brain Calendar Career Advice Cloud Computing Coding Cognitive Bias Commerce Communication Companies Conference Consciousness Cooking Cricket Cross Platform Deadline Delivery Design Desktop Developer Advocacy Developer Experience Developer Platform Developer Productivity Developer Relations Developers Developer Tools Development Distributed Teams Documentation DX Ecosystem Education Energy Engineering Engineering Mangement Entrepreneurship Exercise Family Fitness Founders Future GenAI Gender Equality Google Google Developer Google IO Habits Health HR Integrations JavaScript Jobs Jquery Kids Stories Kotlin Language Leadership Learning Lottery Machine Learning Management Messaging Metrics Micro Learning Microservices Microsoft Mobile Mobile App Development Mobile Apps Mobile Web Moving On NPM Open Source Organization Organization Design Pair Programming Paren Parenting Path Performance Platform Platform Thinking Politics Product Design Product Development Productivity Product Management Product Metrics Programming Progress Progressive Enhancement Progressive Web App Project Management Psychology Push Notifications pwa QA Rails React Reactive Remix Remote Working Resilience Ruby on Rails Screentime Self Improvement Service Worker Sharing Economy Shipping Shopify Short Story Silicon Valley Slack Software Software Development Spaced Repetition Speaking Startup Steve Jobs Study Teaching Team Building Tech Tech Ecosystems Technical Writing Technology Tools Transportation TV Series Twitter Typescript Uber UI Unknown User Experience User Testing UX vitals Voice Walmart Web Web Components Web Development Web Extensions Web Frameworks Web Performance Web Platform WWDC Yarn

          Subscribe via Email

          Enter your email address to subscribe to this blog and receive notifications of new posts by email.

          Archives

          • February 2023
          • January 2023
          • September 2022
          • June 2022
          • May 2022
          • April 2022
          • March 2022
          • February 2022
          • November 2021
          • August 2021
          • July 2021
          • February 2021
          • January 2021
          • May 2020
          • April 2020
          • October 2019
          • August 2019
          • July 2019
          • June 2019
          • April 2019
          • March 2019
          • January 2019
          • October 2018
          • August 2018
          • July 2018
          • May 2018
          • February 2018
          • December 2017
          • November 2017
          • September 2017
          • August 2017
          • July 2017
          • May 2017
          • April 2017
          • March 2017
          • February 2017
          • January 2017
          • December 2016
          • November 2016
          • October 2016
          • September 2016
          • August 2016
          • July 2016
          • June 2016
          • May 2016
          • April 2016
          • March 2016
          • February 2016
          • January 2016
          • December 2015
          • November 2015
          • October 2015
          • September 2015
          • August 2015
          • July 2015
          • June 2015
          • May 2015
          • April 2015
          • March 2015
          • February 2015
          • January 2015
          • December 2014
          • November 2014
          • October 2014
          • September 2014
          • August 2014
          • July 2014
          • June 2014
          • May 2014
          • April 2014
          • March 2014
          • February 2014
          • December 2013
          • November 2013
          • October 2013
          • September 2013
          • August 2013
          • July 2013
          • June 2013
          • May 2013
          • April 2013
          • March 2013
          • February 2013
          • December 2012
          • November 2012
          • October 2012
          • September 2012
          • August 2012

          Search

          Subscribe

          RSS feed RSS - Posts

          The right thing to do, is the right thing to do.

          The right thing to do, is the right thing to do.

          Dion Almaer

          Copyright © 2023 · Log in

           

          Loading Comments...