Monday, May 23, 2016

My team and I have been working on an important strategic project in our company. We are trying to improve our agility and in the process of doing that, it is important that our product team gets to see their own product in action before we end up spending multiple iterations developing it.

Sometimes you find yourself developing a microservice that is used in the overall design and then you realize that you really need to meet with the teammates who are going to consume your microservices. You need to agree on the APIs (request / response). Agreeing on these APIs is valuable to our UI developers and possibly developers of other microservices that may consume my microservice, but it does not really give a good live representation of the overall product to product management teammates after 1st or 2nd sprint. My goal was to have a journey working from A to Z in the first sprint.

What I decided to do is the following:

(1) Picked the most important customer journey.

(2) Created a diagram of this customer journey and annotated the diagram explaining what microservices would be called at what point in the journey. Keep in mind that this is all based on my initial thinking. I know that the design was not perfect. However, no project was successfully delivered without the original design and no project was delivered by the original design. Having that initial design is very important for having more productive conversations when you walk into a room with a lot of smart developers.

(3) Coded three core microservices to be functional without hard-coding and with the actual database backend. I also put together a stubbed version of some peripheral microservices.

(4) Dashboard/Programmer’s Page: I coded a simple HTML page (hosted by NodeJS) that uses Javascript to make AJAX calls to all microservices to fetch the data from all the tables and to display in somewhat presentable fashion. It is a more presentable version of your data than directly accessing the database in your demo.

(5) POC Website to represent a customer journey: This is a list of HTML pages hosted by NodeJS. These HTML pages are very simple pages but very functional as per the mockups provided. These pages are functional to the degree that they do call the POC versions of microservices and make the journey very interactive without using any hard-coded information.

The goal was to have this overall POC be used by product owners so they can provide good feedback and that feedback can be added to subsequent sprints. By building this POC, we already achieved one goal and that is our initial design which will evolve in future sprints. In the process of developing this overall POC, I learned so much about what I want in these microservices and it helped me define the initial version of the data structure for each microservice and the initial version of the business logic needed to support the customer journey that I picked. Yes, this design will need to evolve and improve.

I kind of coded most of this in my personal time during the first sprint because I thought it would help out the team a lot. What I would like to see in future projects is that this approach becomes the definition/standard/guideline for every sprint #1.

Saturday, May 21, 2016

I currently drive a 2008 Honda Fit (aka GD3 chassis). It has a 5-speed manual transmission and a 1.5L engine that can be very lively when pushed. Over the years, I worked out a typical formula that I like to apply as soon as I buy a car.

That formula consists of:

* suspensions modifications to make the handling fun

* cat-back exhaust modification

* lightweight wheels

* summer performance tires

* possibly an air intake system depending on what car I get

In a nutshell, they are all very functional changes. These type of changes turn an economical car into a fun car that puts a smile on my face every time I drive it. I spend on average 1h 30min every day in my car so I choose to make it fun for me. Everybody is different and everybody defines “fun” for their cars differently. You may be into horsepower and I totally respect that; you may be into stance look and I also respect that.

I am slowly getting to my point. The changes above are what I consider standard modifications that absolutely change and the character of your car and that’s what we expect.

However, there are changes that I would never consider as character-changing modifications and yet they are. I am talking about very simple and cheap changes. No, it is not that “10+ HP” sticker even though that’s sometimes fun to do because my low-power Fit needs it :)

I am specifically talking about a shift knob change and a shift lever extension modification. I started with an aftermarket Karcepts shift knob that made the gear shifting a pleasure because of the added weight in this shift knob. The weight of the shift knob just makes the lever fall into the right gear with more confidence. The second type of character-changing modification is the shift lever extension. I recently purchased a 3" shift lever extension for my Honda Fit. After a quick installation I could not believe how much it changed the character of my car. This meant that the shift knob is closer to my steering wheel and when doing canyon drives, it means that I could use both hands on the steering wheel and have the shift knob in close distance for more confident gear changes. So this modification gave me that “rally racing” feel. To some degree, having this taller shift lever gave me a feel as if I am driving some old school Porsche and I am a big fan of 1960s, 1970s and 1980s Porsches.

So what I ended up doing is alternating between the short shifter and the shifter with this extension and it totally changes the character of my car with a 2-minute swap. That’s the advantage of having a manual transmission.

These are the small things that keep me happy. What is the simple modification on your car that puts a smile on your face every time you drive your car?

Disclaimer:

This is a personal blog. The opinions expressed here represent my own and not those of people, institutions or organizations that the owner may or may not be associated with in professional or personal capacity, unless explicitly stated. In addition, my thoughts and opinions change from time to time I consider this a necessary consequence of having an open mind. This blog disclaimer is subject to change at anytime without notifications.

Disclaimer: This is a personal blog. The opinions expressed here represent my own and not those of people, institutions or organizations that the owner may or may not be associated with in professional or personal capacity, unless explicitly stated. In addition, my thoughts and opinions change from time to time I consider this a necessary consequence of having an open mind. This blog disclaimer is subject to change at anytime without notifications.