Open plan offices are bad. Breaking my concentration is wasteful. You hired me to code, so don't interrupt me. I keep reading statements like this and feel compelled to supply a counterpoint. It isn't that these are lies, it is that the are immature perspectives on a complex set of circumstances that clearly only represent a certain type of coder. In fact, I'll claim that "coder" is either junior or selfish or both: immature. While I procede to wax on the subject, keep in mind that this is another perspective. This perspective is, of course, the right perspective...
The mental tear-harness
I've been sitting at this table for about 30 minutes. A puzzle lay before me. It is quite fantastic. It is a picture of little chocolate bars; all kinds. Basically a the ridiculous mashup between episodes of "Children Gone Wild - Halloween" and "Hoarders." This puzzle is 3000 pieces; not so small. It's been sitting here for seven days and we're about half way through. The pace starts picking up around the halfway point.
"Did Zoe finish her homework?" my wife asks me. It just sounds like background noise; I'm in the zone. "Hey, Theo! Did Zoe finish her homework?" I snap back to reality. My concetration broken. I blink twice. "Um... yes. She's upstairs reading now."
I look around the room and realize there are still lights on the long unoccupied playroom adjecent to me. I get up and struggle to walk erect the ten feet that will carry me to the light switch. It kinda sucks getting older. How long had I been sitting in puzzle zone anwyay? I look around the playroom; surprisingly clean given I don't remember any yelling involved prior to their ascension to nocturnal activities. I turn to leave the room flipping the light switch off and extinguishing the picturesqe portrait of childhood jollity without much thought. Ambling back toward the table dominated by the human-created mental tear-harness, I see the puzzle from a new angle. Of course, this is the angle I always first take in, but every time I see the puzzle from this angle it feels new.
"Shit," I think to myself. That piece goes there, and that one there. I'd been looking at this other section wrong and thus been wasting my time searching for pieces in poorly constructed mental image that simply never existed as I had imagined them.
I had been sitting at that puzzle making decent progress, but a refresh perspective was simply invaluable. 折伏. Also, you'll note that I didn't tell my wife to go fuck herself. Perhaps I have an odd marriage and that isn't so normal, but I allowed that interruption without fallout because I trust here; she's on my team.
And that, after all, is the point. It's about team. I make money and I could argue that my wife married me to make money... she interrupts my money making to ask me to clean my dishes, or take the kids to school or simply help her out, I could remind her of that... but then I'd be a prick (and likely not be married much longer). My wife married me to start a super team to build super things. Together we've built three daughters. While we've been married I could say I've built four amazing companies. Again, I'd be a prick. The companies in question were built teams; teams I've helped build and ultimately had the privilege of working on.
How does this apply to coding?
Most coding today is actually part of a software engineering effort. An effort that should ultimately result in a product. A product that isn't a masturbatory demonstration of your coding skills, but rather one that delivers on promises around all of quality, budget and time. Additionally, a product that requires far more than your sole efforts: a team effort.
I'll take this fleeting opportunity to remind you that your team isn't just engineers. Your team is everyone responsible for delivering a product to customers: product management, marketing, sales and business development, engineering, operations, customer support, and many others. No matter how awesomely complex or challenging your current puzzle is, it is but a piece in a large puzzle.
Our job as a team is to reinforce each other and make each other more productive. While I attempt to conquer some of the engineering tasks (as well as legal tasks, and human resource tasks) I face, I need concentration and it world certainly help to not be interrupted. I used to think I needed those times of required solitute pretty much all the time. It turns out that I have added far more productivity by enabling my teams than I have personally lost due to interruptions, even when it was inconvenient and frustrating. So much so that I've learned to cherish those interruptions in the hope that, on serendipitous occasion, they turn into a swift, sprititual kick to the head. After all, sometimes all you need for a fresh persective is to turn out the light in the next room; and, of course, to not have avoided the circumstance that brought you to do it.
In the beginning I stated this was the right perspective; it is. The other perspective is not the wrong perspective, it is the left. Find balance.
Let's start off with some basics:
- I understand open source licensing very well.
- I write a lot of code and have released code under myriad licenses.
- I understand the value of licensing software.
- I respect the authorship of code.
- I fucking hate talking about licensing and arguing over violations.
Recently, I was harassed over GPLv2 licensing issues. It went entirely wrong, but it had a profoundly good impact on the project. All is well that ends well, I suppose. Scratch that, my time was wasted and I'm still quite irritable about the whole thing.
While I understand open source licensing quite well, I also understand that at the end of the day my opinion matters less than that of a judge. A judge who likely knows very little about how computers or code work. Licensing issues are really just a 10th ring of hell.
A rights holder told me that I couldn't release my code under both the BSD and the GPL licenses as they are not compatible. My code, my rules. Your code, your rules. These are, after all, copyright issues. If I have the sole copyright, I can put it under any license or licenses I wish. The copyright holders of today's countless dual (or even tri) licensed software products would agree.
While they insisted that what I was doing wasn't kosher. I asked a simple question: "What clause or clauses of the GPLv2 am I violating and by what action?" With the answer to that question, I promised to fix the problem. Hours of back and forth, still no answer to that question. This is why I call it harassment (wasting my time with empty claims); I'll note there was no hostility on either side... everyone was professional. At some point I decided that the discussion itself was a tax I couldn't afford.
Getting more concrete.
One of Reconnoiter's programs (the IEP system that turns metrics into alerts) is written in Java and is resposible for analyzing data streams and alerting on undesired behavior. The code for this was released under the GPLv2... and the three-clause BSD. The code (at least some of it) leverages a pretty fantastic event processing engine called Esper.
Esper is released under the terms of the GPLv2. So while one can certainly argue, I'm going to simply state that if I ship a program written in Java and I ship Esper with it and Esper's code is called in any way (including via subclassing), the code that powers that program must also be distributed under the terms of the GPLv2. Great, it was.
Now, why would the code also be licensed under the terms of the modified BSD? The answer is simple and all about open source and the Maker's mission. Any open source code I use, I like to be able to use for purposes that may deviate from the licensor's original intentions.
This system's code was also licensed such that I could take that code, and gut the Esper integration (say for performance and scalability reasons) and replace it with something else. By gutting the Esper code, I no longer ship Esper or derive any parts of my program from Esper... freeing me from the terms of the GPLv2 that accompanied it. It should be obivous: by eliminating the software component from the stack, you eliminate any licensing terms that accompany it.
I'm here to build systems. I open source almost all the code I write. People use that code to build entire businesses. The GPLv2 simply sucks (don't get me started on the GPLv3 or AGPL). I've wasted so much valuable time "discussing" whether various projects are compliant with the terms of GPLv2. While we at Circonus freed ourselves from that issue long ago in our event processing system (by gutting Esper and using something custom), I just felt like the rest of the Reconnoiter user base are left in the same shitty position we were... no more.
I took two days out of my busy schedule last week to completely gut Esper from Reconnoiter. All the code that leveraged Esper has been (trivially) rewritten to leverage Riemann. All the new code is furthermore available under the three-clause BSD. Reimann has a vibrant community that are trying to solve the same problems as the Reconnoiter community; it's a damn good fit. I hope to have a future blog post to expound upon all the awesome that this effort brought to both communities. Hat tip to Kyle Kingsbury for all the pointers!
Right now, I think I just need to go to the pub.
P.S. anyone know where I can get GPL urinal cakes?
The seemingly endless stream of misinterpretations of what free speech actually affords you as a citizen in the United States just keeps on flowing.
It wasn’t until I asked him if he’d heard of free speech that the tone changed.
I presume this happened in Europe and while laws are different there I still get very tired of a "free speech" claim as carte blanche to ridiculue, defame and denounce entities by which you otherwise expect to be serviced. To be clear, I think the airline took a horrible approach to the problem... herein I'm only addressing the the claim that free speech somehow frees one from consequences.
Flying (at least in the United States) is not a right. These are private companies providing private carriage services. It is true that we have a lot of protections to make sure that people aren't unfairly denied service and I think they are a very good thing. Specifically, a business can't deny you service because you are white or black, from the United Kingdom, or athiest or Catholic or Muslim.
... full and equal enjoyment of the goods, services, facilities, privileges, advantages, and accommodations of any place of public accommodation, without discrimination or segregation on the ground of race, color, religion, or national origin.
Furthermore, we've identified a set of protected classes against which businesses are disallowed to discriminate. All good.
Outside of this, a private business has the right to deny service based on pretty much anything else. For example, if you curse... Cursing isn't a protected class.
Businesses (at least the good ones) want to provide value to customers and take money off the table for doing so. The really good ones want to provide more value to customers than they get in monetary recompense as it builds loyalty and market advantages (and perhaps a better world to live in).
If I know I can't service a customer and they are going to be unhappy, I would prefer to not take their money off the table and simply leave it at that. I have no desire to provide a service and take money from a customer that will not realize the value of the service. I have limited supply and I'd like to "lose" that customer and replace them with one to which I stand to provide more value.
So, how do you determine if a customer finds you services or product to be of poor value? The easiest way is to hear them say it... perhaps on Twitter. In this great country you have the right (within some reasonable limits) to say whatever you like, but let's all stop pretending that your actions don't have consequences. If you're on private property or being serviced by a private entity, that entity has a lot of rights as well; one of which is (within some reasonable limits) telling you to fuck off. After all, being a "Twitter Bitch" isn't a protected class.
All that said, this guy already had a ticket. That ticket comes with a contract. One's right to free speech isn't really relevant here. The question is who stands to be in breach of contract at the end of this interlude. If the contract says you can't complain on Twitter, then not letting you board the plane seems perfectly reasonable. On the other hand, (which I'm sure is the case) the airline should get its act together. Regardless, it should be well within the rights of the airline refuse future service.
I have run several successful businesses and I've elected to not do business with certain people on numerous occasions. As a business owner/operator you should strive to find the right customer and love them until it hurts by putting more on the table than you take off. That said, never confuse a company choosing to love you as an obligation to love you.
As civil liberties began a steady state of erosion since the Patriot Act, many other countries have followed suit sacrificing the liberties of their people for an unquantifiable increase in level of safety. It makes me ill to think about.
One of the common claims I recurrently hear is: "Law abiding citizens should have nothing to fear." This argument is so sad and short-sighted.
I am a law abiding citizen... today. Our governments can make new laws and there is certainly no reason for us to believe they would necessarily match our respective moral compasses. When they do not align, we have decisions to make. Those decisions should not result in the erosion of civil liberties. Namely, a protest by the people is not (nor ever will be) terrorism. We should never grant our government the ability to change the process by which it resolves disagreements with its people. It should always remain a process of the people. Statements like the above cross the line between building a society that protects its liberties and building a cage from which its people cannot escape.
I very rarely consider the "founding fathers" of the United States as they lived in a different time, in a different world with different risks and threats. There should be no reasonable expectation that their perspectives would remain unaltered given the influence of subsequent American history. However, there is on basic sentiment that haunts me... the one that resonates with me is regarding the value of liberty. It was more valuable than life.
"Those who would give up Essential Liberty to purchase a little Temporary Safety, deserve neither Liberty nor Safety. - Benjamin Franklin
Business is king. Customers rule. Service is everything. Yet every organization I go into has an engineering group that can't see outside their bubble. Perhaps they can, but they certainly choose not to.
I'm an engineer, I write code. I've written approaching 100k lines of C code in my life time, I've administered tens of thousands of systems in my career and I've help plan some of the largest customer-facing infrastructure ever built. I've learned a tremendous amount about technology and the hubristic nature of engineering teams. The most important take away from all of this? The technology doesn't mean anything unless it enables business by providing better service to customers.
Now, I realize that when I rant about this to technology folk, they emphatically agree. But, I'm tired of the lip service. People today in architecture, engineering and operations say again and again that their focus on enabling better customer experience. It's a nice sentiment, but every time I dive into someone's instrumentation and monitoring, I see an absolute vacuum when it comes to non-IT data.
The obvious things like financial and customer service metrics are missing, but so are all the more subtle things. Hiring is hard; finding and retaining talent is challenging; providing good benefits that add value and increase job appeal is a competitive task. All of these things are critically important to the organization as a whole (and specifically engineering and IT) and yet they are completely absent from the "monitoring" within the organization.
The truth is that there is absolutely critical telemetry coming from every facet of your organization. All of this telemetry is either directly related to providing better service to customers or directly related to providing better service to your organization itself which, in turn, stabilizes the platform on which you deliver products and services. Of this, I shouldn't have to convince you and I find that no convincing of the general population is required. Yet, here we are with almost every organization I see standing blind to this vital information.
Don't get me wrong, I don't think technology isn't a first-class component of today's (and tomorrow's) organizations. In fact, I think the technology group has been applying radically advanced techniques to telemetry data for years. It's high time that these techniques and tools were applied to the organization unabridged.
There is a profound shift in data transparency and accountability coming to the organization to tomorrow. If you don't buy in, you'll simply fail to achieve the agility and efficiencies of your competition. I'm here, with Circonus, to make that happen.
Business is king, not engineering. The difficult (but exceptionally simple) shift of engineering's focus from serving itself to serving the business as a whole will remake IT as the engine of the organization. As soon as you embrace this shift, technology will be the most powerful tool your organization has at its disposal.
I've built a few successful products and looking back on their success, I think that the mantra that drove product development is what separated our products from the rest of the market: "products built from pain." All of the products we've built were done so to relieve acute pain. Not pain we researched; pain we experienced. We built products and changed the world of software because our lives sucked.
I've read a lot of books lately on new ways of running organizations and different methods of motivating people and many of them focus on studies around jobs that require a tremendous amount of creativity or "thought workers." I think these books are interesting, exciting and I'm interested in carefully applying some of the research at my places of work. Thinking is critical, creativity is what enables you to innovate. Now, I'll say something highly unpopular: get over yourself.
Inspiration to drive innovation is what we're looking for and most innovation happens through punctuated equilibrium. Inspiration, by its very nature, is tied to a punctuated result because it is sudden. We often speak of "flashes" of inspiration and one definition of the word is even "a sudden, brilliant or timely idea."
If you've ever had a stroke of genius, there is a decent chance it happened in the shower. The place where you relax, zone out, and cannot escape ideas for implementations. What I see now I find sad: people restructuring their lives to have lots and lots of what I call "shower time."
If you write code, which many of my readers do, I'm about to piss a vast majority of you off. We're not thought workers. Innovation in code is a rare thing and coding is a tedious task. Until the day when we can merely think of inputs, outputs and algorithms and the computer will simply codify them on our behalf, we all will spend a lot of time meticulously telling a computer what to do. It might be challenging. It might require focus. It requires a perfect vocabulary, impeccable grammar and a mastery of common idioms and colloquialisms, but at the end of the day 99% of it is writing a set of instructions for a deterministic system to follow. Bottom line, it is largely not a creative process. I know that many of us (myself included) like to think of new and clever ways to do something -- it's good mental exercise. But, almost every time someone shows me a new and exciting approach to solving a problem, I can find an almost identical reference implementation of the same solution published either academically or commercially.
If you step back, the large applications and services we all are building are new and different. It took vision, whimsy, courage and maybe a fair share of batshit-crazy inflated self-confidence to pursue them in the first place. I applaud this, but find it paramount that one stay grounded in the fact that executing on that vision is 99% blood in the mud. It's hard, it's often not creative, it rarely resembles "thought work."
I see more and more people trying to avoid the sweat and focus on constructing halcyon environments where they have the freedom to think differently and be creative. Here's the deal, you're a human being and as such, you don't need a special environment to arrive at freedom of thought; nothing and no one can take that away from you but you. It is the constraints that result in true creativity. It's wading through shit for 18 hours, suffering your own bad decisions and those of others, arriving at a moment of painful failure and tears that ultimately requires a shower. It's not the shower you took yesterday or the day before. It won't be the shower you take tomorrow. This shower is truly "shower time." In this shower, maybe (just maybe), you've set the stage for sudden, brilliant or timely idea - because you've earned it.
Peaches and pecans on vanilla ice cream is a wonderful thing, but get some perspective on how you came to enjoy it. I have heard (and have told others), “life is too short to do something you don’t enjoy,” but the truth is there is no way to revel in everything you do at every moment; not even the most ambitious and determined hedonist can achieve this. While I don’t think he was right about everything, I feel confident Sigmund Freud nailed this one: “We are so made, that we can only derive intense enjoyment from a contrast and only very little from a state of things.” So, not only can we not enjoy everything, that which we do enjoy is aided by the lack thereof in other things. Pitting the peaches, cracking the nuts, even making the ice cream heightens the experience of its ultimate, decadent demise.
How does this relate to work? In more ways than you’d think. Most things we do have small parts that we don’t enjoy; it is part of being complete. I’ll give a few examples of regular things I do that are nowhere near the pinnacle of my excitement and satisfaction curves.
I am an engineer and I love to solve problems. The more difficult, the more rewarding. Increasing the difficulty increases the likelihood of failure, in turn making success more exultant. I write code; I’m good at it. Part of writing code includes considering aspects of who owns the code, how it is licensed, and who protects the user from claims of intellectual property infringement. That’s right, I said “part of writing the code.” If I am skipping these tasks, I am increasing the risk for every consumer of my code. It’s part of my job, and (for me) is certainly not the most enjoyable part.
Not everyone has these responsibilities, but I’d bet if you think about your job for a few minutes you can name a handful of responsibilities that, for lack of a more eloquent description, suck. That’s just one example. I also have to manage people, review financials, work with banks and lawyers, hire, fire, interact with clients, market and sell... oh yeah, and solve technical problems. Which of these do I enjoy the least? That’s my secret and if I do my job well, you’ll never know. I try to embrace the parts of my job that do not resonate with my strengths and leverage them to become stronger.
Parts of your job are going to suck, that’s just how it is. Now, you might be able to delegate some of these various tasks, but I have found that embracing some of these things and making them truly a part of what you deliver increases the quality of your work, makes your successes more satisfying and generally makes you better at what you do. We tend to not enjoy tasks that aren’t in our wheelhouse. Things that make us uncomfortable are the things that make us grow.
Here’s the rub: you can grow up or grow out. Growing “up” is challenging yourself to harder and harder tasks in your hyperfocused discipline. Growing “out” is pursuing and accepting challenges that are related to your business, but not “your job.” Upward growth makes you better, more expert, and more elite. Outward growth makes you better, more instrumental in overall success and an invaluable player in the business as a whole. Upward growth is far more comfortable and less intimidating; it’s the known unknown and failure is less likely. To be the best you need to invest in both.
Life truly is short and not enjoying what you do (at all) is a vast waste of life itself and so it is a balancing act. How much of your day-to-day job should be the stuff that you don’t like (outward growth that makes you uncomfortable)? The idealists out there are simply going to hate this answer: non-zero. I’ll get more specific for those that are still reading. “Let me do what I do. I’m good at it and that’s what you hired me for.” Sound familiar? I say bullshit. I didn’t hire you to do X. I might have hired you because you demonstrated that you were competent at doing X, but I hired you to make my team a better team, my product a better product, and my business a better business.
I’ve spent a good deal of my time searching for balance and here’s what I found. Everyday that I spend time doing the things that I love and the things at which I feel most capable I feel awesome; I feel successful and satisfied... in the short run. A week goes by and I reflect on all that I’ve accomplished and I see that the business would profited more had I focused on those things that made me uncomfortable, required focus and personal growth (that which I was less confident about executing flawlessly).
As a contrapositive, when I don’t focus on upward growth and instead focus on all the various places I can add value outside my core expertise, I see the future brighten by the hour. I add value. I add real, tangible value to initiatives through my learning and unique perspective. Business is better, teams are stronger, and clients are happier. The goals are great, but I can’t always walk a path whose journey does not yield deep personal satisfaction; I become uninspired, my passion drops, I lose my perspective and become ineffective.
It’s a balancing act indeed and for me that balance is 80/20. I find, looking back at the last several years, that when I fall below 20% of my time in outward growth I lose potential value and perspective. If I fall below 80% upward growth, I lose passion and perspective. Notice that? The thing I always lose when I lose balance is perspective. This 20% may not be the right number for you, so you should strive to discover your own balance -- just don’t lie to yourself, because you’ll lose in the long run. I said I learned this through failure. I never seem to achieve a consistent 20/80 split and my moments of equilibrium are fleeting, but I feel them as they slide by.
I’m not saying that pitting peaches (which I truly hate) or shelling pecans (which I find devoid of mental stimulation) or making ice cream (which is good fun) is necessary for the enjoyment of a most wonderful peaches and pecan sundae. I’m saying that if I do it 1 out of 5 times, I am more discerning, more moderate in my consumption and derive far more satisfaction from every dessert I eat.
Peaches and pecans on vanilla ice cream is a wonderful thing, but get some perspective on how you came to enjoy it.