How does an organization best achieve software quality?

Great question! But is quality even important? Is it possible? How do you know if you’ve achieved quality? 

Preface

I was recently asked a series of questions and decided to create blog posts from the answers. 

Everything herein came straight from this horse’s mouth. I didn’t once flex my Google-fu or Bing-kwondo except to determine the best way to spell Bing-kwondo. My goal was to respond to the proposed questions solely with the knowledge I’ve gained from experience over the years. When reading my response, please remember – with passion comes opinion. I value your opinion, even if it is different from mine, as difference breeds understanding and growth.

My opinion

There is no silver bullet. Quality is often subjective, unnecessary, or even impossible when faced with constraints.

In general, the following bullets, in no particular order, seem to produce the highest quality software regardless of constraints.

  • Unit tests, integration tests, and functional tests (all where applicable only)
  • Continuous, and strict, integration builds
  • Automation
  • Code reviews
  • Pair programming
  • Continuous personal and professional self-improvement
  • Humility
  • Passion
  • Fantastic leadership
  • Appropriate communication across all levels of the organization
  • Reasonable expectations of developers by management
  • A clean, developer-friendly work environment
  • Providing developers with the tools they need
  • Documented and agreed upon standards and procedures
  • A shared vision, values, and goals
  • Having the right people on the team
  • Flexible, modern infrastructure
  • Powerful developer hardware
  • Software architecture that encourages quality
  • A software development lifecycle that doesn’t get in the way or cause bottlenecks

But, really, even if you checked off all those boxes, how would you know if you created a quality product? I guess that’s the first question to ask — What is quality? If “quality” simply means “running” in your organization, then I suppose even most newbie of developers can succeed. 

 

What is your definition of “done”?

Such a vital question in the software development world! “Doneness” is how you measure progress. And so it seems important that we should create some definition of the term. 

Preface

I was recently asked a series of questions and decided to create blog posts from the answers. 

Everything herein came straight from this horse’s mouth. I didn’t once flex my Google-fu or Bing-kwondo except to determine the best way to spell Bing-kwondo. My goal was to respond to the proposed questions solely with the knowledge I’ve gained from experience over the years. When reading my response, please remember – with passion comes opinion. I value your opinion, even if it is different from mine, as difference breeds understanding and growth.

My opinion

Definitive doneness can only be determined if all parties involved fully understand the scope of work requested, the level of doneness requested, and if the work was completed fully at the time of the request.

And that’s hard.

In my experience, a software product is rarely ever done, and “Is it done?” by itself is rarely ever a suitable question.

Individual work items are completable, but false positives arise when:

  • Team members don’t fully understand the work item
  • Team members don’t fully read the work item
  • The work item doesn’t fully document the scope of work to be completed
  • A required work item doesn’t exist
  • A completed work item doesn’t line up with company objectives
  • A team member lacks humility or courage

A great developer strives to understand what “done” means and sets necessary expectations, ideally without using that vague developer speak that always seems to frustrate higher-ups.

In the same vein, a great developer goes above and beyond to exceed expectations, certifiably completing tasks, even when confronted with adversity.

Or we just lie about something being done and stay up for the next 36 hours knocking it out before anyone notices. :) 

What’s your definition of “done”? 

Toastmasters for the software developer

In this video, I, or rather, RealCoder79, give a short speech at Greenville’s Metro Toastmasters about how Toastmasters can benefit software developers.  

Toastmasters, if you didn’t know, provides “a supportive and positive learning experience in which members are empowered to develop communication and leadership skills, resulting in greater self-confidence and personal growth.”

Being that I killed www.realcoder79.com recently, I thought it’d be a good idea to give some of that old content a new home. 

Enjoy!

A Review of Devart’s Code Compare Diff Tool for Windows

Hi, my name is Alex, and I’m a power hungry software developer.  Devart’s Code Compare diff tool for Windows is power. By our powers combined, I am a powerful software developer. 

How’d we get here? 

My adventures with code comparison tools started the first time I needed to fix a merge conflict in git. 

Historically, in TFS land, I’d just use Visual Studio’s built-in diff tool (vsdiffmerge.exe under the hood).  Vsdiffmerge is a great 3-way text merge tool, but that’s the extent of its functionality. 

Even if you use git, vsdiffmerge might be all you need– as long as you never use any of git’s advanced features from the command line. 

But, like, who lives in that world

Yes, it’s possible to configure git to use vsdiffmerge. But it’s soooooooooooooooo slllooooooooooowwwwwwwwww and awkward!  

A co-worker suggested P4Merge, but…Perforce, amiright? I’d later come to discover that P4Merge was a pain to download, a pain to install, and doesn’t do directory comparisons. 

Did I mention I needed the ability to perform directory comparisons as well? 

Enter Code Compare

I’m in love.  Code Compare now sits among a well-guarded list of tools that I’ll take to the grave. It’s a seriously powerful diff tool, and without Code Compare by my side, I’m often reduced to a slow, inefficient blob of a software developer. On more than one occasion, Code Compare saved my sanity. 

Naturally, it satisfies all of the code comparison tool requirements I started with:

  • Integrates with git and Visual Studio (and operates as a standalone tool)
  • Directory comparison
  • 3-way compare *
  • Easy to download and install
  • Lightweight & fast
  • Looks great

* requires pro version

I guess that’s not a lot to ask. I didn’t realize what I was missing, though. Code Compare does so much more than I ever expected from a code comparison tool.

Honestly, it’s embarrassing that I haven’t tried 3rd party diff tools until recently.  

Getting up to speed

If you’re like me, you’ll install Code Compare, fire it up, and fumble your way through the interface. That works up to a point, and most developers here will probably figure out the basics quickly. 

Eventually, you’re going to want to check out their documentation

While their writing style can be difficult to understand and lacks many images, it’s still worth going through to get a better understanding of how the product works. 

Here are some great places to start:

Nothing is perfect

I see no point in rehashing the already well-documented feature list on Code Compare’s website. 99% of the time, it does what it’s supposed to do, and it does it very well. 

Along the way, I’ve taken note of a few things to consider when deciding if Code Compare is the right tool for you. I’m also hoping Devart will see this and step up their game a bit. 

  • Code Compare has a search feature, but it only looks at the content inside files. I sometimes want to find a file by name. Resharper does this very well with their CTRL+T feature. 
  • It can be hard to see how blocks line up from left to right when there are a lot of lines on the screen. 

    I would love to see a highlight effect when you hover with your mouse over a block of code or one of those lines. Highlighting the block and the line as you navigate the changes would clarify what Code Compare is trying to convey. 

  • It would be great if Code Compare would let me select a subset of a block and copy it to the other side. In the screenshot below, I’ve selected the first six lines within a block that I want to copy to the right. Code Compare seems to know what I want to do judging by the glyphs I pointed out with the red arrow. However, clicking the tiny button to copy that selection to the right still copies the entire block, not the particular selection I made. 

    The only workaround is to copy those six lines to the clipboard and paste them on the other side. 

  • And speaking of those glyphs; Look how small they are! They’re so tiny that trying to click them can be frustrating. 
  • While Code Compare is incredibly powerful, it falls short of having every feature that some other code comparison tools have. Namely BeyondCompare, WinMerge, and windiff (yes, it still works). In all fairness, P4Merge has a few tricks up its sleeve even. 
  • By far the worst thing about Code Compare is that Devart has placed the product in maintenance mode. In other words, they’re not actively working on that product.  Their developer team is working on other products, but they do plan on adding VS 2017 support. 
  • This isn’t a complaint, but, for whatever reason, Devart has had a difficult time getting Code Compare listed on Wikipedia’s Comparison of File Comparison Tools. I’ve witnessed it myself. Devart added Code Compare and it their entry was almost immediately removed. I tried adding it back and got flagged as a spammer on Wikipedia. 

Please, tell me I’m wrong

If it’s not completely obvious, I’m relatively new to 3rd party diff tools. Did I neglect to mention your favorite Windows diff tool? Have I been fair with my review? Should I review another diff tool? 

Diff tools ain’t hard, bro — I’ll master all of them if I have to. 

 

Getting started with Aurelia on Windows 10

The video demonstrates what I had to go through to get Aurelia v0.10.1 working on Windows 10.  It’s a pretty bad video, but you might learn something if you suffer through it.

Nothing to sugar coat here… The video below wasn’t properly planned and isn’t awesome in my opinion. But I’m releasing it anyway. Surely, it will help someone. 

…Continue reading “Getting started with Aurelia on Windows 10” [Getting started with Aurelia on Windows 10]

Every day regular expressions

Was doing some work today that just happened to involve some very basic, but very power regular expressions, and decided to make a quick, unscripted video to demonstrate a few techniques I use all the time.  I hope benefits someone out there who doesn’t realize the immense power that comes with understanding a few simple regular expressions.

 

Vstest says, “Path too long”? I fix.

A weird thing started happening on my TFS build server recently. When it came time to run the unit tests, the build would fail with:

The specified path, file name, or both are too long. The    fully qualified file name must be less than 260 characters, and the directory name must be less than 248 characters.

For reference, here’s the standard testing step that was failing.. Note the “Test Assembly” parameter.. Nothing out of the ordinary there.

So I dug in.. …Continue reading “Vstest says, “Path too long”? I fix.” [Vstest says, “Path too long”? I fix.]