Jon Kruger -
  • About Me
  • Blog
  • Values
  • Presentations
About Me
Blog
Values
Presentations
  • About Me
  • Blog
  • Values
  • Presentations
Jon Kruger
Uncategorized

The Freedom Disruption

As someone who lives in a free country, I truly appreciate the freedom that we have to live, work, and worship in our country. We don’t have to worry about forced into slavery against our will. But sadly so many people are willingly living as a slave … to fear.

One of my main takeaways from leading a team is just how much fear is holding people back — and much worse than I thought. This shows up in many different ways:

  • Fear of being exposed (impostor syndrome)
  • Fear that other people are better than you
  • Fear of speaking up
  • Fear that you’re not qualified enough to be an “expert”
  • Fear that you don’t know enough to do your job
  • Fear that you wouldn’t be able to find another job if you had to
  • Fear of adapting to new technology because you’re afraid you won’t able to adapt or learn it
  • People impeding progress in attempt to defend their territory
  • Fear of having to prove yourself again (and failing)
  • Fear of others discovering your weaknesses and rejecting you

Pretty much everything in that list has to do with comparing yourself to others and feeling inferior. Turns out people in lots of lines of work deal with this.

I’m a basketball fan, and fortunately for the last 4 years (until now), my Cavs have been led by LeBron James. During this time, the team when to the NBA Finals all 4 years and won the championship in 2016. LeBron is regarded as the best player in the world, and always seemed to take his game to the next level when it mattered most.

Cavs championship

Basketball is a team game, however, with 5 players on the court and 12 players on the team. As great as LeBron was, he couldn’t win without the rest of the team. (In fact, most of the narrative each year was around the “supporting cast” and the contributions they were or weren’t making to the team.)

I wasn’t there, but I’m pretty sure that no one ever went up to Kevin Love, Kyrie Irving, Tristan Thompson, or anyone else on the team and said, “Why can’t you be more like LeBron?” No one expects that from them. People just want them to work to become a slightly better version of themselves each day.

As great as LeBron is, he can’t do all the things that Kyrie Irving can. He can’t do all the things that Kevin Love can. Even if he could, he needs the other 4 players on the court and all of the players coming off the bench. Many games are won because a little used bench player comes in and contributes an unexpected contribution. The bench players got the same championship ring that LeBron got.

Too many of us are afraid to take the next step in our lives, on our teams, or in our career because we don’t think we can be as good as LeBron. But no one is asking you to be like LeBron! I don’t expect that from my team, or from myself. All I want is that individually and collectively we all try to level up and become a slightly better version of ourselves.

Fear is crippling, it makes you miserable, and it affects your ability to succeed. It causes people to tear others down because people fear that other people (on their own team even) might be better than them. This cannot be a fun way to live.

We are sitting on wealth of untapped potential if we would only just push aside our fear and step out. You don’t need to be a slave to fear. What is worst that could happen — do you think you would get fired for trying to get better? Think about that, does that make any sense?

This opposite of fear is freedom – freedom to utilize your talents, make a difference, and be who you were meant to be. Many industries are being disrupted by new technology, but we need a freedom disruption.

I value that freedom so much that I don’t want to be somewhere where I have to give up that freedom. If I do a great job somewhere and I get pushed out because people see me as a threat, because they don’t agree with me, or they feel they just don’t need me anymore, then I will thank them for allowing me to move on to something better without having wasted any more of my time.

You have to figure out what your next steps are and where fear is holding you back. But don’t do it for your boss, do it for yourself, for your team, your family, and your freedom. If you can push past fear to take the next step, you will find that there is more opportunity for you that you could’ve probably imagined.

September 2, 2018by Jon Kruger
Uncategorized

Wanted: Technical problem solvers

Most developers are used to working in a team environment, where a business analyst writes requirements, a developer writes the code, and a tester tests the code. This is a widely accepted practice, yet something about it is inherently inefficient.

Don’t get me wrong, I’m not saying that doing things this way is bad. Yet anytime you add someone else to a process, it becomes inherently less efficient because those people have to communicate and get on the same page. Generally the inefficiencies are outweighed by the benefits of having people using their strengths to help move the process along… but not always. Let me explain.

On Agile projects, requirements are not the deliverable, requirements are just a means to an end. Requirements often serve other purposes, for example, communication with business partners about what is going to be built in order to make sure you’re building the right thing. But if you think about it, requirements are in a way inherently inefficient.

Software development is a series of translations. Our goal is to take business ideas and translate them into working software. This is obviously easier said than done. On a typical project, there are many levels of translations: business person expresses ideas to a business analyst, who turns those into requirements with acceptance criteria, which developers turn into code and automated tests, and QA people turn into test plans, which leads to some UAT process with users, which eventually gets deployed to production. This process has been proven over the years to work well, but there are many translations that have to happen during this process in order to software to get created.

My argument is that there are some cases where this process is more than we need. What if for certain projects or functionality, a person or small group of people could just go solve a problem? Forget about writing requirements using the typical methods and just streamline the process and get something delivered quickly. Think about the average ticket that a BA has to write. It takes a long time to type that up, and when they do, there still isn’t any code written.

Doing this takes a lot of skill. If you developer doing this, you need to be able to communicate with the business, understand what they really want, be able to speak to them in their terms, develop a working solution, sufficiently test your code, and work with business people to make sure everything was built correctly. But if you can do this and write just enough requirements and develop and execute a comprehensive test plan, you potentially could deliver working software much faster.

I would argue that this should be the next step in the career path for senior developers. Are you able to deliver working software without the assistance of business analysts and the validation of QA testers? If you’re able to do this, you’re able to keep progress moving while freeing up business analysts and QA testers to have time to focus on areas where they’re needed.

One of the projects I’ve done that I’m most proud of was a 6 month BI ETL project where I was the only one on the team. I had to gather and write up all the requirements (I didn’t skip this part because people needed to know how it worked), write the code, test it, and make sure it continued to work in production. This code is starting its 5th year in production now, and it’s allowed people on several systems to develop against a data model that is going to be around for a lot longer than my code.

How long would that 6 month project take if we had a business analyst and a tester on it? Would it have taken much less time? Probably, but certainly not a third of the time, because so much communication would have to take place in order for everyone to get on the same page.

Now that I’m leading a team, I’m always looking for developers who can take ownership of a technical problem and deliver a solution for it. Are you able to do that? If not, what skills do you need to acquire to be able to? (It might not be coding skills.)

This is not an attempt of a team leader with a development background not appreciating business analysts or trying to cut them out of the process. I’m saying that as developers, sometimes we use business analysts and QA testers as a crutch. If you’re able to deliver technical solutions without this support, you can take your team and career to the next level.

April 12, 2018by Jon Kruger
Uncategorized

Team-based organizations vs. role-based organizations

I had a conversation with a friend of mine this week about how to structure teams in an IT department, the main question being do you align reporting structure by roles or do you have everyone on a team report to the same person regardless of role. It was a good conversation, but I kept thinking about it more for a couple days, so here I am writing about it.

Just to illustrate, here are pictures showing the two approaches:

Role-based org chart:
role-based org chart

Team-based org chart:
team-based org chart

(We were discussing IT departments with 80-100 people, with teams generally around 5-10 people. Things are a little more complicated in larger IT departments, but some of the arguments I lay out here likely still apply.)

Here is the question – if you have a team-based structure where inevitably several team members will be reporting to a manager who doesn’t come from a background in their discipline (e.g. BAs reporting a manager with a development background), how do you accurately evaluate, train, and mentor those team members?

I was say that those can be valid concerns, but I would also say that there are more important considerations.

One goal

The problem with the role-based structure is that now team members are forced to choose between two masters – their team leader and their boss. Many times everyone is aligned and this isn’t an issue. But happens when people have to choose? For example:

  • QA is behind, so the team lead asks if a developer can pitch in and help test. QA lead on the project is nervous because they feel like as a QA person they are responsible for quality, and they’re worried about getting in trouble with their boss if things get out the door with bugs because the developers that were helping with testing missed something.
  • Developers want to start writing more unit tests and the team collectively agrees, but the dev manager thinks unit testing is a waste of time.
  • Developers offer to automate some of the testing for QA so that QA can skip some really difficult, time-consuming manual tests. QA people are skeptical because they are sure that they’re boss will be OK with it.
  • The team feels like they can solve a certain problem faster by just coming together to solve the problem with less (or no) written requirements from BAs. BAs are worried that their boss will see the requirements and think they aren’t doing their job correctly.
  • Team members can’t agree on the best way to do something, and while a team leader would like to break the tie, team members won’t change because they choose to align with their boss instead.

Regardless of discipline, everyone on the team should have the same goal – delivering great software that solves the right problems. In a team-based structure, it’s much easier to put the goal over your role.

Communities of practice

The concern about people reporting to managers in a different discipline is a valid one. That being said, I’ve reported to several non-technical project manager types and it never bothered me. If you ask a team leader how well people on their team are producing, they’ll know who is good regardless of role. Also, if you manage people but you’re not a member of their team, how well do you know what they’re doing? (I have some people like this that report to me, and the answer is I honestly don’t really know that much other than things I hear second-hand.)

Also, when you think about the people who taught you the most in your career, how many of them were your direct manager? I’ve learned a lot from some of my managers, but probably more from other team members and other people at the company that I worked with. In many cases, employees are often better at their discipline than their manager (who doesn’t do it all day and has different kinds of job responsibilities as a manager).

One thing you can do is set up “communities of practice”, which are groups of people in the same discipline that get together to share ideas. This is a good idea anyway — it gives people an opportunity to learn how other teams are doing things so that they can learn from each other and collectively get better. I’ve seen this done for everything from QA, Scrum masters, architecture, automated testing, and various JavaScript frameworks.

Encourage learning

In my opinion, we shouldn’t just encourage learning, we should require it. Technology changes so fast, and it’s a challenge to keep up. I’m surprised how many companies don’t have any training programs for their employees.

If you want people to value learning, help people find learning opportunities, pay for them to attend conferences (and don’t make them use PTO), and even require people to spend a certain amount of time in training/learning as a part of their job (during work hours). Not only does this keep people up to date, good employees will appreciate the investment in their career.

Train people well enough so they can leave, treat them well enough so they don't want to http://t.co/QHONOZYXEy

— Richard Branson (@richardbranson) March 27, 2014

Continuous learning is a good thing, and it has nothing to do with who someone reports to. So even if someone is reporting to a person who doesn’t share their discipline, they’re still honing their craft.

Standardization is the enemy of innovation

There is an idea out there that once we find out the “right” way to do something (whether it’s a certain tool, home-grown framework, template, etc.), we should roll it out to everyone so that everything will be done in a standard way that follows “best practices”. This reduces the chances of failure, and allows employees to be moved around to different teams and not face a large learning curve because things will be done in the same way. Most IT departments will “standardize” at some level (e.g. “we’re a .NET shop”), and things like that are good for consistency’s sake, but that’s not the level of standardization I’m referring to here.

The pace of technology is changing faster than ever, and the only way companies can keep up and survive is innovation. Striving for standard methods is the opposite of innovation — it tells people that they’re not allowed to find new, innovative ways to solve problems, because it’s more important to follow the standards, even if the standards are outdated or don’t work in their situation.

Often times the standardization comes from role-based managers who roll out their standards for how their people do their job. Not that there isn’t good information that comes from these managers, because often times the information is good. But every team is different, and every project is different. The way you test a high traffic public website is way different from how you would test a mobile app on multiple platforms, an internal app doing back-end transaction processing, or reporting solutions. Good teams will come up with innovative ways to solve problems, and will figure out what makes the most sense for their situation.

Putting teams first

One of my favorite principles from agile is the idea that you try to keep teams together, and then bring projects to teams (rather than assembling teams for projects). If your organizational structure mirrors your team structure, this gets a lot easier. If you shuffle your teams around, you inevitably have that one guy that is too important to take off support for a system, so he has to split time. You end up with systems that were developed by teams that no longer exist, so the support structure is missing. You lose all of the cohesion and camaraderie that a team builds up over time.

I’ve been on teams where the core of the team had been together for a long time (years), and those teams ran so smoothly. We all understood our process, we knew how each other worked, and we got really good at working together to solve problems with just the right amount of process. The team didn’t need a lot of oversight because we all knew the agreed upon way to work. But the best part was that these people became really close friends of mine, and I’ll still keep up with them even though I’ve moved on.

More of what works

There’s no one right way to do anything, and there will be situations where my arguments don’t apply. But no matter what your environment is, I always strive to do more of what works and less of what doesn’t, and we all need to keep innovating.

April 7, 2018by Jon Kruger
Uncategorized

Impostor syndrome is bringing us down

I have a young daughter, which means that my life consists of the Frozen soundtrack being played relatively consistently in my house. The most popular song, “Let It Go”, it about a girl’s struggle to break free from having to impress people and put up a front to a place of empowerment where she can take on any challenge that comes her way and reach her limitless potential. They create these movies to encourage young girls to feel empowered and to feel that they can take on the world. Maybe the rest of us should start listening as well.

The fact is that so many people are struggling with impostor syndrome, or a feeling of incompetence, that you’re not good enough to succeed at something, or fear of being exposed as as fraud. This is stopping people from taking on new challenges and feeling empowered to succeed.

Don’t let them in,
don’t let them see
Be the good girl you always have to be
Conceal, don’t feel,
don’t let them know

We’ve all been in situations at times where we’ve been in over our head. It’s an uncomfortable feeling for sure. We’ve all had our shares of successes and failures. And yet we all woke up the next day with a new chance to make something of our day.

Think of the people that you know who are out there making a difference, succeeding in a new role at work, or having an impact in some way. I’m going to let you in a little secret – they’re all in over their head.

The fears that once controlled me
Can’t get to me at all

I always want to be in a place where I’m a little bit uncomfortable. It’s not always fun and maybe I lose a bit of sleep at night, but there’s no better way to grow. There’s nothing more satisfying then having to take on a challenge that you’re not totally prepared to handle and then finding a way to make it work.

But maybe more important is being able to not be a slave to fear. There is enough stress in life, the last thing I need to add is fear of failure. I run across so many people who are very talented but are too afraid to step up and take on a new challenge. I run into people who are afraid to have kids because they are afraid that they won’t know how to be a good parent.

Even writing that last paragraph makes me sad. We are sitting on a wealth of untapped potential. So many people could do something great if they just were willing to step out into the unknown. The world desperately needs people with enough confidence to step up and make a difference.

You may feel like this describes how you feel about yourself. You might think that the worst thing that can happen is failing. I think the worst thing that can happen is that you fail to even make an attempt. Sure, you will guarantee that you won’t fail, but you will be left to deal with your own inability to step out into the unknown.

It’s time to see what I can do
To test the limits and break through
No right, no wrong, no rules for me,
I’m free!

Imagine what your life would be like if you weren’t afraid of failing. Imagine if you didn’t care what people thought about you. Imagine if you looked at a mountain in front of you and saw an exciting challenge instead of an overwhelming obstacle.

Here I stand
In the light of day
Let the storm rage on

Life is hard, and downright scary at times, but we all are here for a reason and we can all make a difference, if we’re just willing to give it a try.

January 2, 2018by Jon Kruger
Uncategorized

Leaving the comfortable

A little over 3 months ago, I started at a new job. This came after years of good consulting work at a great place where I felt quite comfortable. While I was in a great situation working with a lot of good friends, I gave it up for a new challenge.

Anytime you start something new, it’s a roll of the dice. I was going to work in an industry that I knew a lot about, at a company where I knew a lot of people. But even with all that, there were a lot of things up in the air.

I was at my previous client for over 5 years, which these days seems like an eternity. In some ways, it felt that way for me because that’s the longest I had ever stayed at one place. In other ways, the time flew by. They say that time flies when you’re having fun, and that’s certainly the way that it was. In that time, our team went from just figuring out how to function to being extremely high performing, even to the point that we didn’t notice it anymore. We never had large disagreements about process, developers would just run with major efforts and understand how to figure it out the right way, and we released every 2 weeks with very little fanfare and virtually no issues. The efficiency of our team was incredible.

At the same time, I knew I had a choice to make. I could keep going in my comfortable place, providing a lot of value, working with good friends, working for a good company… but I wasn’t being challenged. It wasn’t the fault of anyone, it’s just that when you do the same kinds of things over and over for years, you get pretty good at it, and you don’t really have to learn many new things or find your way in unknown territory.

So I set out for the unknown territory. I had some friends encourage me to do this, even though they didn’t know that I was already heading down that path, but nevertheless it confirmed the direction that I was going.

These days, the goal of so many people is to live a comfortable life, and in today’s world with all of our technological advancements, that’s getting really easy to do (why bother to go to the store when Amazon will deliver almost anything to my door in 2 days?). It feels good to be comfortable, but that’s not the goal that I’m trying to achieve in life.

The new job has not been comfortable, at least not at first. When you start somewhere new, so many things are up in the air. You don’t feel like you know how anything works, and you know that at some point people are going to expect you to know things. At first you feel like you’re just trying to keep your head above water while people keep dropping more things on you to carry, but eventually you figure it out. That’s how it was for the first month or so. But at the same time, I found I had a lot more energy. Work felt stressful and I was tired when I got home, but I was getting up earlier, I had more time to exercise, and I didn’t feel lethargic during the day. This was a big change from my last several months at my previous gig, where I felt tired most of the time, especially in the afternoon.

I really underestimated how tiring it is to work somewhere where you are too comfortable. By all measures, everything there was great. It’s hard to find anything that was negative about the situation, other than the fact that I wasn’t learning and growing as a developer. All of that comfort couldn’t have been draining, but there was nothing that was stimulating. I think deep down I recognized this, which is what caused me to leave, but I didn’t know that it would have such a big effect on my energy level.

I’m starting to settle in at my new job, I feel a lot more confident and I understand a lot more about what’s going on. Compared to my old team, my new team (which is made up of all new people who haven’t worked together before) has a lot to figure out. Our process isn’t as smooth, we don’t move as fast, we don’t have a shared understanding of how we like to create software, getting anything to production is a lot of work, and I personally have a lot to learn and figure out. But I know this is all a good thing, and we will all learn from it. That’s what I wanted after all, to be somewhere where I could succeed, but I would have to work for it and learn a lot in the process. All of those things are happening, and I’m confident that our team will get a lot better over time. We are poised for a ridiculous amount of success.

For me, I’ve traded the comforts of the predictable for new territory, and it’s going to be well worth it in the end.

August 30, 2017by Jon Kruger
Uncategorized

There’s more than one way to change the world

We are in a new age where employees don’t just want a job, they want to work for companies that support causes they believe in, are socially conscious, and give them a chance to make an impact that goes beyond their job description. Everyone wants to “change the world”, especially in startup culture where everyone is trying to “change the way people do X”. I love that people are thinking beyond themselves and trying to find ways to improve the lives of others and invest in causes that they care about.

While myriads of articles are written about startup darlings who are innovating and disrupting, what about the majority of us that work at the more “traditional” companies? What about everyone working at insurance companies, banks, accounting firms, government agencies, and any other kind of “enterprise-y” environment that doesn’t have a modern-looking space in a trendy neighborhood, free healthy food for lunch, and craft beer on tap? Some of these industries are more associated with corporate greed and corruption than social consciousness, but there are millions of people who work in those industries that have nothing to do with the mistakes made at the top. Many “socially conscious” job seekers would never even consider these companies.

I have a different view of changing the world. I certainly appreciate when companies want to make an impact on the world, but I don’t need my company to do this is order to make a difference at work. Why? Because regardless of where you work and what you do, people are probably involved.

Every day I go to work and create software that no one outside of the walls of the building will ever use. My work will never impact millions of users’ lives or change the way that the world does anything. This is because I work on internal business applications.

Meanwhile, there are a group of people that I work with that are very dependent on the software that I write. I can help them do their job, solve their problems, achieve their goals, reduce their frustrations, and feel good about coming to work every day.

There are a group of people that I work with are very dependent on what I do. They are the people on my team that are working with me to achieve a common goal, and they are counting on me to do my part of the work. We learn from each other, work together to solve problems, and we are involved in each other’s lives. We talk outside of work and we’re there for each other when life is challenging.

The people I work for are very dependent on what I do. They have careers, aspirations, goals, and plans and many of those are dependent on their team members working hard and being successful.

My ability to make an impact on the world around me is not defined by the place I work or the industry I’m in. We all have a chance to make a major impact on the lives of people we work with each and every day. But to somehow discredit companies in certain industries because they’re not #changingtheworld does a disservice to the millions of humans that work there that make an massive impact every day.

The Yelp app has over 10 million downloads on the Google Play Store. I love using Yelp to find good places to eat wherever I’m at, and it’s changed the way that I find restaurants when I’m in unfamiliar places. But these benefits are nothing compared to the difference the people I work with have made in my life while we were doing things like maintenance on internal Silverlight applications and writing data conversions.

I appreciate everyone’s desire to make an impact on the world. I am with you all on that and that’s the reason I love what I do, but my impact is not defined by my employer’s mission statement. I just hope that we all remember that we can make a difference wherever we are at, and you don’t need to be at a trendy company to do it.

April 2, 2017by Jon Kruger
Uncategorized

Don’t break stuff

When you change code, how do you know that you’re not breaking something? If the code change is small, it can be pretty easy (especially if you have tests). I’m talking about more complicated code changes.

Sure, you have unit tests, but how do you know that everything in the system works together correctly?

Sure, you have integration tests in your code, but how do you know that all of the systems involved are working together?

Sure, you have end to end acceptance tests for all of the scenarios that you know about, but what if a scenario exists that you didn’t think of?

We can come up with any number of excuses for why bugs happen in production. But what happens when a bug could cause a big problem?

I’m in this situation right now because the relatively large code change I’m implementing could impact how much money we charge our customers. The code I’m writing takes in some input files from a third party and processes them. We could have a big problem if someone gets overcharged or undercharged, or even worse, not at all. There are lots of things that can go wrong. I have a lot of good acceptance tests for my code, so I have good test coverage for the scenarios that I know. What I worry about is the scenarios that I don’t know, or what could cause my code to not get called at all. Because of this, I have to think past the traditional ways that I usually test things.

Searching for test cases

I did a lot of analysis on the data that my code is going to consume. I even wrote some small apps and SQL queries that will parse historical data and look for different combinations of data, and used that to come up with the test cases. What’s tricky is that some of the scenarios do not happen very often, so that means I need to do more digging to find them. At some point, this can become tedious, but in my case it’s worth it.

Watching for unexpected scenarios

Thanks to my data analysis, I have a list of expected scenarios that I’ve seen from past data. In addition to writing tests for all of these scenarios, I’m also writing some queries that will check for evidence that some unexpected scenario happened in production, and I’m running these queries every day. By doing this, I’ll be aware of any potential changes in how the source data comes in, and I also avoid having to write acceptance tests for scenarios that probably aren’t going to happen.

Throw exceptions when you find unexpected scenarios

Not only do I have queries to check for unexpected scenarios, I also have inline checks that will cause the process to stop and throw an exception if I encounter specific unexpected scenarios that could cause an issue, especially when the issue would not otherwise be obvious (in other words, it wouldn’t cause the system to fail, but the system might give me incorrect results). In many cases, it’s a waste of time to discuss, implement, and test some edge cases that is very unlikely to ever happen, but I at least want someone to know if by chance that happens. Now if you’re writing a UI for a website, you might not have the luxury of being able to do this, but when you’re just processing backend files, you can get away with things like this.

Parallel testing against production data

We have a test environment set up with 2 databases – one has 2 day old production data and one has 1 day old production data. We restore these databases from backups every morning and then run in all of the files from 2 days ago into the 2 day old environment, then we compare the results with what’s in the 1 day old database, and theoretically everything should match. There are always exceptions, especially when you have data that was modified by a user after it was created in the database, but this allows me to easily check almost every column on a database table and see that the results from my process match what is currently in production. This has been a huge lifesaver, not only in finding bugs in my process, but for finding unknown scenarios, and for finding bugs in other related processes as well. People have a lot more confidence in your work when you’re able to show tangible proof that your system is working the same as what’s in production.

Writing audit queries that validate the process end to end

In addition to the queries that check for unexpected data, I also have queries that validate that any data received at the beginning of the process will have some resulting output. I need to make sure that the process isn’t silently failing or is failing in a way that I don’t expect.

Checking logs

Hopefully your app logs exceptions somewhere, so as a last resort you should always check for any fallout in the logs.

A different thought process

I find this way of thinking to be a different thought process when it comes to testing. I’m moving past the mechanics of testing (what are my test cases, what tests am I going to write, how can I mock this class, etc.), and trying to find whatever means necessary to not break stuff. Sometimes this is done with automated tests, manual tests, inline sanity checks, writing exploratory code to help me discover scenarios, or some form of production monitoring. The latter three are where I’ve found I’m doing things in a way that I haven’t always done before.

I think the shift in mindset partly comes from owning the responsibility for a feature. At one point a long time ago, I wanted to get my code to work and let QA test it and find bugs. Then I moved to wanting my code to work and wanting to come up with a way to test it. The next step in the progression for me is finding ways to be able to make large changes to the code, not break stuff, and ensure that everything will work with no impact to the business. In each step in the progression, I’m starting to look at the problem at a larger scale and looking at business value and business impact instead of just technical concerns.

September 23, 2016by Jon Kruger
Uncategorized

Encouraging innovation

One thing I love about software development is that it requires a balance between logical thought and creative thinking. Both are required to be successful, but this is really easy to forget, and it’s the creative side that often gets ignored. I would argue that ignoring the creative side is probably the worst thing that you can do.

When I say that, I’m talking to myself first. As you know, there is often a disconnect between what you believe to be true in your head and how you actually live. I feel like my busy, efficiency-driven life is forcing me in one direction. At work, I’m trying to become more efficient, reduce cycle time, meet deadlines, complete tasks. At home, I’m trying to balance having a family, trying to keep the house from becoming a disaster area, and trying to get enough sleep. Even now as I’m writing this, I know that I could be working and I almost have to tell myself not to. All this leaves little time and energy to be creative. (Proof of this is my drastic decrease in frequency of blog posts over the last year.)

Here’s the problem – it doesn’t really matter if you’re efficient at something if you’re being efficient at the wrong thing. Also, in this fast changing world of technology, what was the right thing yesterday might not be the right thing today. What gets lost when you’re too task-focused is innovation.

We’ve all heard of Google’s famous “20% time” where employees can work on whatever they want. You hear of other startups copying the same idea. This isn’t just another employee perk like free lunches and workout facilities. This is a calculated decision to give people time to innovate, because the company feels that the value of the innovations will far exceed the time spent. Many more established companies are starting to launch “innovation incubators” where they take smart people and let them go off an build innovative stuff without the drag imposed by bureaucracy, meetings, and big-company red tape.

For the rest of us who don’t work at startups or internet companies, innovation may not carry as much value. If you’re maintaining back office internal systems, your tasks are often straight forward and you’re probably not going to come up with a revolutionary idea that will bring in thousands of new customers. But that doesn’t mean that there’s no value in innovation. There are still opportunities to innovate in these work environments, because all software development is a creative endeavor. You still are creating something that will need to meet the needs of the users, and we want to come up with creative ways to do it better, faster, and cheaper.

Developers are strange creatures sometimes. Our quirkiness is often what makes us successful. We may seem to be very structured, logical people who just want to put on their headphones so that we can complete the ticket that we’re working on and move on to the next one. This is true, but developers are also impatient and lazy. We don’t like waiting for our code to compile, we don’t like using frameworks that make things hard to do, and we don’t like writing the same code over and over, and this can drive people to try and come up with creative solutions — if they have room in their head to do it.

I find that if I get overly task-focused, the innovation switch in my head turns off. There is a big difference between “today I’m going to work on X, Y, and Z” and “today I’m going to solve a problem”. One approach has the solution outlined for me, and the other one forces me to innovate. In both cases, a problem is going to get solved, and the solution might be the same either way. The point is that when I go to work with the innovation switch turned on in my head, there exists the potential for something great to happen. It might be completely unrelated to the task at hand, but the value of that innovation could far exceed the value of the everyday task I was working on.

For most companies, it’s not going to make sense to give your employees 20% of their time to work on whatever they want. But there are still things that you can do to encourage innovation.

Pose problems, not solutions

Chances are someone higher up than you in your company is deciding what you’re going to work on. This is good, but I’ve noticed a difference in the way in which these tasks can be handed down. Sometimes I’m given a series of tasks that solves a problem. Other times I’m given a problem and am asked to solve it. I greatly favor have the second approach, for several reasons. First, if I’m given a problem without a solution, I take it as a challenge to come up with a creative way to solve a problem. Second, I’m motivated to solve the problem because I can understand the problem and can see the value that is going to come out of the solution. Third, I just might come up with a more innovative way to solve the problem.

Encourage experimentation

One idea that we introduced at work was the idea of “experimentation time”, where someone can propose something that they want to try out, ask for amount of time to try it, and then go do it and report back the results. This could be anything from trying out a new web framework to refactoring part of our codebase to trying to find ways to run tests in parallel – pretty much anything goes, as long as the goal is to find a way to improve something that we’re working on.

While our IT leadership loved the idea, no one has taken advantage of it yet! I find that interesting because people complain that they don’t have time to innovate but then they don’t actually take the initiative to do it. I’m not working in one of these IT departments with ruthless taskmaster bosses that force unrealistic deadlines on people. I suppose this can be expected from people who typically are focused on getting things done and who are often rewarded and complimented for doing so.

Maybe we should start requiring people to take time to work on something innovative, kind of like how you might be assigned a project in school. Sometimes people don’t feel like they have the freedom to work on something that isn’t working towards meeting a deadline. We practically have to force some people to attend conferences (any other time, people would jump at a chance to take a free trip to a nice destination to learn something and have fun with their co-workers). If we truly value innovation, then we need to find a way to get that message out.

Start with yourself

Time to preach to myself again. How can I sit here and write all this when I’m not giving myself time to innovate and learn? I read this quote today:

Nothing creative will come out of your efforts if you don’t allow your best ideas to incubate. Follow the lead of Warren Buffett and allow time for quiet reading and thinking every day. I recommend devoting at least one hour a day to learning, as Ben Franklin did. Can’t find the time? While you’re commuting or en route to meetings, stay off the phone and listen to a podcast or comtemplate what you’re been reading. You’ll be surprised by what comes out of your brain if you give it a rest sometimes.
–Verne Harnish (Fortune magazine)

The most important things that have happened in my career this year were not because of things I accomplished, but because things I’ve read and heard at conferences, and things I thought about when I was in those spaces when my mind felt clear enough to think about the big picture. Some of these ideas have been career changing for me. Not only that, it reinforces what I’m doing on a day to day basis and gives me motivation to handle the task-based work that consumes most of my day. The challenge is finding the right balance.

August 4, 2016by Jon Kruger
Uncategorized

What’s your true motivation?

People are motivated in many different ways. You can probably think of situations at work where you’ve been really motivated to do awesome things. But what really motivates you if you look beyond the surface?

I’m going to use my current situation as an example. I’m currently doing maintenance on a 6 year old system with a Silverlight front end (and no one uses Silverlight anymore). From a purely technical perspective, it’s not hot new technology, and over the last couple years I’ve watched several developers get sick of doing it. I question whether they are seeing this big picture.

Here’s the thing — the maintenance that we’re doing on our 6 year old Silverlight app is providing a ridiculous amount of business value. I’m able to make changes that have an immediate impact on the users’ ability to do their job, sell new products, and reduce costs.

Are there more “fun” technologies out there? Sure! I play around with things like Ruby on Rails and React on the side because I’m not using them at work and I enjoy working with technologies like that. But my attitude at work depends on my true motivation.

A progression of thought

I’ve spent a lot of time thinking about what motivates me in my career. Am I going to get bored with software development at some point? Are there other roles that I might want to pursue? There are lots of good questions to ask.

I came to the conclusion that I’m not going to get bored with software development because it’s such a big part of our world and the things you can do with technology are too exciting. I’ve also started to understand the underlying reasons that give me motivation.

When I started out in my career, I was like a kid playing with toys. I wanted to do cool things with new technology. I had a limited understanding of what was important to the business, and I was basically just doing whatever work items were in front of me (hopefully with new technology). I had a very small and self-centered view of the world.

Later on, I realized the importance of providing business value. I got into lead roles where I had more interaction with people in the business, and I started to see what was important to them and how technology could solve their problems. I still enjoyed working with new technology, but I started placing more importance on solving business problems. But even at this point, I was missing something very important.

The real underlying motivation for me now is improving people’s lives through software. I want to improve the lives of my users by developing software that makes their job easier and makes them more successful. I want to improve the lives of my managers by helping to solve their biggest problems. I want to provide value to the business and help them achieve their mission. And I want to improve the lives of the people on my team and help us all get that good feeling that you get when you work together with people that you like to achieve something incredible.

It doesn’t really matter what technology I’m using. What really drives me are people. Without people, I’m just typing words on a screen. But when you add people into the mix, I have a much larger purpose then just developing an application. I’m using technology to change people’s lives. And that is a good reason to get up in the morning.

June 15, 2016by Jon Kruger
Uncategorized

What would change if X were not a problem anymore?

When I think about a lot of the efforts that we make to improve the software development process, I feel like we’re usually trying to make improvements within the system that we are currently living in. What if we could instead disrupt the world that we’re living in by changing something that dramatically changes the game?

Think of what Uber has done. I feel like everyone uses Uber. How many people do you know used taxis on a regular basis? Maybe you used a taxi when you absolutely had to, like when you’re getting from an airport to a hotel. But on a daily basis? No way. The other day a co-worker took an Uber to get to work after dropping his car off to get an oil change. When I asked him how he was going to get back to pick up his car, he said, “I’ll figure it out this afternoon.” That is a game changing idea. It makes you think about transportation in a way that you never thought of before.

Let’s think about the world of software development. I tried to think of some of the big changes I’ve seen in the last few years.

  • DevOps and cloud computing – it used to take weeks to get a new server purchased and stood up, but now we can go to a site that automatically provisions a server, installs what I need, and then I can get rid of the server as soon as I’m done with it at a fraction of the cost.
  • Git – I remember the first time I heard about branching per feature. In the world of centralized version control systems, branching and merging is hard enough that you would never think about branching per feature. Git makes the cost of branching and merging almost zero, which enables you to work in a completely different way.
  • Dynamic languages – I can change a line of code and see the results immediately without having to compile
  • Remote working – collaboration tools are improving to make it much easier to work with people that aren’t in the same location as you

Think about the application that you work on and business in which you operate. What are some things that are annoying and slow you down? Some of these things are obvious, but many are really hard to see because they’ve just become “normal” to you. You’ve accepted those things as facts. But what if there were a way to change the facts?

Let me give you some examples.

  • What would happen if I didn’t have to wait so long to get answers from people in the business?
  • What would happen if I had a faster development laptop?
  • What would happen if we were using a different framework/platform/language?
  • What would happen if our team could all sit together in the same space?

Those are good questions to ask, and those things might provide a lot of value, but that’s still operating within your current plane of thought. What if we ask more mind-blowing questions?

  • What will happen when we improve smartphone battery life so that a phone can operate on a full charge for weeks/months?
  • What will happen when computing and network speed increases so that web pages load instantaneously?
  • What could you do if everyone had virtually unlimited data and download speeds were measured in gigabytes per second?
  • What will happen when mainstream video chat is no longer a grainy, choppy FaceTime or Hangouts video and instead is a clear 4k data stream?
  • What will you be able to build if all of these were true?

(2024 Edit: I’m still waiting for week long smartphone battery life, but the rest of these are actually real!)

Will those things help you out today? No, because they mostly aren’t a reality yet. That’s not the point. By thinking about game-changing ideas, it forces you to think on another level. It forces you to think outside the box. It’s surprisingly hard to think outside the limitations of the world in which we live everyday (remember The Matrix?).

This is why I attend certain software development conferences and not others. For example, I’m writing this at the Path to Agility conference. I love going to open space conferences for the same reason.

I go to conferences like #path16 not just to hear mind-blowing ideas, but to hear things to make me think about mind-blowing ideas.

— Jon Kruger (@JonKruger) May 26, 2016

The technology world is changing at an extremely rapid pace, so we’re going to need to change the level of our thinking.

May 26, 2016by Jon Kruger
Page 2 of 7«1234»...Last »

About Me

I am a technical leader and software developer in Columbus, OH. Find out more here...

I am a technical leader and software developer in Columbus, OH, currently working as a Senior Engineering Manager at Upstart. Find out more here...