Sunday, December 28, 2008

Two 19th century truths about selling your ideas

From two Frenchmen who lived in the 19th century comes

"...everything has to come in its own time in order to win its way. A solution given lightly, prior to the complete elucidation of the question, would be a retarding force, rather than a means to advancement."

Allan Kardec (1804-1869)


"An invasion of armies can be resisted, but not an idea whose time has come."

Victor Hugo (1802-1885)

Thursday, October 23, 2008

Treating Test-Driven Development as a matter of technique

At the heart of good development is good programming and at the heart of good programming is the ability to think through how things are being done and what needs to be achieved.
Thinking through how things are done is a lower-level concern, involving the nuts and bolts offw how the function integrates with the surrounding code, mostly around the area of exception handling, mapping of functional domain to the programming language, and usage of the correct system calls.
Thinking through what needs to be achieved is a higher-level concern, presumably starting from some sort of requirements specification, which governs the test inputs and result expectations from those tests.
Once the “what” and the “how” are combined with a certain skill, one should have a product that does what a user expects without exploding while at it.
Test-driven development (TDD) is an ideal solution to the “what” and a significant help to the “how”. Writing tests first inevitably forces you to understand what needs to be achieved, model it in terms of method calls, and to define the test inputs and outputs. Less churn in the definition of what methods are supposed to do is translated in less churn modifying the code implementation to match the method definitions.
Technique versus choice
Despite significant literature on the subject, TDD is often approached as a matter of personal choice. The argument invariably lands on the ditch of unproven results and how teams have succeeded in developing products using a write-first-test-later approach. For TDD supporters, here are a couple of arguments that should help tow the discussion out of the ditch and give it a second chance.
The cost argument against TDD is rooted at the difficulty to move fast while coding volatile areas of the system, invariably surrounded by statements such “this code will change next week, and it will cost us more to fix the tests”. The problem is, while this argument is perfectly valid at discrete points in time, it is prone to misinterpret the cause of volatility as intrinsic to the system rather than to the phase of development.  Absent a formal understanding of the software development phases, technique is replaced by individual judgment as to whether TDD is right for the project, rather than as to whether it is right for the phase of the project.
IRUP to the rescue
In general, we all acknowledge that a product under development matures over its course, with the nature of changes being smaller and smaller over time. A quick glance at the IRUP map of disciplines and phases moves the discussion from general acknowledgement to specifics, shining a revealing light – more like a hand-draw red rectangle - on where TDD is harmful and where it is necessary:
Elaboration, when coding helps design…
During the elaboration phase, while the analysis and design work is reaching its peak, it is counterproductive to try and write tests first. During this phase, the entire team is after the “unknowns”, such as whether a design choice can scale or whether a new technology supports certain features. There is little point in hardening the quality of the code used for these exercises while concepts are being vetted.
Think of most of the code built during this phase as the prototype that should be thrown away once the key design concepts are validated or proven.
Construction, when coding follows design…
During the construction phase, on the other hand, the bigger decisions were already made and the design will be moved from high-level to actual code. Not doing TDD has the more obvious effect of risking miscalculating the time required to automate the unit tests, often followed by the schedule-constrained decision of skipping test automation altogether.
The less obvious, and far more nefarious, consequence of writing the code before tests is that it inverts the flow of design from the “business modeling”, “requirements”, “analysis & design” chain. Up to that point, the system design is being driven from end-user needs to final product, but when developers skip TDD during the construction phase, the flow goes from code to end-user, premised on the assumption that the developer can short-circuit his own design decisions to match the original design direction.
For a skilled developer, the result is just additional work in the form of “sculpting” the results, iterating over what should be done (the original design) and the output of what is being coded. For a less skilled developer, the results is often a mismatch between the code and the original design.
There are are individuals who can do this in a single iteration, but usually this happens when the developer is both designer and programmer for the system.
As with any framework, IRUP is not a golden rule, but its matrix of phases and disciplines offers a temporal and conceptual separation that supports better decisions as to when and where TDD should be followed. In the end, it should still be a matter of choice, but not a philosophical one.

Monday, September 29, 2008

Unionized product development

imageThis is not what you are thinking, I don’t want to form a union. In fact I wouldn’t want to join an union even if someone bothered to form one.

However, in a large organization, whatever power is not lost to organized labor is often lost to disorganized operations, diluted through excessive, and often unnecessary, divisions of power through the ranks.

Separating function by excellence and capacity

I think specialization is a wonderful thing. Focusing on a particular skill can transform a merely competent engineer into a good engineer, if not a great one. If someone is excellent at, let’s say, database development, and I mean walking-over-the-water excellent, it is counter-productive to try and make that person spend part of his time dragging himself through product planning meetings. Assigning database development to him just makes sense. That is the “excellence” criteria.

I also have no problem with delegation of responsibility spawning from an overworked function, where a single person clearly cannot execute both tasks. While separating the function, I tend to prefer *delegating* the function from the overworked person, rather than *separating” the function, unless the receiver of the new function is clearly excellent at it and can operate virtually independently. That is my “capacity” criteria.

Favoring delegation over separation tends to favor a democratic decision process over a distributed one. In a democratic process, one or few people make decisions after consulting subject matter specialists. In a distributed process, there are endless meetings because no one has the skills to know what should be done, but plenty of other ‘deciders’ to scatter the blame when the inevitable failure ensues. There should be no confusion between a centralized decision process that is transparent to many with a distributed process carried out by many.

Arbitrary separation, or “the unionization”

A distributed (or diluted) decision power is often the result of arbitrary division of responsibilities, where the functions are separated without meeting either the “excellence” or the “capacity” criteria. It is interesting to observe how otherwise wilful colleagues suddenly fall in “union” mode when placed in a team setting like this, avoiding making a decision they are clearly capable of because the responsibility owner is the one who is assigned to make it. Let it fester, and a team can be thrown back to the hellish days of GM assembly lines being shut down for a day because the guy who screwed the lugs of the left-front wheel called in sick.

When you need a better player, not a new one

If you ever watched a rally race (highly entertaining,) you observed an optimal separation of function: one person drives, the other navigates. Navigation says “hard left”, driver turns left…hard.

Now imagine that sometimes the driver misses a shift or two. Is it better to assign extra practice to the driver or move the navigator to the backseat, install a clutch pedal on the passenger side, and introduce a secondary driver that can focus only on shifting gears? It shouldn’t take more than a rollover or two before someone can answer that question.

What if I have many players, but not excellent ones?

In my experience, a team leader should make a point of making each of them excellent at something. If you have someone inexperienced, choose something small and make him excellent at it. And by “make him” excellent, I don’t mean assigning the responsibility for something and hoping experience will make up for it. What I really mean is “train, orient, and demand results”, which implies you mastered the skill yourself or have someone onboard who has. Don’t think “coaching” here, coaching is but a technique and a wrong one depending on the occasion. As a colleague and great team leader once wrote: “don’t be a team hugger, be a team leader”.

Think drill sergeant minus the cursing. Once your team members start to fall in one area of excellence or another, you should need less team members, be able to cut down on your communication matrix, and focus on delivering results versus keeping the illusion of collaboration through communication chatter. The team members you must lose will have marketable skills to bank on, not to mention that while learning to be excellent at something they will also have learned how to become excellent at anything they choose.

I used to be upset about training someone just to see him taken away to work on another project, but come to think of it, after shipping a successful product, the next best, and more frequent, accomplishment in my career has been the drilling training of green new hires that were later disputed by multiple teams.

For managers, I think this means approaching task assignment with a tighter grip on the deep technical skills available on the team and the skills required to complete the project, focusing on keeping the team as small as possible. Someone with excellent social skills may not always be the better choice over that zOS-expert-perennial-jerk in “B” isle; a jerk can always be told to be less like himself for three months, the smiley face cannot be urged to absorb years of experience before the project begins. The alternative? Forming a little “team-union” of two.

Thursday, September 18, 2008

Passion for the business or for the craft?

imageI used to be an avid soccer fan many years ago, an affection punctuated by the rivalry between two local teams in my home state. That rivalry extended in a good-natured way to the relationship between my father and I, each siding with one of the opposing teams.

His team, the Corinthians Sports Club - for some obscure reason I must cheerfully point out to be in terrible shape nowadays - used to have this goalkeeper, Ronaldo, which only his team fans could stand. They adored the guy, a young kid who progressed through the junior divisions all the way to the professional team.

He was not only good, but very passionate about the club, as we call the privately owned companies that control the soccer teams in Brazil; in the field, he would angrily chastise anyone who did not carry their weight during practice or, even worse, during official games, when he often verbally assaulted whoever he perceived as a slacker.

At one time, with the bonus payments lagging a couple of months and the team owners starting to talk about renegotiating some of the salaries, many players started to publicly complain and threaten to strike. The news organizations, ever eager to capitalize on controversy and knowing that Ronaldo would not mince words, asked him about the situation during an interview, to which the answer came in a mixture of reason and his characteristic zealotry:

People are complaining about late bonuses and giving interviews on how they also have to make a living like anyone else. Now you walk to the parking lot and see what they are driving [mentions of expensive car brands]…the executives will sort this out, but the players need to understand that there are days wearing the Corinthians’s shirt should suffice.

Much later in his career, a couple of years past his best years, Ronaldo, who vowed to retire playing for the team of his youth, was replaced by a younger goal keeper. With a few more years in him - and with the bills still coming – Ronaldo took on less glamorous stints on smaller teams, ending his career on a melancholic note: wherever he went people knew he was playing for the money and not for his team of choice.

Passion for the business

Ronaldo has proven with his history and rhetoric that performance, passion and compensation are tightly interwoven, if not as cause-and-effect variables, at least as expressions of each other. A high-performer is bound to draw better compensation and develop the kind of passion expressed by Ronaldo, an almost divorced view of work and compensation, not because they are actually divorced, but because after a certain limit compensation alone cannot motivate a high-performer.

I can appreciate Ronaldo, professional player, demanding performance from colleagues in the field, but I did not like Ronaldo, loyal shill, exhorting people to wear the team’s shirt as a form of compensation.

I use the above story as a counterpoint to situations where leaders demand a passion for the business. My first objection is that boundless enthusiasm cannot be demanded; maybe fostered, but not demanded. It follows that people who demand a passion for anything often do not understand what it means to be passionate about it.

Too much to love

When the business is just too big to be understood, it is difficult to love it. It doesn’t help matters when the bottom layers are broken down into other layers, further increasing the distance.

And when it is not the distance, it is the confidentiality, and when it is not the confidentiality, it is the business being used to justify practices that even the business’s own mother couldn’t love. But enough of my argument, the business is what is; and that is how I started to define the business: as the part of it I can actually influence.

I tend to focus more on the mission of the two or three layers above me, which narrows it down to people I actually work with and see it in the flesh every other day. To me they are like temporary family: I do as much as I can for them and give them a hard time now and then when I don’t think they are at the top of their game.

With the right alignment of the planets, a mixture of clear speak from line management and working very close to the people who will actually use my work to help their business, I am very enthusiastic about it.

Passion for the craft

Compensation? I like to see it as a form of sponsorship, where I am freed to do what I really like on a regular basis without being distracted by checks bouncing at the end of the month. My colleagues tend to appreciate how I do things and the things I can still do for them, not caring much for the teams I have joined in the past. The difference is subtle: I follow a tangent on Ronaldo’s model, letting the work be my own compensation with the caveat that *actual* compensation must stay above a level where I do not have to worry excessively about it.

This would be my unsolicited bit of advice to any leadership team: promote a passion for the craft rather than demanding a passion for the business. That is empowerment over chastisement. People who understand their craft are more likely to be enthusiastic about it, when people discover they can learn something new and become good at it, they are inspired; with any luck, even passionate.

When people are enthusiastic about what they do, and that boundless enthusiasm is backed by technique rather than unchecked madness, customers tend to love it too. And when that feeling of elation comes out of succeeding at a task or beating a competitor, chalk one up to a job well planned and executed, not to passion for the business.

Ronaldo, for all his good intentions, mistook sponsorship for loyalty and betrayed what should have been love for the sport, not for his employer.

Monday, July 21, 2008

Bill Gates: Let the engineers rule

Quote from Fortune Magazine on the four traits Microsoft took from Bill Gates.

Let the engineers rule

Microsoft employs about 30,000 programmers among its 90,000 people. In operating groups engineers are involved in every major decision. Not only that. engineers typically get paid more than businesspeople. The geeks also get lots of toys: Microsoft's $8 billion computer science R&D lab is the world's largest. At a recent executive retreat. Gates said he thought every great businessperson at Microsoft should cultivate at least five close relationships with engineers.

I like him better already :-)

Monday, June 30, 2008

Compensate me not

Interesting side note on the latest edition of Fortune Magazine:

Did you know that a little financial compensation can actually make a person less motivated? Researchers at an Israeli university compared the standardized test results between students who were paid 2 1/2 cents for every right answer and students who were paid nothing. The latter group scored higher. The reason? Your brain approaches altruistic tasks with only the desire to feel as though you’ve helped, whereas 2 1/2 cents isn’t enough to satisfy someone’s self-interest. Likewise, you’re more likely to convince friends to help you move if you don’t pay them – unless you pay them at least the equivalent of a professional mover. (Pizza and beer, though, are fine.)

Jia Lynn Yang

Wednesday, June 18, 2008

Your career, death valleys, and ... nonlinear programming

On the trail of science and corporate analogies started with "Using magnets to understand the corporate culture", I wanted to explore the similarity between mathematic optimization and corporate culture.

Traditional non-linear algorithms can end up in local minimums, or "death valleys", like the ones highlighted in "white".

In nonlinear programming, the objective is to determine the minimum value for an object function within a set of constraints. Some of the most popular techniques (at least back in the early 90's when I studied them) involved a starting point on the surface of the constrained solution space and, from those coordinates, a slight step towards a new set of variables that resulted in a lower function value.

There is a bit more to it, but when the solution space is convex, you can repeat the series of small steps continuously, achieving ever lowering function values until you reach the variables that result in the minimum value for the function.

A convex space is a solution space where you can connect all points within the space using a direct line that never leaves the space. In simpler terms, the interior of a sphere is a convex space; the interior of a U-shaped pipe is not.

Finding a solution within a non-convex space is quite more difficult because the algorithms that lead to the next set of variables favor immediate decreases in the value of the target function. When applied to a non-convex space, the conventional solutions may lead to a "local optima" point from where there is no escape. In other words, the algorithm "cannot see" a better solution because all the immediate alternatives look worse than the current one. In the illustration, the variables of "Quality" and "Execution" time on a hypothetical "Cost" function have "local optima" points highlighted in white, whereas the global minimum is highlighted in yellow.

What it means to you

This analogy works for an entire company or for a single individual, but think of how many times in life we settle for a "local optima" situation where we feel lost and without direction, with each step pointing to a potentially worse situation.

Think of how many times choosing the best short-term direction can lead you to a comfort zone from where it is difficult to escape. I call those zones "death valleys". Think of it: not leaving a dead-end job because your next evaluation may get hurt or because that long awaited promotion may take an extra couple of years; not taking that class because you can get one more assignment done and improve your chances of a better evaluation.

I know we are not points searching for a point of "local optima" in a 3D chart. The solution spaces are far from convex. Even worse, they are not static and are affected by our presence.

Whereas finding a better "local optima" or the elusive "global optima" in the realm of nonlinear programming requires exhaustive search, in real life it requires curiosity and friends who can tell you about what different parts of the chart look like.

Better solutions require different starting points

Knowing about the work of others gives you access to different starting points from where you can reach a better solution. Whether a "better solution" means a more fulfilling career or an improved work life balance, the choice is yours.

Of course, just knowing about a better solution is not sufficient, as the effort required to get there may not be worth the benefits. As an example, knowing that an SAP consultant makes twice your salary may not be a sufficient motivator to make you divert time from your family to study SAP skills in the wee hours of the night. Once again, the choice is yours.

Having others knowing your work is equally important as your peers can use their own vantage points to tip you into a better solution. Good mentors are great assets there.

A pretty chart (it is pretty, isn't it, took me a while to convince MS-Excel to play along) and some words cannot motivate anyone, but they can plant a seed. Whether you take on an off-chance skunkwork project, take in a couple of mentees, start that hobby, there are always ways to start leaving an uncomfortable situation in work and life.

Tuesday, June 10, 2008

Declared exploiters, your best ally in the workplace?

Robert J. Ringer, in his award-winning book "Winning through intimidation" divided people in his business life in three main categories:

  1. The ones that openly manifested their intentions of exploiting those around them under all circumstances, but would continue helping him for as long as he was still an asset to their agenda
  2. The ones who claimed to be his friends, but would exploit him on every turn.
  3. The ones who declared themselves his friends and genuinely didn’t want to harm him, but would do so when forced by the circumstances.

Robert purged the book from mentions about his personal life, reason why he probably didn’t list a fourth group of people would not take advantage of others under any circumstance, such as family members and close friends.

Through the book, Robert was quick to point type #1 as his favorite kind of business associate and boss, because being successful with their no-nonsense philosophy usually meant they were very competent and also objective in rewarding those who could help them be even more successful.

Although he had no kind words for type #2, it was people in the last group (“the type #3s”, as he called them) that received his harshest criticism, in that their initially genuine intentions disarmed him of his natural defenses and invariably led him to some sort of financial loss.

Thursday, May 29, 2008

Democracy meets Survivor meets kindergarten

On the bright side, at least for an incident involving the state of Florida and kindergarden students, no one was tasered:

Kindergartner Voted Out By Students

Fantastic attitude by the 2 kids who voted against the extreme poor judgement of their teacher in calling the makeshift referendum.

At five years old, and under the extreme circumstances of peer and leadership pressure, they have shown courage and judgement that many people will not muster in their whole lives.

Monday, May 19, 2008

Clean restrooms, Quality and "good enough"

My parents were visiting us a few weeks ago. As a result I ate at restaurants more than usual. In between waits for meals, I had the chance to visit many restrooms in various degrees of cleanliness, ranging from "I could live here" to "I'll use a paper towel to touch anything".

It is curious how my behavior while washing hands changed based on that state of cleanliness. Facing a spotless sink and, on occasion, listening to ambient Italian music, I did pick an extra towel after washing my hands, but to dry up the faucet before I left. In the absence of anyone in the room, it was not a case of peer pressure. I suspected early stages of obsessive compulsive disorder and left.

Later it came to me: Quality breeds Art and Art is very personal. When I witness a job excellently done, I immediately trace it to a rare individual; while I stand in front of the object, I am trying to imagine the number of countless expert decisions made by someone with skills developed over the years.

Don't think I am crazy - restroom analogy notwithstanding - but I believe Quality is absolute; it has the same power in a restroom, in a book, or on a painting.

Now I have an anonymous janitor to thank for reminding me that our work can be more than something attached to an e-mail or placed on a shelf. It reminded me that we cannot be perfect at everything we do, but that we must pursue perfection in at least some of the things we choose to.

"Good enough?"

With enough Quality, part of our daily work becomes Art, and Art speaks through time and space on our behalf. It inspires, it educates, it gives meaning. It can even motivate strangers to do unexpected good.

Facing the endless assault of the "good enough" message promoted by our hurried western culture, I think more of us should take upon ourselves to make an impractical stand against it every now and then. In the same way people tell us we should exercise at least 3 times a week, shouldn't we pursue perfection while executing a mundane task at least once a day?

Even sworn pragmatists should appreciate that, on Monday morning, the delivery person drops a package at his door with enough good in that "good enough" box hammered shut before the weekend.

Monday, April 28, 2008

Water, air, Porsches and servers

Just read today about IBM releasing a new series of water-cooled Web 2.0 servers.

Over 30-years separate these two technologies, one rooted in the main-frame dominated 70's and the other sparsely tied to a collection of technologies representing everything that is modern in the late 2000s.

by pvera

Ironically, a parallel story started at about the same time, in 1973, when the iconic Porsche 911 came out with an air-cooled engine, an anachronism when all major manufacturers had long turned to the more efficient water-cooled engines.

Later, in 1995, the pressure from ever more powerful competitors forced Porsche to abandon the air-cooled engines to the dismay and anger of its fans.

I found it interesting to observe the power of peer-pressure on the way both industries dealt with cooling capacity, one trying to abandon water for fear of being labeled obsolete and the other clinging to air - and obsolescence - for fear of losing its customers.

Tuesday, March 25, 2008

Passion, apples, and vision

Fortune Magazine broke cover on its list of most admired companies for 2008. Apple took top honors on both US and World rankings. Some excerpts from an interview with Steve Jobs:

"We don't get a chance to do that many things, and every one should be really excellent. Because this is our life. Life is brief, and then you die, you know? So this is what we've chosen to do with our life. We could be sitting in a monastery somewhere in Japan. We could be out sailing. Some of the [executive team] could be playing golf. They could be running other companies. And we've all chosen to do this with our lives. So it better be damn good. It better be worth it. And we think it is."

It was certainly the most inspired point of the interview, if only slightly more than his views on downturns:

"We've had one of these before, when the dot-com bubble burst. What I told our company was that we were just going to invest our way through the downturn, that we weren't going to lay off people, that we'd taken a tremendous amount of effort to get them into Apple in the first place -- the last thing we were going to do is lay them off. And we were going to keep funding. In fact we were going to up our R&D budget so that we would be ahead of our competitors when the downturn was over. And that's exactly what we did. And it worked. And that's exactly what we'll do this time."

Wednesday, March 19, 2008

The Anthill, collective wisdom, and survival

In a typical anthill, foraging follows a pattern where the ants walk at random, stumble upon food, and return whatever they can carry back to the anthill. On their way back, they leave behind a trail of pheromones to attract other ants. Soon, a somewhat ordered line of ants can be found hard at work between the food source and the anthill.

Ants know a thing or two about cooperating with each other.

Now just imagine what would happen if ants stumbling upon food did not leave a trail of pheromones behind, or if the other ants were not to follow the trail.

That is the predicament of many large companies who have not embraced the internal deployment of social software within their firewalls.

Just the other day I read a thread where web 2.0 on the enterprise was described as the latest fad in the corporate world. I responded with a long argument about the benefits observed in the deployments within our company.

I should have talked about anthills.

Thursday, March 13, 2008

My employee's opinions are his own; the GM spat

I always wondered about how effective are blog disclaimers along the lines of "These opinions are my own and do not necessarily represent my employer's point of view".

It is easy to dismiss one lone voice inside the walls of a cube farm, but look at what happens when the press makes a piñata out of GM CEO Rick Wagoner over a comment made by GM chairman-turned-blogger on the topic of global warming:

General Motors Chairman Bob Lutz may think that global warming is "a crock," but GM CEO Rick Wagoner made it clear at a press event Tuesday that GM doesn't share Lutz's views. Instead, Wagoner believes that global warming is a very real issue facing the planet and that automakers must take action.
"The comments weren't coming out of our company," Wagoner told The Detroit News at the event.

Wagoner continued by saying that average temperatures around the world are on the rise, and while there is no definitive evidence linking cars to global warming, it's GM's goal to reduce its vehicles' CO2 emissions.

Lutz defended his stance on global warming on GM's corporate blog last month, saying "My beliefs are mine and I have a right to them." However, Lutz insists that he shares GM's stance on "the removal of cars and trucks from the environmental equation."

Take note, Bob Lutz used his blog to address the negative media buzz.

Wednesday, March 05, 2008

"The science of experience"

Excellent article on Times Magazine, titled "The science of experience".

There is an interesting experiment with two nurses, one with 2 years of experience and the other with 25. They tend to a robotic patient in a simulated environment, the junior nurse nearly kills the patient; the senior nurse moves across the run with far more confidence and speed, actually killing the patient in a shorter period of time.

A quote to motivate you reading the article:

Ericsson's (Dr. K. Anders Ericsson) primary finding is that rather than mere experience or even raw talent, it is dedicated, slogging, generally solitary exertion — repeatedly practicing the most difficult physical tasks for an athlete, repeatedly performing new and highly intricate computations for a mathematician — that leads to first-rate performance. And it should never get easier; if it does, you are coasting, not improving. Ericsson calls this exertion "deliberate practice," by which he means the kind of practice we hate, the kind that leads to failure and hair-pulling and fist-pounding.

Monday, February 11, 2008

Delegation meets inactive listening and a busy schedule

In a not-so-distant future:

Employee: Remember the plague of locusts I unleashed last month?

Manager (preparing to leave his chair) : Not really, but what's up?

Employee: Our customers are very upset; they are picketing at the main entrance.

Manager (fiddling with papers on his desk) : They need to check that gate, it has been acting up...

Employee: They snatched the project manager from his car while he was swiping his badge.

Manager (joyful after finding the form he was looking for) : I need to replace my badge...

Employee: They torched his laptop...and the car.

Manager: Well, let me know how it turns out, gotta run to my next meeting.

Wednesday, January 23, 2008

A daily prayer for great software

All you want is a click away
When that button is up
That information is too
Without swearing or pray

And that button works well
Because I tested it before
Because I always knew
What you would look for

I designed it with wisdom
And with inspired bouts
Because I knew what you wanted
And what you could do without

Through daylight and darkness
Without ever asking me why
You let me observe you
Sweat, curse and cry

As I mixed the night
With weekend and day
I never assumed
You would click anyway

Featured Post

Crowds in the clouds, a brave old world