Jonathan's Blog
name

Jonathan's Blog

Mindful Leadership and Technology


TagSoftware Development
Featured

Leadership Software Development Work

Three Types of Fun, Applied to Work

Posted on .

This came up in a meeting I attended. I described something a development team was working on as fun, and I was informed that it (creating peer-to-peer connections between Android devices) was Type 2 Fun, at best.

https://www.rei.com/blog/climb/fun-scale

I had never seen this before.

A lot of our work (hopefully) falls squarely into the Type 2 Fun category. Not that fun at the time, but fun to remember later, usually because I learned a lot and became better because of the work.

This is worth aspiring for in a career. If you find yourself having a lot of Type 1 Fun (regular, fun-while-it-is-happening fun) you probably either work at a skating rink and really enjoy the YMCA, are a little delusional, or a very self-actualized person.

Should you have some Type 1 Fun on a regular basis? Yes, you should. Can some of it be at work? Absolutely.

But a better achievement for our society is if a lot of us can sit around and say, "You know I learned a lot from that and it helped me excel in my career." If we can say that a lot of the time about a lot of the work we did, we've come a long way from where we were even 100 years ago.

Type 1 Fun is helpful and helps make people more productive. Type 2 Fun is necessary for the success of our companies and careers. And I do mean necessary - things that are a slog (Type 3 Fun) are unsustainable, in the long run.

I've certainly come acrosss some Type 3 Fun, also called, "Let's never do that again." But then, they are still jobs, even when it is your career.

Here's a quick reference, updated for the workplace:

Type 1 Fun: Remember that project where you learned a lot, everything was on time and on budget, and no one got frustrated ever? Me either. Remember that time you won the Fantasy Football League or had a great time at the Christmas party? Type 1 Fun all the way, and work related.

Type 2 Fun: Remember the difficult project where you started behind the 8 ball, worked long hours, but pushed yourself and came out the other side with a ton of knowledge? And you shipped a great product? Remember that time when you got fired and worked hard in your time between jobs so that once you landed a new job you were a changed person with different goals and a new outlook on life? That's Type 2 Fun.

Type 3 Fun: Remember having to do arbitrary work that didn't matter because it fit into someone else's system? Remember the client who used personal attacks on people because they were very unprofessional? That's Type 3 Fun, and it isn't migrating to Type 2 any time soon.

Featured

Bots Conversational UI Software Development

Bots Rising Continued - Creating a Bot with Dialogflow for Google Assistant and Google Home

Posted on .

I wrote some blog posts way back in the good old days of 2016 about a bot we developed for an intenral work tool. It ran inside of Slack. When we did the development we were basically writing code to handle all the states of the conversation. It was clunky and had some real limitiations.

Fast forward to more recent times - we bought a Google Home at the end of last year. Because I usually want to make something and not just consume information, I started to play around with Google Assistant and how to create an Assistant App for Google Home with tools on Google Cloud.

So right away I found myself working in the Dialogflow ecosystem. This was a big improvement over how we built our Slackbot in 2016 where we were hand-coding our state and writing a million if/else statements to handle the user interaction.

The Dialogflow designer interface is intuitive for creating your conversation. My biggest sticking points were working through the integration between it (Dialogflow) and my existing webservices. The answers were there in the documentation but it took some time to work through my SSL issues (doesn't allow self-signed certificates) and formatting of request. This was a little frustrating at times, but nothing out of the ordinary for using a tool that you haven't worked with before.

I also came across Let's Encrypt for solving my SSL issues. Let's encrypt allows you to get a real-ish certificate for development and test purposes. It is fast and automates several parts of the SSL cert process I've never seen automated before - very handy!

My Google Assistant App is submitted now and waiting for approval. I believe I adhere to all their guidelines, so hopefully they will approve me! Fingers crossed!

Featured

Mindfulness Leadership Software Development

Journeys and Guides and Maps

Posted on .

It's hard to draw a map of a place if you've only ever been through it once, going in a straight line in a fast moving vehicle.

For a guide, you may want someone who can draw a map from memory. You may want someone who has been lost where you're going. You may want someone who has, at least, been there a lot of times, walking in more of a zig-zag pattern and seeing what's around.

OR you're accepting a guide who knows a little more than you but can't draw the map.

Both can work, but understand what you're getting and accept the advantages of the latter if you choose it. That is, you will be getting lost along the way, but you will also be a guide at the end of the journey.

Sometimes there is no map and never will be - for the country is forever new. In these cases we can only compare it to country we have been in before and offer help to one another.

Featured

Rebuild Application Rebuild Software Development

Code is Harder to Read than Write - Part 2 - More Reasons

Posted on .

Link to Part 1.

More reasons why code is harder to read than write:

  1. Code is meant to be executed by machines, not to be read by people. In other words, you, as a human, are not the intended audience. Everything about the program you're trying to read, including the intent of the language designers, was focused on machines and not on you.
  2. Developers don't get paid to write, they get paid to build.
  3. Developers prefer to build things over writing about it or adding comments to code.
  4. There is always a deadline. The deadline is never about writing comments or documentation.
Featured

Rebuild Application Rebuild Software Development Software

Code is Still Harder to Read than Write - Part 1

Posted on .

I've posted this article recently, but it got me thinking about why code is harder to read than to write. So, I will post it again, to make your life easier and explain why I think that code is still harder to read than write, even all these years later. Here's the article:

Things You Should Never Do, Part 1

The title of this post seems counter-intuitive because we think of reading and writing in relationship to human language, but programming languages are not like human language.

What are the important differences? Here is the main one:

Programming languages can't be read aloud.

So when we talk about 'reading code' we're using 'reading' in a purely metaphorical sense. When you 'read' code you don't actually read it - you're looking at it and trying to make sense of what it does.

This is nothing like reading a book, paragraph, or sentence written in human language.

When you review code you study, you re-read, you look things up. You jump around from file to file. You may consult web pages. Even in programming languages you are familiar with and with a business domain you know, these tasks can be time consuming.

You're trying to 'read' something that can't be read, across many files, and trying to ascertain the author's intent not just comprehend a sentence.

An equivalent would be trying to read in a language where you had to look up every third word, every time you read something because:

  1. Every author used the language in a novel way. AND
  2. Every page of a book was put in a different file and they were constantly referencing each other and not in order.

It would be hard. And it would not really be reading. That's what 'reading' code is.

Featured

Rebuild Application Rebuild Software Development Process

Application Rebuild Questionnaire

Posted on .

Here are some questions you should ask before starting a rewrite or rebuild of an existing software application.

This is a list to get you started. Once you have this information it is an important baseline for you to think about how to move forward on your rewrite/rebuild/re-engineering effort.

  1. What is the age of your application? (How long since the first line of code was written?)
    a. 0-5 years
    b. 6-10 years
    c. 11-15 years
    d. 16+ years

  2. How many integration points do you have with outside systems?
    a. 0 (lucky you!)
    b. 1-4
    c. 5-9
    d. 10+

  3. How many different types of people use the system?
    a. 1-4
    b. 5-9
    c. 10+

  4. Will you migrate data from the old system to the new?

  5. Roughly how many man-years have gone in to the development of the system?
    a. 0-10 years
    b. 11-20 years
    c. 20-40 years
    d. 40+ years

  6. What makes the current system great? What do your customers love? What differentiates you from your competitors?

  7. How much time needs to be spent recreating supplemental materials for a new system? Things that fall into this category - training programs, user manuals, help pages, websites, wikis.

  8. What are the business (not technical) drivers for recreating the system?

  9. What are the risks of recreating the system?