Showing posts with label software. Show all posts
Showing posts with label software. Show all posts

Sunday, February 5, 2012

Complexity Syndrome

Is it just my perception, or does our very language spite us sometimes?

America was founded on hard work.  Hard-working Americans is a byword in the current political rhetoric.  In professional settings people are constantly called upon to quantify their efforts: hours worked/billed, units produced, total sales, customers served.  When making decisions, people strive to be objective.  All of these words have a positive connotation.

We know about smart work too, but the positive connotation is less intrinsic.  “An honest day’s work” typically refers to hard labor, getting your hands dirty, doing something repetitive.  There is something in our culture, in our collective subconscious, which tells us to work hard and just get it done.

Work must be completed.  The project must be finished to be judged qualitatively, I do not dispute that.  The misconception that I run into too frequently is: “Harder (or more) work is better.”  This is simply untrue.  Smart (or elegant) work always trumps harder (or more) work.  This is not a new concept, obviously.

So how does that relate to complexity?  The last software consulting firm I worked for had no internal qualitative controls.  All compensation and bonuses were tied to quantitative measures (how you would do it otherwise I do not know, but it exacerbated the issue).  There were a great number of projects that were losing money, because they could not pass functional testing.  Fixes were difficult to manage because the work-product complexity was high.  What I eventually understood was that when I work more or harder, the output is more complex and less elegant.

Complexity is not a bad thing
.  Great value is added through complexity.  Extra features that make software (and tons of other things) useful always add complexity.  Furthermore, complexity and elegance are not mutually exclusive.  To build a sustainable highly-complex system, it must be designed in a highly-elegant manner.  I think that most of you can agree with this, at least in principle.

So where do the wheels fall off our logic train?  The rhetoric, the focus on quantity, trying to squeeze every last dime out of clients because you are billing them hourly, all of these things force the wrong paradigm on workers.  Entry-level and junior workers are especially susceptible, because it takes a lot of time to see the quality-forest for the quantity-trees.  I worked with several guys who were proud of how much code they wrote, not how well it worked or how sustainable it was.

The end product was that complexity was actively rewarded while elegance was passively praised, or dismissed altogether.  This is what was hurting us, and leaders have to take an active role in promoting elegant solutions in their organizations to fix the problem.

Our the management’s response to the problem? Work hard and just get it done.

Friday, January 20, 2012

Pain v. Pleasure



Over the past several years, I have come to the realization that I think about different bodies of work in vastly different ways.  While working for i3solutions, which mainly ran fixed-price, waterfall-style projects, everything was about the specification (and rightly so).  The most important questions we asked ourselves were:


1. Does it meet the requirements as stated?
2. Did we hit all of the delivery dates?
3. Did we fulfill all of the terms of the contract?


All of which are completely valid, necessary questions.  However, focusing on these types of questions often puts blinders on software developers.  The focus becomes the pain-points, because these are the questions that must be asked for the company to avoid customer strife and legal pain.  Answering these questions positively does not always avoid the pain.  A disgusting project once went on for six months after user testing even though it met the requirements, because it didn’t actually fulfill the base need.


While working for several start-ups and on several pet projects, I thought in an almost completely different mindset.  There was always a specification and deadlines, but the focus was shifted.  We continually asked ourselves:


1. Does the product meet the actual need?
2. Is it easy and enjoyable to use?
3. Are we the best solution on the market?


Again, these are completely valid questions.  While harder to quantify than the first three, these questions are necessary because they serve as a litmus test for the project’s experience.  The focus here is on pleasure-points, for both the business and customer.  However, none of these facilitate project completion, and can lead to evil rework.  I am currently on the fourth major iteration of a pet project, all because each previous version failed one of the above questions.


So what have I learned? Most people I have worked with are violently of one philosophy or the other.  Truly dynamic creators believe in the art of balance, and that is what I want to improve in myself.  Where I can see both points clearly, the end result is better.


Have you observed these mindsets in your projects or yourself?  Have you ever worked on a project that was completely one-sided? How did it turn out?