Be Excellent to Each Other

Imagine this scenario:

It is a beautiful, sunny day with a cool breeze.  You are walking down the street feeling on top of the world.  Suddenly the person walking in front of you catches their foot and falls, scuffing their knee really bad.  Which would you do?

  • Help them get back on their feet, seeing to their pain and soothing their embarrassment by informing them you’ve fallen before, then tell them to keep on walking
  • Inform them that they fell down, which also affected your progress, so they should get back up and get moving immediately.  Also, point out if they had just been more careful none of this would have happened.

I will give you a moment to decide.  Ok, time is up.

I think everyone would like to think they would do the first option. In fact, if you were the one that fell I know everyone would want the first option to happen. 

Now let me change the situation. You are the senior team member tasked with a deadline that cannot slip.  You just did a code review and one of the others did a bad job.  They know better but it looks like they got a bit careless due to the deadline and forgot that they are professional.  Now which would you do:

  • Help them put quality back into focus and show them how they can get back to producing better code.  Tell them we will get it done in time and even say you have made that mistake before of sacrificing quality for quantity.
  • Inform them that their code is bad, which is now putting us further behind and they need to work extra to fix it as soon as possible.  Also, point out that they are never to do this again and if they had only followed the coding standards this would not have been an issue.

Again, I will give you a moment to decide.  Ok, time is up.

This one may seem to be shaded of gray (or grey if you are reading this across the pond); however, I submit to you that it is no different from yelling at the person that fell in the first situation.

I cannot remember one time in my life where I performed subpar that I was not aware of it, often acutely aware of it.  Whether it was due to lack of resources, training, motivation or just plain lazy, if I did a bad job, I knew it.  The last thing I needed was for someone to point out the fact that I did a bad job.  I needed someone to encourage me, not discourage me.  Does someone telling you to work harder, actually accomplish anything?  If it does, then why were you not giving it your all in the first place? 

It seems to be more and more frequent that people are either just interested in the short term activities or dismiss others via “they stink”.

What have you done for me lately?

This whole idea when dealing with people just does not cut it.  I am all for holding people accountable and having consistent results, but we should really base our decisions on their best day, not their worst.  Ok, they really screwed up; you think they are not aware of that?  Of course there might be consequences, but does that also need to include discouraging them?  Even if the consequences are that they need to be let go, do you really need to make them feel worse?  Talk to the problems, tell them how to fix it or how to grow and encourage them, even if you have to send them out the door.

They Stink

I can always tell when my wife talked with the IT Admin at her work; she has Nick Burns for an admin.  Even though that is a spoof, it often is not far from the truth. Sure, we might not be that blatant or we excuse it by calling it a “rant”.  However, as most of our mothers said, “If you don’t have anything nice to say, don’t say anything at all”.  As I pointed out earlier, the way you address something matters.

Take your time do it right

We are often encouraging people to take their time and do things right the first time.  So why does this idea not apply to developing people?  If we take our time and have some patience and grace with people that have different skill sets, maybe we can actually create a better workplace for everyone.  If life really does come down to a few moments or a few decisions, then how important and how much affect can you have on someone else’s life by what you say and do?  If done right, you could help shape the next superstar, if done wrong you could cause a downward spiral that ends with a thud.

I have a great amount of respect of business owners that have employees and realize that what they do affects not only employees but their families as well.  My current manager told us the beginning of last year that his number one goal was to ensure everyone working then, would be still working the end of the year.  Not make sure he gets a great bonus, or the company makes a lot of money.  I have to respect those type of things, because people matter, in fact it is often our only true competitive advantage.

Excellence

To quote Talent is Never Enough by John C. Maxwell:

Success bases our worth on comparison with others.  Excellence gauges our value by measuring us against our personal potential.

So stop competing with co-workers or putting them down, and actually work with them.  In other words, be excellent to one another.

1 Thessalonians 5:11

Talk to me Goose

SQLSaturday brought to you by foursquare

A few months ago, I had the pleasure and honor to help organize the first SQLSaturday in Chicagoland with Wendy (blog | twittter)  and Ted (blog | twitter).  Let me first say that I thoroughly enjoyed it.  Obviously there are things we could of done better and some things we just simply weren’t aware of, but it was without a doubt the best SQLSaturday I have ever been to (full disclosure: it is the only SQLSaturday I have ever been to :) ).

However one of things I thought was interesting about it was that it never would have happened if not for foursquare and twitter.

I cannot get to the posts now, but sometime last October I had posted via foursquare last I was at Magenic in Lombard, IL when Wendy saw that it was only a mile away from her work in Lombard.  Within a week, we met for lunch.  That is the luncheon where Wendy and I first shook hands and said let’s do a SQLSaturday.  Thank you twitter and foursquare.

How many methods can we use?

Just the other day I was chatting on IM with Ted.  He asked me for something, however we were off IM by the time I got it, so I called and left him a voicemail.  Evidently, he was at dinner so he texted me back and then I Twitter DM’d him to which he called and left a voice mail for me.  What is cool about that is each of us communicated with whatever was easiest at the time and the conversation context was not lost.

More <> Better

Of course more communication methods do not in any way, mean more efficient or even better communication.  In fact, it is probably the opposite.  Conversations held 140 characters at a time do not have much depth.  Plus we all have been in the situation of being 10 characters over and trying to figure out what characters we can remove yet still get the meaning across.

This has the similar effect of the newspaper headline.  It is catchy and sells but the depth is not the best.  In addition, studies shows that the majority of communication is non-verbal, or in the context of this blog post: non-text.  Not everything can be boiled down to the 140-character sound bite.

Lonely and complicated

It is unbelievable that we live with 6 billion other people on the planet but one of the largest problems is loneliness.  I mean it is documented about our society regarding loneliness and interaction:

When Americans say “Hi, how are you?”, they are only expecting a “Fine,” or a “Fine, thank you” or a “Good” in response.  It is not usually an invitation to a lengthy conversation.

And truth be known, I’m as guilty as the next person of doing that,

There are some things that are inherently complex and therefore need a deeper level of discussion.  Having a real relationship is one of them.  And you know what?  That is ok.

Don’t Worry, I’ll Get To It

Looking back you realized where you made your first mistake.  You thought it would work out differently; in fact, you knew it would.  Alas, you believed the lie.

Wait, let’s back up:

Sweat mars your brow as you start to feel panic set in.  You reach for your mountain dew can and quickly put it down so no one will see your hand shaking (plus don’t want to spill a good dew).

Still need to back up further:

You were minding your own business watching a great SQLPASS webcast and thinking of how you were going to implement those cool things you learned.  At least, that was until you got THE PHONECALL.  Your boss calls and says, “Hey there’s this project going on that is going to need some database help, I’ve told them you’re just the person to do it.  So I’ve scheduled you in a conference call tomorrow morning first thing.  Sounded pretty straight forward so should be no problem.” You then start downloading your brain to notepad and internet links so you don’t forget the SQLPASS presentation.

You come in the next day, get your morning Mountain Dew (hey it’s my story and I’m not much of a coffee drinker) and jump on the conference call.    That is when you hear this:

“Glad you could join us; your boss said you were the best, so we’re expecting great things from you.  What we need is a database to store the Excel documents we’ve been working on for the past year.  We’ve just been emailing them around, so we’ll need to import the data and be able to create reports.  I already spec’d it out in Access and don’t think it should take more than a week, but with you on here, it should take less time!  This is good because we’re already committed to deadlines in about a month. I will email you the Excel documents, once you look and understand them we will talk later this afternoon to answer any questions you have. K, thanks, bye”

You start seeing visions of SSIS, SSRS and SQL go through your head and you’re wrapping your brain around everything that needs to be done, when you get the email: “Here’s a couple of the first type of spreadsheets, there are actually 3 different types of spreadsheets but it’s all related.  Should be no problem for a wiz like you, huh? :) When you’re ready for the rest, let us know and we can create a CD of them – think there’s about 300 or so.  I forgot to mention on the call that while we have a deadline in a month, we promised to start getting reports out next week, so I’m really looking forward to seeing the reports this week.”

Sweat mars your brow as you start to feel panic set in.  You reach for your mountain dew can and quickly put it down so no one will see your hand shaking (plus don’t want to spill a good dew).   Then a thought creeps into your head, you initially reject it, and look around to make sure no one heard it, but as you think about it, the thought starts making sense and you start to smile.  You now have the way to meet or possibly exceed the expectations and you can look like the hero.  So you say to yourself, “Don’t worry, I’ll just import manually, create the code as I go to be quick, then I can go back and clean it up later”

———————

The above scenario is not that uncommon in our field.  We are brought in as the experts and expected to produce things quickly.  The business group does not know and possibly does not even care about everything we do. But, really, it is not their job, if they did, you would not have one.  Things like code quality, code coverage, and security are your job, not theirs.

However, I am still seeing too many people try to be the hero by working around the clock or reducing code quality to meet the requirements as soon as possible.  Let me refute some more common reasons:

I will have plenty of time…

The idea that you will all of a sudden have this huge amount of free time to do performance improvements, proper error handling, better naming conventions, etc. is a myth.  More likely, you will be pulled onto another project and then someone will knock on your door in a year or two asking you to explain this really bad code they found.  If on the other hand you are experiencing large blocks of free time, please send me a note as I might have some work for you.  Companies pay you to work, which is the opposite of having free time.

I’ll just do it this once…

If you put that kind of code out there, you will probably end up doing a lot of manual process/manipulation.  This means when it is time to actually go-live, you scramble to get it all working, again reducing quality.  I have often seen “While it’s in development I don’t have to worry about getting it scheduled.  Oh that process didn’t work; I’ll just manually fix it.”  If you have to fix it manually in development, you will have to fix it manually in prod.

They just don’t understand

Our job should not just be seen as a cost center it should be seen as an asset.  That does not mean we just produce great code/functionality, it means we help the business achieve the business goals.  In other words, we work “with” not “for” the business.

Back in the Exchange 5.5 days, I did some work as a systems administrator.  We discovered that some people were using mailboxes that had up to 500 MB in them, while the average was around 100; I researched best practices and did all this analysis.  I finally brought the suggestion to my boss, “We should limit everyone’s mailbox to XX size that way we don’t have space issues” His response “This is obviously the way our people work and if it is, why we shouldn’t just invest in more space so they can continue to work that way?”

I had never considered the business, only the technology.  When you just have technology on the brain and not the business or the people you come up with solutions for the technology. “My system would be perfect except for all those users”

Take the time to explain what you need to accomplish so you can create what they want you to accomplish.  They want it sooner rather than later? Then reflect some of those decisions back to them, even empowering them to make some.  “Yes I can get that really cool function out there this week, but everyone in the world will have access to it,  With a couple more days I can also have it secure.  Which would you like?”  Of course, this means that you have to think more strategically about the project, which can be difficult at times.  We all know how easy (and fun) it is to just jump in there and start producing code”.  Transparency is the key.

But I’m always having to change things

Realize that some refactoring will always be necessary. The days of going away for 6 months to create something and come back to do your big “ta-da” are long gone.  People want things faster with more agility so things can change as we go along.    This means more pressure to produce faster, which means refactoring and adding additional functionality as you go.  However every line of code you write should be quality.  I don’t know how many times I have seen Proof-of-Concepts (POCs) turn into the actual production system.  Just because it is a POC from a business perspective does not mean that it should be a POC from a code quality perspective.  I actually saw someone code up a textbook T-SQL injection (put the stored procedure parameter straight in the where clause without any validation), with the intention of fixing it later.  If it is wrong to do later, it is wrong to do now.

In the development world, there are many tools for code coverage, unit testing, refactoring, etc.  While there are some tools out there like VSDBPro unit testing, VSDBPro and Red Gate refactoring, etc., the tools in the database world are not as mature.  There is no IDE that forces white space or automatically documents for you.  We do not have tools where we can just do a few clicks and have end-to-end tests.

However, that is no excuse to be a gunslinger and just shoot from the hip.  We are professionals and should be creating professional code that is readable, documented and have a standard of quality.

If you are struggling with that, adopt a Test Driven Development (TDD) philosophy or something else that will force you to think about or do things better.

Or maybe it is taking you 5 minutes to figure out what is going on in a stored procedure you just wrote a couple days ago.  If so, let’s be honest you failed in either code readability and/or documentation. No excuses, there are even good free tools out there. Whitespaceisreallyagoodthing.

Code Quality, Code Readability and Code Documentation is Important