Jonathan's Blog
name

Jonathan's Blog

Mindful Leadership and Technology


TagTechnology
Featured

Software Development Technical Debt Technology

Technical Debt as Metaphor, Where it Works and Where it Doesn't

Posted on .

I am across this article doing research for another post, I really enjoyed and think it is extremely valuable way to think about technical debt.

https://martinfowler.com/bliki/TechnicalDebtQuadrant.html

I'd go so far as to say, I'm going to expect developers I work with to read it and tell me which kind of technical debt they're talking about.

You should take the time to read the whole article. It's great. I'm not going to summarize it, only talk about a couple of things that I think are valuable and interesting.

Here's the quadrants for technical debt as Fowler defines them:

Technical Debt Quadrants

The first part of the article discusses the concept of technical debt and how it works as a metaphor to financial debt. Largely this distinguishes the concept of prudent from reckless debt, which is a useful distinction to have on hand for discussing projects with developers and clients.

In the financial realm you have prudent debts that you take on carefully, after doing your research, in order to further your goals. Buying a home, buying a car, purchasing rental property.

And then you have reckless debt that is taken on without proper research or out of alignment with your goals like buying a luxury items you can't afford.

There are two parts of this that I want to talk about in a bit more depth.


The first piece has to do with the concept of prudent, deliberate debt and where we begin taking it on in a project. I've had many conversations with developers over the years who may struggle to shift their mindset as you reach the end stages of a project.

Developers like to do things the right way - the scalable way, the smart way, the most effective way. I certainly did when I was a developer, and all the good developers I've known share this characteristic.

But there are times when you just need to finish off a feature or two and launch a product. Delays are dangerous in this situation. This is the moment to switch from avoiding all debt to taking on prudent, deliberate debt. It's time to say, "Yes, we could design it that way, but we need these features and we need to go to QA next week so please get it done."

Business realities drive us to these decisions, and most importantly, it is not wrong to do this. If you were a very savvy PM or product owner you might even put a date on the calendar when you think the decision making may change.

This doesn't negate the value of the all the design and hard work that went before it, nor does it mean you can't go back and revisit these items in the future. It just means, right now, in this phase of the project, we are making pragmatic decisions to ship and that is 100% OK and in line with best practices.


The second is the concept of prudent, inadvertent debt. Every project has it. No good developers are ever really satisfied as a result of it. But we can't ever truly get rid of it.

Why is that?

Just for clarification: prudent, inadvertent technical debt is the idea that some parts of system design will only really be apparent after the project is complete or once a particular phase is too far along to alter them.

This concept has no analog in the financial debt metaphor. There isn't a financial debt you can take on inadvertently and still be prudent. Being prudent implies that you don't have inadvertent financial debts.

But software is not finance - every software project has things that the development team would like to refactor toward the end.

If every project has this type of technical debt, why can't we eliminate it?

We can't eliminate it for two reasons:

  1. Technology changes too quickly. New tools come along and those tools have real business value so they can't be ignored. We bring them in to projects knowing we don't have every design ready for them. We do this because we push for ever greater scale, effectiveness, and feature delivery. We do it knowing it results in imperfect designs.
  2. Business Spaces are too diverse and changing too rapidly. Just when we think we understand an audience or a business, it changes. You can't be complacent, you can't rest thinking you know everything, you don't. Neither can you be paralyzed by such knowledge.

So, when you mix 1 and 2 together you get a situation where you can't design everything in advance. You look at the past, look at what you've done wrong and right, look at what you know about the tools you're using. And then you take the leap. You know you will taken on prudent, inadvertent debt by doing so.

The best bosses and clients understand this. It's why we like working for them and why work hard to eliminate everything else and build the great products we're capable of building.

Featured

Mindfulness Biometrics Technology

Spire Stone - A Wearable Device with Instant Feedback on Stress and Breathing

Posted on .

In my continued quest for biometric insights and stress management, I recently picked up a Spire Stone. It monitors respiration and it can give you real-time feedback on your breathing patterns. Very handy for identifying and managing stressful moments throughout the day.

Breathe less than 14 times in a minute? You are calm. Your breath is full and consistent. Feels pretty good, doesn't it?

Breathe more than 22 times in a minute? You are stressed. Your breathing has become quick and shallow.

If this happens, the Spire device gives you a small nudge in the form of vibration to let you know.

The great news? You can do something about it. Take deeper, more normal breaths and help your body relax and feel less stressed-out.

I like it because, like FitBit, it gives me a way to impact my health that I can make conscious choices about. Breathing? There's always time for that. And improved awareness leads to small changes that can have a big impact.

With the HRV, brain wave, and sleep devices I've tried, you just don't control those things as directly as breathing or steps.

Spire gives you control over your stress level. Changing your breathing helps you feel less anxious and it can help you BE less anxious by sending a calming signal to all the other systems in the body.

It is a really good device. I've noticed that I don't always agree 100% with its breath count. During meditation I think it over counts, slightly, depending on the position of the device.

I also have had a few false positives on the 'stress vibration'. But not more than 1 a day.

These are very minor flaws in my opinion, and the value it provides more than outweigh these (small) negatives.

The additional awareness it provides to your current breathing pattern is very helpful.

They also have an app with some nice features. They have helpful guided breathing exercises and stats on how much time you were calm, anxious, active, and focused.

Spire has a new product coming out called the Health Tag which is designed to be attached to clothes, more or less permanently (it can be washed). In addition to respiration it also monitors HRV.

Featured

Technology Education Kids

How Much Do You Teach Your Child About the Technology of Today?

Posted on .

I'm asking this question because I realize that if I teach my child about the technology of today - how it works, how to use it, how to build stuff with it - that a great deal of that information will be out of date when my child enters the workforce in 12 - 15 years.

This is going to happen for a bunch of reasons:

  1. I certainly hope that writing basic, redundant code will be done automatically. This might happen because tooling improves dramatically or because the languages that are used improve dramatically and remove the need for this kind of stuff.
  2. AI is going to replace a lot of jobs, even in technology.
  3. The jobs that will exist in the future don't exist and (mostly) haven't been dreamt up yet.

In such an environment, who can teach technology skills that matter? Not me certainly.

So, if we know that technology will continue to be important (it will) and we know that the details of that will change constantly and dramatically such that what you will need to do detail-wise at a job 15 years from now is hard to know, where do you go from there?

There are still skills that matter, you just have to emphasize them, even if you also do some detail-y technical work. Here's what I choose to emphasize:

  1. Think creatively.
  2. Do things with your creative thoughts - make stuff.
  3. Use technology and don't be afraid to get your hands dirty.

In the world of software, this last point is largely figurative. Your hands don't literally get dirty unless you've spilled a lot of coffee or toast crumbs into your keyboard over the years.

So, you have to teach them stuff. Teach them the big with the small.

The small stuff (details, technology) will expire. It always does. Sometimes faster, sometimes slower.

But while you're doing that you can learn to learn and not be afraid of it.

What 'it' will be in 15 years is anyone's guess.

Cover photo by @clever_visuals on Unsplash.

Featured

Leadership Technology

Does this Technology Require Discretionary Effort to Get Anything Useful Done?

Posted on .

Discretionary effort is critical to business success. You need enthusiasm, time, and energy from dedicated employees to make your team or your product a winner.

Knowing how your team spends discretionary effort is important. For this reason, you should ask the question in the title of this post. Ask it before the outset of any significant effort or the adoption of new tech.

There are a lot of reasons why people choose technologies. Carefully guiding selection is an important part of the technology leader's job description. Managing and directing discretionary effort should be part of that calculation.

So, why do people choose different technologies?

This technology is a good fit and here's why ....

Sounds lovely doesn't it? Technology is chosen to meet the needs of the project. Nothing more, nothing less.

Our team already knows this technology.

This can be an excellent reason. Efficient, lots of knowns, starting with some pre-baked design work - very good.

We already know this other technology that looks a lot like the one we're choosing.

This can also be a perfectly acceptable reason to choose technology.

We like where this technology is headed and we believe it will help us meet our future needs.

A little bit riskier - when will the future arrive?

This technology is neat.

Neat is fine. As long as it is also good fit and we can get things done.

This technology is new.

See also, Neat. Beware of the following Trojan horse: everyone will be doing it in 5 years, so if we want to be able to hire people we better choose it.

Here's the trouble with new and neat technologies. You don't know them and you have to learn them.

Will this require discretionary effort on this project? Who is paying for it?

As I said above, discretionary effort is important. Nothing of significant value gets done without it. There are late nights for someone somewhere if this (or any) project is going to be successful.

The trouble with new and neat is that they can use up all the discretionary effort that people have to give.

When this happens, it's bad.

Especially if the value of a product doesn't reside in the new and neat technology that was chosen. If the value is in the logic or time-to-market or ease of use or anything else, then spending discretionary effort learning a new technology is ...

You decide.

I wouldn't necessarily call it wasted effort as it probably benefits those learning it.

But it isn't high business value in the short-to-medium term. It's a long term investment. It may be that the investment is in people or infrastructure that benefit the product or project or business you are building.

Should you make that investment?

Post photo by unsplash-logoTim Gouw from Unsplash.

Featured

Mindfulness Technology

Making a Simple 'I Love You' Button with the Amazon IoT Button

Posted on .

The article below is specifically about using the AWS (Amazon Web Services) IoT button to create a simple 'I Love You' button that my kids could use to send a text to their mother while they were staying with me.

While that was a specific idea, the concept could easily be extended for children to send a message to a grandparent, a friend who has moved away, or a cousin who lives in another city. It's not strictly limited to the situation I describe.


As a divorced parent, you often find yourself trying to make the divorce have as limited an impact on your child or children as possible.

One thing they teach you as you are going through that process is that your child ultimately views each parent as key to understanding themselves, and any time you do anything to tear down your ex you're really only hurting your child.

So, last summer, shortly after my divorce was finalized I happened to come upon the AWS IoT button, which is basically an unbranded programmable Dash button. I've written about using it at work here.

As I was working on the pitch for that project, it occurred to me that the button could be used to solve another problem. My children are too young to have phones (my opinion), but it would be nice if they had a way, when they were staying with me, to send their mother a text to say 'Hi Mommy! I love you!' or something similar.

This is easy with the IoT button. Here are the steps involved.

Step 1 - Order Button from Amazon All you have to do is order them from Amazon here.

Step 2 - Use the mobile app to configure the button to communicate Download the setup app for Android or iOS. Next, use the setup app to put your button on your wifi and configure a basic function.

Step 3 - Change the message to your custom message The last step is a little trickier. You need to edit the Lambda function created by the setup app. I won't go in to the details, but it is possible for a person with limited technical expertise to pull off. Certainly, anyone with a technical friend or relative could do it with help.

Essentially you change this:

PhoneNumber: PHONE_NUMBER,
Message: 'Hello from your IoT Button ${event.serialNumber}. Here is the full event: ${payload}.',

To make it look like this:

PhoneNumber: PHONE_NUMBER,
Message: 'Hi Mommy, I love you.',

The change itself is as simple as what I outlined above. It's just getting to the right place that takes a little Googling/spelunking if you haven't done it before.

For kids, this is also a nice, simple introduction to coding where a simple change can be made simply, and without needing tons of additional explanation, deployment, or other fanfare. Just make a change and hit the 'Save' button.

Once done, my boys were able to send their mom a short message and have her know that they were thinking about her. In return, I knew I was helping them build connections and self-esteem and not tearing that down. Here is our completed button, plus decorations:

-iot_button_custom

This is extendable to other situations - absent friends, geographically distant loved ones, parents who might be travelling. Even adults could benefit from having a dedicated 'I love you' or 'I think you're great' button to press from time to time.

Who doesn't need the occasional reminder/short cut to tell our friends and family that we think they're great?

Featured

Technology

Carbon Dating a Web Page

Posted on .

As a side note to this post, I wanted to link to the first person to post such an article. If you search for '3 Types of Fun' on Google you get quite a few different search results back and no one gives anyone else credit (annoying) and none of the top hits had a date-time stamp I could find.

So, I found this article, which was very helpful:

https://www.technologyreview.com/s/513996/how-to-carbon-date-a-web-page/

Which linked to this thing:

http://cd.cs.odu.edu/cd/<YOUR_URL_HERE>

And yes, you really do paste your whole URL there, without the pointy-brackets. Here was one the queries that I ran:

http://cd.cs.odu.edu/cd/https://www.rei.com/blog/climb/fun-scale