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.