One of the biggest challenges for companies in this day and age is the high cost of software development. Development resources cost a company the same amount of money regardless of the competence level of the engaged development resource. Hiring managers are faced with the responsibility of recruiting competent developers for the Development managers.
Development manages expect resources than can successfully deliver quality code for the solutions they are tasked with delivering for the company’s clients. How can the hiring manager qualify perspective candidates for the development manager while controlling the cost of the company’s software development commitments?
A trend today is to present the candidate with a coding problem during the interview process and then assess the results. The “FizzBuzz Quiz” is a popular interview coding exercise. It tests the candidate’s ability to accept a development task and produce a viable result. The result is then analyzed for the correct result and the candidate’s thought process when creating the task deliverable.
The problem in this scenario is what constitutes a “Correct” result and thought process that created that result.
The FizzBuzz Quiz Question:
“Write a program that prints numbers from 1 to 100.
For multiples of three print “Fizz” instead of the number
For the multiples of five print “Buzz”.
For numbers which are multiples of both three and five print “FizzBuzz”
What constitutes a successful assessment of the candidate being interviewed using the FizzBuzz Quiz?
This seems like a simple question to answer: “The Correct Printed Result in the Most Efficient Manner of Course”.
Maybe not! Let’s remember what the stated goal from the company’s perspective is of this exercise: “To Manage the High Cost of Software Development”. Does simply “The Correct Printed Result” manage the high cost of software development?
It is a common held belief that as much as 80% of the cost of a delivered application or assembly module over its lifetime is not in the solution delivered but in the maintenance of the software entities over the Software Development Life Cycle (SDLC). The deliverables have no life cycle if they do not function in some acceptable fashion.
The high cost of the SDLC is in code that violates Object Oriented Programming (OOP) best practices. Design principles, development patterns and code standards exist for developers to implement quality deliverables for their Client that have a lower Total Cost of Ownership (TCO) and reduces the cost of the software over the SDLC.
FizzBuzz results analysis questions that meet the stated goal of the hiring and development managers:
- Did the candidate demonstrate a crystal clear understanding of the task?
- Did the resulting solution meet the defined task criteria?
- Did the construction of the code clearly define the intent of the code to anyone viewing the solution, anyone developers and non-developers?
- Did the candidate use useless comments to describe the code when the code itself defined the intent?
- Did the code not define the intent well enough so that comments were warranted?
- Did the code demonstrate that the developer understood the language tools available to create an efficient solution?
- Was the code reasonable elegant?
- Did the developer’s solution refactored to comply with the Design Principles
- Did the Method(s) comply with the Single Responsibility Principle (SLP)
- Did the Method(s) comply with the Open/Closed Principle (OCP)
- Did the Method(s) comply with the Responsibility and Dependencies Principle (RDP)
- Did the Method(s) comply with the Test First Principle (TFP)
- Did the developer’s solution refactored to comply with Code Standards
- Did the Solution comply with proper Naming Conventions?
- Did the Solution implement a proper Namespace?
- Did the Solution use proper Access Modifiers?
- Did the Solution comply with proper Class conventions?
- Did the Class(s) comply with Code Readability guidelines?
- Did the Method(s) comply with proper Method guidelines?
- Did the Class(s) comply with proper Property conventions?
- Did the Method(s) comply with proper Variable conventions?
- Did the Class(s) comply with proper Helper Method guidelines?
- Did the Class(s) comply with proper Exception Handling conventions?
- Was the Test Driven Development process used in the developer’s solution?
- Was there a Test Assembly provided?
- Did it use the AAA Test Method pattern?
- Were the assertions robust enough to test the result completely
- Where “Sad Path” tests provided to exercise Exception Handling?
At first glance all the above questions seem to be a Total Overkill! If the success criteria is simple to assess the developer’s ability to solve a code assignment you would be absolutely correct. If the success criteria are to engage a developer who understands TCO and the SDLC costs to their Client then absolutely not overkill.
Every question asked above goes to the following deliverable benefits:
- Creates a testable solution Today, Tomorrow, Next Week, Next Month and Next YearReduces tight coupling of dependency components
- Reduces the cost of debugging the initial development effort
- Aids to quick understanding of the Intent of the Software Entities by maintenance developers
- Identifies dependency changes that would cause regression testing issues and cost
- Adds to high cohesiveness of Software Entities
- Creates readable elegant code in small code blocks than have a single purpose within the delivered solutio
- Enables modification of the result without the risk of breaking the calling display results method. “Fizz” and “Buzz” could be changed to “Fun” and “Time” without any modification to the display results code
- Future change requests costs are lowered due to the ability to change only the required code elements: “Every has a Place and Everything in its Place”
- Single automated validation of solution when changes are implemented will reduce the cost of change
- Refactoring of consuming client modules can be implemented without the fear of breaking something unknown to the new developer
Obviously the FizzBuzz task is a simply example of what is a very valuable development process in Enterprise Software Development. This example does represent an overkill if the only criteria is a proper print to console result but the stated goal in to reduce the high cost of software development and to that goal this is a valid discussion.
Let your Thoughts be Read. Register and Leave your Comments: Pro and Con
The following two tabs change content below.
I am a Principal Architect at Liquid Hub in the Philadelphia area specializing in Agile Practices as a Certified Scrum Master (CSM). I use Test Driven Development (TDD) and Acceptance Test Driven Development (ATDD) with Behavior Driven Development (BDD) as my bridge to Agile User Stories Acceptance Criteria in a Domain Driven Design (DDD) implementing true RESTful services