fbpx
Categories
habits stories Time management

Unblocking yourself

I am recovering from a couple of weeks of COVID madness and trying to get back into my habits, including writing.

To my surprise, I had no idea what to write about. I was effectively blocked.

Thinking about being blocked reminded me of being blocked at work and what I did to get moving.

In management, you are constantly bombarded with information streams that seem equally important.

To tackle the work, we resort to prioritization frameworks, to-do lists, four Ds (do, delete, delegate, delay), and other techniques that give us confidence that we’re working on precious work.

In my experience, prioritizing is where I tend to feel blocked, and the anxiety of not making progress kicks in.

This is where a quick mind hack kicks in to save the day. I add a to-do item called “prioritize work” and mark it as the most essential item on my list.

And just like that, I am now going through all the various items and applying prioritization techniques to ensure I use my time well.

The problem was not seeing the value of prioritizing.

I felt blocked just staring at the amount of work in front of me, and since I feel good about making progress constantly, I incorrectly assumed that prioritizing work wasn’t progress.

Unlock icons created by Smashicons – Flaticon

Categories
empathy management stories

Project empathy — day five – logic and the first test

Today felt productive, engaging, and like I finally made real progress.

Here is how the day went.

I created a new ProjectManager class to contain the logic for the project domain.

Since I am exposing the most straightforward functionality, I only added create and read methods, with creation only having a title as a required field.

Since I added new logic, I felt it pertinent to cover the logic under tests.

Luckily, the framework took care of a lot of the initialization items needed to test, such as 

  • In-memory DB
  • Seeding test data
  • Faking auths as various users
  • Dependency injection
  • Testing frameworks such as xunit and shouldly.
  • Sample tests to get you started

I can only imagine the amount of time it would have taken to set everything up to a point necessary to run a test.

With that note, I remember when I was getting started, I found the time required to set up tests quite challenging, especially when thinking about all the feature work I could be working on.

The learning here is that it isn’t enough to expect tests to be done. We need to dig deeper and embed within our teams the importance and value-added of having quality software.

Until next time.

Icons made by Freepik from www.flaticon.com

Categories
empathy management stories Uncategorized

Project empathy, day four — first new code

Day four was fun but short.

I began by setting my Pomodoro timer to 25 minutes to work on the first milestone, creating and viewing projects.

The project’s definition already has a lot of functionality, so I constrained the milestone only to include the title as part of the project.

The framework I am using https://aspnetboilerplate.com is highly opinionated, so I had to spend my first Pomodoro timer just browsing through the docs in order to get acquainted with it.

For my second Pomodoro, I wrote our first class, the project class. I added the database migrations and pushed them to the database.

I mentioned that the framework I am using is highly opinionated. It uses domain-driven design, so our class has no logic and can only be instantiated via a create method, ensuring that domain rules are applied consistently.

The logic will be added to another class they call “the manager” you can see more details on their design here.

So far, this little project has proven successful in building empathy. I had already forgotten that there is a significant amount of time devoted to research and learning for every line of code.

Categories
empathy management stories

Project empathy, day three — milestones

Day 3 took me towards project management; here is what happened.

I managed to get 30 minutes in before the end of my day, so I was determined to make the most out of them.

Recently, someone shared an article on project management and the importance of setting milestones rather than features.

Using the concept on our project means that I’ll work on delivering a subset of the functionality rather than a full feature.

So I created a milestone in GitHub and got started on it.

I spend most of the time thinking about what the milestone should contain and how to break up the work.

During the last two minutes of the Pomodoro timer, I created a branch in source control.

I am hopeful that next time I’ll be able to get started on actual code 👨‍💻

Categories
management stories Team building

Project empathy, day one

Today was my first-day writing code for what I call “the empathy project” to build empathy for what engineers go through.

Here is how my first day went.

I started with an existing template to give a good starting point. After following the instructions, I downloaded the template and ran into my first error.

Something about a secrets.json file not found. Why is this template looking for that file? No idea, so I go on google to find my answer.

After multiple articles, I found a stack overflow answer that looked promising.

I tried their solution and ended up getting through my first bump!

Since I changed the project, I figure I needed to add it to source control, you know, so I won’t lose all the hard work that cost me a ton of reading to get to the one-line change I made.

So I create a repository in GitHub and then attempt to upload my existing project to it.

The second issue of the day, I forgot my git commands 😭, so I got on Google again to refresh my mind.

I managed to upload to GitHub and create a new branch — success.

Ok, let’s try to build and rerun the project. Another error shows up. This time it is something related to the connection string to my database.

Wait, database? I didn’t set one up yet. So I get on google again to figure out what people like to use nowadays for starter projects.

The template I used uses entity framework, a Microsoft ORM, so I’ll need a relational database.

My search takes me to Heroku. Since they have a free tier for their Postgres DB, I create an account and copy the connection string.

This part I remember, add the connection string to the config file, and we’re good to go, right?

Not so fast. After adding the connection string, I type the run command and run into one more error 😨something about the connection not being secure.

This one took a lot of trial and error, google gave me the answer, but things didn’t seem to work.

The solution turned out to be the difference between typing “SSL Mode” vs. “sslmode.”

Ok, it looks like I can connect to now, I run the project once again, and this time the browser shows up for about one second… it just blinked in front of me, then disappeared with all my hopes.

This time, we appear to be missing our database tables.

I missed a step in the instructions and forgot about database migrations.

Ok, let’s run the existing migrations, and we’re good to go, or so I thought… I tried running the migrations, and more errors showed up.

More googling and lots of reading through the docs to uncover that the existing migrations were done for SQL Server and not compatible with Postgres.

I deleted the migrations, created new ones, and tried again. This time, the tables get made, and my hopes are back.

I type the run command again and cross my fingers, hoping that things will be ok this time.

Things are loading. My terminal is showing more messages than before. For a second, I can see into the matrix.

But then, big red messages pass by quickly, and everything stops again. I am deflated now. What else could it be?

The logs show a problem with an insert statement with a date-time field of type local, but the column only supports UTC.

At first, I start reading into the date-time type in Dotnet core, and sure enough, there is an attribute to set the type, but there is no default value, so my error isn’t making sense. Somewhere in the code, we’re setting date times to local.

After more searching, I found the code to insert data to the DB. It was passing clock.now. I looked into clock. I figured out it is part of the template and not the framework, so I quickly searched the documentation and changed the default type to UTC for clock.

Let’s try again! Things are running, and finally, the browser opens up to the login screen.

I was thrilled and tried to log in with the default credentials provided.

I got redirected to a JSON blob 😭.

I am about to cry now.

The logs are not showing anything meaningful this time, so I checked the network settings in the browser and saw a bunch of errors related to files not loading, yikes.

More reading and googling, this is getting old, anyway, I now have to build my front end by running another command.

This time, everything should work.

I run the run command, and everything seems to be working well for the first time.

The pages show up. I can log in and do quick updates.

I am now ready to commit and push to source control.

I am reviewing what I am sending, and oh the horror, config files with credentials to my DB!

This should be easy. I’ll have to move the connection string to the secrets.json file so that it is only available on my machine 😊

Well, that didn’t work. Moving the connection string caused me to lose connectivity to the DB.

I do more googling to figure out why I can’t read from the secrets file, but I am increasingly frustrated, so I decide to go with what is familiar to me, environment variables.

I set my connection string to an environment variable, updated the code to read from the environment variable instead of configuration files, and reran everything. Success! This time for real.

I feel good about pushing my code, I looked at the time, and it has been over five hours, to my surprise.

If the success criteria for the project is to build empathy for engineers, day one proved to be highly successful.

I’ll pick this up after the holidays, so stay tuned for day two.

Icons made by berkahicon from www.flaticon.com

Categories
Interviewing stories

Networking pays off

We’re currently hiring for a hard-to-fill position.

I reached out to a good friend to see if he was interested, and to my surprise, he said he was going to apply.

It was unlikely given he is currently employed, less than a year in at his current company, with decent compensation and a good work environment.

He applied to the position, and sadly, got a rejection letter almost immediately.

No explanation, no feedback, no courtesy initial phone screen, nothing.

This would be the end of the story in most situations, but he reached out to give me an update and told me about the rejection.

Here is where networking pays off.

I reached out directly to the recruiter and mentioned that for such a difficult spot to fill, In the current competitive market, getting my friend to apply was unexpected, and that it was surprising not to have him go through at least an initial phone screen.

The recruiter mentioned they would look into it and update me soon.

A couple of days passed, and I heard back from the recruiter.

They had made a mistake and had declined my friend’s application while going through candidates.

They offered to reach back out to schedule a screening call if I thought it was ideal…I said yes!

A few days have passed since, and today, I got an update from my friend.

He received an email from the recruiter apologizing for the mistake, and they held a screening call.

Later, the first interview with our VP of engineering happened, and he is now scheduled for follow-up discussions.

I am happy for my friend and excited that he is moving along in our hiring process, but this would not be the case if he did not know someone already working at the company.

Networking paid off! Reach out to your ex coworkers, keep in touch, and remember that sometimes a quick conversation can be a powerful tool.

Icons made by Freepik from www.flaticon.com

Categories
habits stories

Resiliency

As I dictated this from the community park, I got reminded of a book I read on stress management.

In this book, they talk about resiliency, and the author gives an example of their kid learning how to go up the stairs, and he describes the experience from his point of view as one of Joy.

When his small daughter runs into a challenge going up the stairs, she doesn’t give up. Instead, she smiles and continues attempting to go up the stairs, figuring out different ways of what was working and what wasn’t.

I am here at the park, and I’m looking at my kids going over the spinning monkey bars, and my daughter kept trying and trying, and then she finally made it over.

My son, the younger one, keeps looking at my daughter, and when he sees how she’s going about it, and then he tries to mimic her, but on the first switch over, he slows downs and doesn’t gain good enough momentum to make it all the way through.

He smiles, jumps down, gets up on the stairs, and tries again and the great thing about this is that not only is he being resilient, but he has an example to follow.

So how does all this relate to business?

I wrote about habits before, a.k.a. resiliency and repetition, but that’s not enough. It also helps to have an excellent person to follow — having a guide.

Someone who can show you the path is why mentoring becomes so important and having the resiliency to stick through it and learn and improve in whatever we’re doing in business.

In summary, create some good habits don’t give up. Continue attempting and trying different things. At some point, you’ll be successful.

Icons made by Freepik from www.flaticon.com

Categories
quality stories support

Customer service – learnings from airline experience

Today I had to deal with customer service for a major airline, and it was such a negative experience that I feel compelled to write about it.

If your product offers customer service, there are some suitable lessons here.

Training

Our problem was the interpretation of essential guidance by the CDC needed to travel into the USA. 

We had the latest guidance, but the airline operator didn’t, so we lost our flight.

  • Now think about software for a minute. If you are on a team that subscribes to continuous delivery, how is your support team made aware of new changes?
  • How often is the documentation that users and support rely on updated?
  • When you have conflicting information, do you train your support team to re-validate their assumptions?

In our case, the airline didn’t propagate regulation fast enough.

They didn’t train for edge cases and trained their staff to go with their assumptions rather than empowering them to verify the information.

The result was abismal customer experience and various unhappy flyers with lost flights complaining about an easily avoidable situation.

Automation

Our situation didn’t fit the usual support request that most users deal with, so we contacted the airline via phone to speak to a representative.

Here, we ran into an automated phone system that didn’t offer any of the options we were looking for, so we got routed to use WhatsApp.

Thinking I was going to chat with a representative, I got on WhatsApp, and to my surprise, I got another bot 🤖.

This bot didn’t provide an option to reach a representative.

I went on social media, and they routed me to a form, and guess where the form sent me? Another automation.

Automation in customer service is excellent for well-defined problems, but human interaction is required for edge cases.

  • When automating customer service, do you offer the option to speak to a human?

In our case, the automation didn’t help. 

The routing from one automated system to another made the experience worst.

In the end, the support experience just added to our grievances and set a bad reputation for the airline.

Thinking back to how this relates to software and the lesson is clear, Don’t let your support process mess up your reputation instead of helping it.

Icons made by Freepik from www.flaticon.com

Categories
management stories

Stress and pain at work

I had a car accident a few years ago.

I was in New Jersey, and I went to get tomato soup and a grilled cheese sandwich at my favorite Italian restaurant.

After enjoying my meal, I got into my rental vehicle and drove towards McGuire Air Force Base.

On my way there, I was driving around 60 miles an hour when a vehicle decided to cross over the intersection, and they stopped right in the middle before getting to the following line, so I slammed on the brakes turn the steering wheel as far as I could and crash into the back of the vehicle.

I swerved all the way outside into the grass and saw how the other vehicle spun out of control and ended up on the other side of the road.

Luckily, I had no broken bones, but I have been having on and off back pain since then.

This should be ok for the most part, but I tend to have a hard time when the pain shows up.

Here’s how I see this affecting my work.

I will show up to a meeting, and others would immediately ask me if I am ok, even without realizing it, my face it’s already showing the pain, which then indicates to others that I am not at my best, and I find myself explaining to people how I had an accident a few years ago, and now I suffer from back pain.

I sense my stress level going up, which then makes me jump to conclusions.

I just want things to get done quickly and tend to stop thinking strategically, I stop looking at the possibilities, and I just want to move forward with a solution because my pain is a constant reminder that I don’t want to be at work.

I have also been holding interviews, and while I’m usually very upbeat and I smile a lot while I’m in pain, I find this very hard to do, and the result is a poor interview on my part where I don’t represent the company as best as I could.

Lastly, I have been finding myself just quickly glancing through information and not concentrating on its contents or consuming them entirely.

Something similar happens with my writing, where I tend to write in bullet points and concise sentences, straight to the end, with minimal context just so I can get it done and over with.

That’s it. I’m still in pain, so I’m not sure that I have a final point to make here other than it does affect how I work, my personal life, and the people around me.

Be patient, smile, and remember that the pain is temporary.

Thanks for reading.

Icons made by Freepik from www.flaticon.com