My half-complete migration to BootStrap 4 Beta

I recently proposed to my team that we upgrade our bootstrap version to the latest. Originally, I was going to create a separate file and download it in place of the current version on certain pages. Well… We decided to just jump right in. I am going to focus this post on the card and little why it was a minor hell for me. Here was my experience.

Side Note: Bootstrap 4 is explicit in their commitment to responsive and mobile first. They have remove all elements that are non-responsive (sort of).

Goodbye wells, panels and thumbnail
One of the biggest things to create an issue was the removal of the well, panel and thumbnail. I am pretty big user of the well, it creates a nice highlight for important things to me. Taking this away from an app that had it littered about is a bummer.

They introduced a new element, the card. While this may be a simple replacement of the Panel, but I am struggling with it to replace my wells. Anyway, the card is a nice component because there are couple of layouts that you can create.

Group Layout
If you need the cards to lay next to each other without any spacing between them, then group is your man. Since the cards will be equal in width and height, these cards will fill the space equally. Unfortunately this doesn’t meet my needs, so I move on.

Deck Layout
The deck layout is very similar to the group layout except in one way. There is spacing between the individual cards. They both share the behavior when you add too many cards to the group or deck, they shrink to fit container. You end up with cards so small that you can’t use.

Use Cases
I can see some use cases for both layouts. In a carousel, you have a set of panels that you want the user to shuffle through. This give you the tools so that each card that is presented is guaranteed to be equal in height and width to its partner on the left and the right.

Disclaimer
: They do have a clause on the card layout that gets them out of trouble:
For the time being, these layout options are not yet responsive.

I took a look again to see was the well really the right component to use for my UI, and out of laziness , I said no. I refactored those screens to highlight the important data in a different manner. It will work good enough for now.

Dev Complete✔
Code Review Complete✔
Release Complete✔

ReactJs and my thoughts

One of the aspects of Angular that I liked most was the two-way binding.  It just makes sense to me when working with the MVVM.  I like the convenience knowing that someone else is observing the changes for me.  Well, that is no longer an option for me since we moved to ReactJs.

At first I was a skeptic since you needed to drag along the simplest of tooling like jQuery for ajax calls.  Even though I went kicking and screaming, I kind of like it now.  I like the control structure and the reuse patterns (even though we don’t reuse them 🙂 ).  It is not without its oddities, but I have yet to find a work around.

One of the most notable irritations is the timing of the actual state persistence. For example:

this.setState({myValue : SomeValue});

Even though you would think that this happens synchronously, it does not.  At some non-deterministic point later the new value is persisted and available through the state accessor.  This got me a bunch of times, and I had cobbled some garbage code to get around this until I read the docs more closely (not a surprise).

There is a callback that is available and runs when the state is truly persisted.

this.setState({myValue : SomeValue}, function(){

console.log('Hurray, my value is persisted');

});

This comes in handy when the data is passed between controls.  Today I needed to signal to a parent from a child that data has changed.  Once that notification was propagated, the parent needed to call into the child to get the current value, in my case this was from a textbox control.  The solution was the same as above.

Child

this.setState({value:$('#myTextbox').val()});

this.signalToParentThatDataHasChanged();

Parent

onDataChangedCallback(){

var childValue = this.childReference.getValue();

}

This seems on the surface like it would be fine and in other frameworks this is intuitively true.  React is another story.  Like I mentioned above, setting the state variables do not happen synchronously in the sense that once you call setState it it is available everywhere.  This is a bummer, but easily remedied using the setState callback above.

All in all I am learning to love ReactJs.  I guess there are two lessons here: read the docs carefully and that setState is not synchronous.  The first lesson has always been elusive for me.

Cheers

Well Oiled Machine

As a leader, I am always looking at situations to find the lessons that are hiding.  The other day I watched a team of engineers working together and it was inspiring.  Here are some of my observations and commentary.

Over the last several weeks, the team has been working on refactoring some of the code that is deep within the bowels of our infrastructure. There has been no shortage of challenges in making these changes.

The code was refactored with backwards compatibility in mind, but that doesn’t always work out so nicely.  It was decided to only retrofit the systems that were in their domain since they are closer and have more intimate knowledge.  They started out strong, but the challenges started to pile up.

There were issues with namespaces, assembly references and code that was removed that needed to be swapped out.  Once the new assemblies were referenced the scope of the issues started to be clear.  One interesting issue that cropped up was a ghost assembly that was somehow being inserted back into the project.  The problem is that was the one library that is getting ripped out.  I blame NuGet (easy target).

We are big fans of swarming our work, but work like this refactoring didn’t seem to lend it self to a swarm.  For those of you who are not familiar with swarming, it is where the entire team works together on a single work item until it is complete.  We have found that in many situations this works well, but that is a topic for another day.

Back to the inspiration.

I walked out of my office and I notice a huddle around one of the engineers cube.  I was curious so I hung out listening and watching, and I was very impressed.  This team was swarming together to help one of the engineers with their refactoring task.

What I saw was an even playing field.  There were no pretenses of superiority and no egos.  Just four engineers working together to solve a problem.  It was a beautiful thing to see!

All to often I see the game of “it was his code” or “that is her PBI”.  That doesn’t sound very teamish (feel free to use that word) to me.  You maybe thinking that all engineers should work together to deliver business value, right?  Unfortunately that is the exception and not the rule in my experience.

It is not often that I get to see that level of team work within a team.  These engineers are some of the most professional teammates that I have had the pleasure to work with.  The interesting piece is that half of the team members are junior, but they operate as a well oiled machine.  I was inspired by their cohesion around the problem, it was awesome!  I was so inspired, I took a photo (pixelated for security 🙂 ).

IMG_3524

Cheers

 

Hero Complex

I want to spend a minute expounding on a previous post where I talked about having (past tense) a hero complex.  I guess the logical place to start is with a definition (albeit, mine) of hero complex.

It is similar in context to the arsonist firefighter lighting fires and then serving as a first responder.  Now to be fair, the arsonist firefighter has a much more negative connotation.  The hero complex is where you need to be the one who solves the hard problems and saves the day.  There are a few problems with this.

At face value, the hero is the one that everyone can depend on to solve the problems and put out fires.  This sounds like a great thing to have someone so dependable, but…  The team dynamic, when there is a hero, can turn ugly.

If there is always someone there to do for you what you can do yourself, you are then robbed of the ability to be accountable.  It also robs you of the glory of saving the day on your own.

I previously held the opinion that this is what a servant leader is.  Shielding the team from the stuff that was less fun aka site down.  That was something that I thought made a good leader.

In the Marine Corps, we were taught that you shouldn’t ask someone to do something that you were unwilling to do yourself.  I think that is a good starting point, but it will not win the race on its own.

When I reflect on those days, I realize that I had an issue because the people were not meeting my expectation.  This was not because they weren’t capable, but rather because I expected that they would be me.  Do things the way I would do it.  Looking back, I can say that this was pretty dumb.

The fact is they were all very talented engineers who could have solved any one of the many problems in an equal number of ways, and maybe one of them was my way.  The important piece is that they solved the problem and not how it was solved.

Now I can take another look at the servant leader and it’s role.  How can a leader best serve the team that he is responsible for?  That begs another question to be asked.  What is the team responsible for?  Your job as a leader is to make sure that they can do their job!  Get them the tools, training, extra help, etc. that is needed to get the job done.

It is a wise leader who can spot and draw out what the team needs to help them achieve their goals.  It is a wise leader who can inspire the team to improve and solve impossible problems.  Sorry, but it is time for a Simon Sinek quote.

It is the leader who should help the team develop why they do what they do instead of what they do.  It is the why they do what they do that will inspire them to come to work, login and do great things.

I started this post talking about the hero complex and how I was once afflicted with that disease.  I can say that I am hero free.  My focus now is to help my team develop our “Why” so that we can inspire each other.  Cheers…

Out Of Touch – Just Rambling

How often do you call your friends or family?  What do you talk about?  I don’t  call my friends very frequently, which I think makes me a bad friend or at least my wife thinks so.

She constantly tells me that I need to call so and so, but do I have to?  I know that the answer is yes, but why don’t I?

I suffer from significant anxiety and talking on the phone is difficult. and the moments that leads up to the call spirals out of control for me.  I know that once we get talking everything will be fine, but it is that moment just before I pick up the phone and dial that creates the internal pressure.

I get the same way when people call me.  I don’t like the awkward pauses or how to end the call.  During the call my brain  tells me that I need to think about the next thing to talk about, or am I talking to much about me.What do I do to break the uncomfortable silence we run out of things to chat about.

I think that this is why I am OK to recede into the dark corners of text messaging.  There are no repetitious sequences of “OK Bye”, “OK Bye, Talk to you Later”, “OK Later” that must be stopped by one of the parties.

One of the things I think hurts me is that I compartmentalize the last time I spoke with a friend or family. I hold on to that memory and we stay connected in my mind.  When we finally connect, it is like I we had interacted more recently than they know.

I have two friends that are very dear to me, Chris and Sara.  I haven’t talked to Sara in probably five years, but for me it was just yesterday that we were on the phone talking about my wife being pregnant with my son.  Chris on the other hand calls me about once a year and I think we are OK with it.

I regret that I don’t keep in touch the way I think a normal person would, but it is not that simple for me.  I am the same way with my brother and sister, which is sad!  The only person that I talk to on a semi-frequent basis is my dad.  I think it is easy to talk to him because he loves me the way that I am (hope so, he has been there for 38 years :)).

I do think that I am not the best friend or brother that I can be, but it is time that I suck it up and get over it.  I will make some much overdue phone calls this week!  I hope that you do not take contact with the important people in your lives for granted.  They don’t live in your head.  Living in the memories is not healthy.  Human contact is needed.  Cheers…

 

A Thousand Words & Lessons Learned

I have read articles that have stated that to become a better writer – you need to write.  Its not just the act of writing, there are expectations to achieve the benefit.  A thousand words a day, every day is purported to make you a better writer.

I think that it is very possible that writing a thousand words a day will work, but as an average person (aka not a Kardashian) I run out of words pretty quick. I want for this blog to be a platform to share my knowledge as well as a medium to practice writing.

~Excuses~

I have spent so much time reading personal development and communication to try to improve other rough edges that I have little time left to practice.  That is just an excuse.

I feel disappointed that there are days when I feel like I have done little more than prepare my next set of excuses.  I guess that is part of the ebb and flow of life.

I have been through trials and tribulations in the past, and each time I have come out better for it.  I am in a similar state lately, so I am working on ME to get ready for my next set of challenges.  I am fortunate to have been given the rope to fail (too heavy a word for the situation) which had the unexpected side affect of giving me a front row view to a valuable lesson.

I have created several opportunities in the last 24 months for myself to reflect and grow.

~Lessons Learned~

Let’s start with Focus.  I know that management is where I am most happy, but I made some mistakes when I had a team of ten.  I used my autonomy (not really, but hang on) to work on personal projects.  That sounds really unethical, but I mean projects that I wanted to work on that would ultimately serve the team.

At the time, I rationalized in many of ways that I was doing what was needed and I was serving the team but that wasn’t true.  I was taking something very important from the team, accountability.  It wasn’t until recently that this lesson became visible.  I was listening to the book “Notes To A Software Team Leader” by Roy Osherove that I saw that I had taken from the team that which I needed from them the most.

I used to feel proud of myself because of the value I created, since I often needed to step in and help with the firefight.  At the same time, I was thinking that they should be able to solve these issues on their own so why can’t they.  I realize now that I was the reason that they could not fix it.

They didn’t need to because “Heath would always be there to fix it”.  What a mistake that was!  I work with an amazing team of engineers and the fact is that they are the best ones positioned to solve these problem.  I wasn’t the one that was writing the code, so why did I think I was the best one to fix it?

That was a major aha moment for me. When I read that passage in the book it gave me a substantial pause of reflection.  I was very disappointed knowing that I took that away from them.

That was a very big one for me, but there is another that I think was the most disappointing.  I learned that mentorship will not come to you – you must actively seek it out.  That is something that I expected to take place.  Someone to help guide me in directions that I would not have otherwise seen and provide affirmation in the ones that I did.

I saw a youtube from John Somnez where someone had asked about how to find a mentor and that is where the lightening bulb moment happened.  Mentors are not always seeking apprentices.  Another thing that I came to realize is that you may not realize that you are being mentored.

I learn something everyday from at least one team member everyday.  I consider this to be a form of mentoring by committee.  I have also received personal mentoring from people that have reported to me.

What I am eluding to is that I no longer believe that mentoring happens in our field like a journeyman or apprentice.  You need to take the lessons as they come and try to learn from them.  You have to ask for clarity when things are unclear or get counseled when you need guidance.

At the start of this post I mentioned how you need to write a thousand words every day in order to improve your writing skills, but at this point I only have 796…

Personal Brand

How do you market yourself?  What are the characteristics that you will promote to compel someone to take a chance on you?  These are questions that I have been asking myself lately.  The one thing that I have not done well is frame the answers relative to what I want to achieve.

What do I want?

This is a question that I have been asked quite a few times lately.  My vision is to be in a position to help guide an organization to deliver the highest value possible.  I want to be able to share visions of customer satisfaction delivered through technology.

Simon Sinek’s Ted talk “How Greater Leaders Inspire Action” is a video that I have watched several times.  He speaks of how the importance is greater in the Why you deliver awesome when compared to what that awesome is.

NOTE:  If you like his Ted talk, you will love his book!

In business, many companies have mission or vision statements that speak of building the best product or dominating a particular market but those are goals.  That doesn’t mention why you want to meet that goal.  Simon talks about common “why”s   such as “to make  money.”  He states that these are by products of doing business as usual.  The more interesting questions is why do you build that product or sell that product in the first place.

I am trying to apply that same rationale to my career.  Why do I want to be a leader of an organization?  I have questioned my leadership abilities lately and in reflection I realize that I was not focused on leading.  My focus was on other things, things that are more reminiscent of an individual contributor.  I can look in the rear view and see what mistakes I made and how I will correct them in the future.  But that still doesn’t help me answer the question!

I think the question that I am missing is what position will give me the ability to lead and guide a team.  Recently a distinction has been shown to me with the comparison to an Architect path and that of a Director/VP.  It was sold to me that the Director route is a tactical execution path, where the Architect is more strategic.  This has been debunked!

Even though that notion imploded, it did highlight exactly what it was that I was after.  I want to be a strategic leader focusing on how technology can best serve the business.  So now knowing what I want and why I want it, how can I market myself to achieve that goal?

This is a tricky question for a technical leadership position.  On the one hand, you need to show that you have the leadership traits and on the other hand you need to have the technical chops.  I have seen leaders come and go and the one killer that happened to all was the lack of technical respect from the team.  That is a hard sell, but a critical one.

So again, what would be the compelling traits to move up the ladder?  I don’t have an answer for this question.  I don’t know which ones are more important that the others.  Technical chops, emotional IQ, empathy, all these are important but does the order matter?  I have been doing a lot of reading (listening :)) lately to different respected leadership books and there are some common threads that I am noticing, so I hope the answer will come eventually.

For now, I am just plugging away.  Writing everyday to improve my written communication skills.  I am also spending more time on reading technical articles and other research to help hone my technical skills.  I WILL reach my goal, it is just a matter of when!

 

pic_goals