Using Kaizen to Improve as a Developer

In July of 2016, I was contacted by Packt Publishing in regards to writing a book for beginners called iOS 10 Programming for Beginners. I never thought it would be something I would ever do since I’ve never blogged or written anything. After some persuasion from some friends, I accepted the challenge and began writing.

I have read horror stories from how horrible writing a book can be to how bad it is to work with Packt Publishing. Neither of these things can be farther from the truth. Yes it was very tough, and the timeline was super aggressive, but I knew this was going in. I woke up many mornings at 5:30–6:00am to write for 3 hours. Then I would work (which I work remotely) until 4:30–5:00pm take a break for an hour and work another couple hours on the book. The timeline was brutal especially since I am not a morning person.

As far as working with Packt Publishing, that part was really nice. They were completely understanding and would accommodate me as much as they could. They didn’t harp on page count and understood it was my first time. They knew my timeline to write a chapter was based on the time I had and not really how long it would take me actually to write the chapter.

I decided to have a friend edit my text before I sent it to Packt as well as, follow along in the book building the app. Having her as my editor was a blessing in disguise because she had never programmed before and she helped me see things I did not explain fully. She also found code snippets that were missing or not correct that the publisher would not have found. The publisher only read the book for grammatical errors or technical errors in my explanations.

As I was writing the book, I took notes using the iPad and Apple Pencil for the Swift section in my book. Swift 3 had only been out a month and I just really got to mess with it at WWDC 16. A lot of things had changed from Swift 2 to Swift 3. Notes were the easiest way to get everything down and then figure out exactly what I wanted to put in the book. I have over the years evolved my notes, but I feel that my current note-taking style was best for me. I used the Cornell style of note taking (which for some reason I will call it Stanford note taking).

These are notes that I took for my book.

More notes that I took for my book.

While I was writing the book I told myself at the beginning of the year, I would try to integrate note taking on a regular basis. There is so much to learn with Swift, and it is hard to know where to start.

I made it through the process and finished the book around Thanksgiving. I felt amazed that I wrote a book of that size in only a few months (July 21 — Nov 25). Now that the book is complete I can say that other than the timeline I enjoyed writing iOS 10 Programming for Beginners. It was an experience I will never forget, and I am grateful that my friends talked me into writing the book.

As I had promised myself to do while writing the book I started to try and come up with some plan for improving myself as a developer at the start of the New Year. Right before the New Year, I was scrolling my Twitter timeline when I saw this tweet from Azamsharp:

I am still not sure what made me click on the link, but I did. In this article, it talks about how top business leaders such as Bill Gates, Mark Cuban and Oprah Winfrey incorporate some learning at least 5 hours a week. I figured this was a great way to get learning in on a weekly basis. I decided that this would be my New Years resolution for 2017 and so I began.

My first week, I decided that I would read Pragmatic Programmers. I bought it a while ago but never really got to read it. As I was reading, I saw the following:

“Management consultants like to drop the word kaizen in conversations. ”Kaizen” is a Japanese term that captures the concept of continuously making many small improvements. It was considered to be one of the main reasons for the dramatic gains in productivity and quality in Japanese manufacturing and was widely copied throughout the world. Kaizen applies to individuals, too. Every day, work to refine the skills you have and to add new tools to your repertoire. Unlike the Eton lawns, you’ll start seeing results in a matter of days. Over the years, you’ll be amazed at how your experience has blossomed, and your skills have grown.”

The Pragmatic Programmers: From Journeyman to Master

For some reason, Kaizen caught my attention, and I decided to Google it a bit more (yes I got sidetracked in my reading). I thought it was a fascinating topic and I decided to try and find a book on Amazon. I found a book named One Small Step Can Change Your Life and it seemed interesting, so I ordered it. The next couple weeks, I kept trying to stick to my 5 hours a week challenge, but I felt myself slipping. I felt like I needed some inspiration and decided to read the Kaizen book that I ordered a couple of weeks before. I decided to use the Kaizen technique for reading the book by reading for 5 minutes and then do something else. By the end of the day, I had finished reading the book. The book was short, but I got into it and read a chapter instead of 5-minute spurts.

Every since I started reading the book, I started to think about small changes that I could make. The first one I came up with was to simply use the Mark comment. I decided to create a Markdown file for just a few basic things I would use anytime I wrote code. Here is what that file looks like:

Starting with the Mark comment allows me to start with something simple. I knew I would want to do more, but I want to make the Mark comment a habit. Currently, I have not added any more to my work-related code as I am still getting used to doing it, but I didn’t stop here. I have always wanted to learn all of the design patterns. I either get through a few and stop or only look at the one I need or think I need. In Kaizen, the goal is to bypass fear and to make the steps so small that you can barely notice an effort. These small steps will disarm the brain’s fear response, stimulating rational thought and creative play.

I decided to come up with a simple Kaizen plan to learn Design Patterns using Swift. Hopefully, this will help you get a better idea of how to break your Kaizen into small steps.

Learning Design Patterns: The Kaizen Way

Every time I want to get into Design Patterns I never really know where to start. I figured that I should first learn how many different design patterns I could find.

Creational (5)
Behavioral (11)
Structural (7)

I found a total of 22 patterns which I am sure there are more, but I will start from here. For the next few days, I will ask myself how many design patterns are there and name the three types. After those three days, I would add the next phase of my Kaizen plan. Next, I will learn the definition of each pattern type:

Creational: makes it easier to create objects in a way that suits the situation
Behavioral: make it easier and more flexible for entities to communicate
Structural: simple way to deal with relationships between entities

If after those few days I am struggling to remember then I will keep adding more days until I am entirely comfortable. You might be asking me how do you remember to test this three times a day (9:00 am, 2:00 pm and 7:00 pm). Well, I installed an app called Today. This app allows you to set up notifications. Here is an example of a notification I created:

With these notifications, I will spend 5 minutes for the entire day answering these questions. My next Kaizen step in the process will be to learn all of the Creational Design patterns:

  1. Abstract Factory
  2. Builder
  3. Factory Method
  4. Prototype
  5. Singleton

Once I know each one then I will proceed learning the Behavioral Design patterns:

  1. Chain of Responsibility
  2. Command
  3. Interpreter
  4. Iterator
  5. Mediator
  6. Memento
  7. Observer
  8. State
  9. Strategy
  10. Template Method
  11. Visitor

Finally, I can move on to the Structural Design patterns:

  1. Adapter
  2. Bridge
  3. Composite
  4. Decorator
  5. Facade
  6. Flyweight
  7. Proxy

As you can see, I am taking the process slowly. I am making sure that I do the least amount that I can, making sure that I bypass the brain fear. This process will keep going until I get to the point where I can write and know each design pattern. This plan is for me but can be used for anyone who wishes. You might need to revise the plan to fit your specific needs, but this should be a good enough idea to get you started. When the steps are easy enough, the mind will usually take over and leapfrog over obstacles to achieve your goal. You will hit a wall of resistance but do not give up. Instead, try scaling back the size of your steps until you are comfortable again.

Please share with me your Kaizen development plan as I would love to get some ideas for other things to learn and grow. I gave this talk at Forwarding Swift 2017 in San Francisco. I hope to update and share with you my presentation and inspire others to use Kaizen.