For any organization you’re considering working for, make sure you can answer the following two questions with a resounding “yes”
- Would you invest your own money in this organization?
- Would you be a client of this organization if you needed a product or service they offer?
These two questions have guided me well over the years. Hopefully they will help you in your journey.
* 09:55 Awaiting Comey to enter the chamber, Testimony scheduled to begin at 10am *
* 10:03 The chamber is packed with spectators, reporters, photographers, and politicians *
* 10:04 Comey is entering the chamber and taking his seat *
* 10:05 Senator Burr is opening the discussion. He is reminding his colleagues of the closed session coming in the afternoon, and to reserve questions about classified information for that venue. *
* 10:07 “Today is your opportunity to set the record straight” ~Senator Burr *
* 10:11 Senator Warner is making opening remarks *
* 10:11 Senator Warner is recapping what we already know and what we are still investigating *
* 10:12 “We are here because a foreign advisary attacked us here at home … our presidential election” ~Senator Warner *
* 10:13 “We must find out what the Russians did… and why they were so successful” ~Senator Warner *
* 10:14 “The way in which you were fired by the president was shocking” ~Senator Warner *
* 10:15 “There’s a lot to investigate” -Senator Warner *
* 10:17 “Think about it… The POTUS asking the FBI director to drop an ongoing investigation” ~Senator Warner *
* 10:18 “Disparaging our country’s top law enforcement official as a `Nutjob`… the president suggested that his firing relieves his pressure about Russia” ~Senator Warner *
* 10:19 Mr. Comey is now under oath *
* 10:20 Mr. Comey offers introductory remarks *
* 10:21 “The explanations, the shifting explantions, confused and concerned me” ~Mr. Comey *
* 10:21 Comes says the president was very happy with Comey’s service as director of the FBI immediately prior to his firing *
* 10:22 “The administration chose to defame me and the FBI… Those were lies, plain and simple.” ~Mr. Comey *
* 10:23 “The FBI is honest, the FBI is strong, and the FBI is and always will be independent” ~Mr. Comey *
* 10:24 “Do you have any doubt that the Russians attempted to interfere with the US Elections?” ~Senator Warner. “No doubt” ~Mr. Comey *
* 10:26 “When the president requested that you `let Flynn go?` Was the president trying to obstruct justice?” ~Senator Warner “Flynn was in legal jeopardy… I don’t think it’s for met to say if my conversation with the president was obstruction of justice” ~Mr. Comey *
* 10:28 Senator is asking about the Steele Dossier – Comey is unable to answer in an open setting *
* 10:35 Senator is asking if Mr Comey has any doubts about the Senate committee’s ability to complete the investigation. Mr. Comey is confident that the investigation will continue and be successful *
* 10:36 Senator Warner is asking about the January meeting at Trump tower *
* 10:38 “I was honestly concerned that he [POTUS] might lie about the nature of our meeting” ~Mr. Comey
* 10:42 Senator Warner is asking about the nature of the patronage mentioned by POTUS *
* 10:44 “I really look forward to working with you.” Mr Comey’s account of what was whispered in his ear by POTUS in the blue room *
* 10:45 “The statue of justice has a blindfold on because you shouldn’t be peeking out to see if your patron is pleased” ~Mr Comey *
* 10:46 “This is a very disturbing development… I need to document this and preserve it.” ~Mr. Comey *
* 10:48 Senator Risch begins talking and thanking Mr Comey for his service *
* 10:54 Senator Ricsch is digging into the specifics of the President’s words about “hope” *
* 10:54 Senator Feinstein begins questioning Mr. Comey *
* 10:56 Comey continues to reiterate that it is not for him to determine obstruction of justice by the POTUS *
* 11:10 “The timing of your firing stinks” ~Senator Wyden *
* “Lordy, I hope there are tapes.” Mr. Comey *
* Comey says that the US intelligence community is in agreement about Russian hackers influencing the election. *
* 11:42 Comey refutes POTUS’s claim that he initiated dinner with POTUS. *
* 11:43 “I never initiated a conversation with the President” ~Mr. Comey *
* 11:45 “Who will rid me of this meddlesome priest?” ~Mr Comey’s understanding of the POTUS’s request regarding the Flynn investigation
* 11:52 Senator Lankford says that the president has informed 6 billion people that he is not fond of the Russia investigation
* Senator Manchin says his constituents have sent him over 600 questions they want answers to from Mr. Comey *
* Senator Manchin asks if the president ever asked questions about the findings related to the Russian investigation. *
* 10:56 “We remain that shining city on the hill, and they [The Russians] don’t like it” ~Mr. Comey *
* 10:58 “Release all the tapes, I’m fine with it” ~Mr. Comey *
* 12:04 “Do you believe there was collusion between Donald Trump and the Russians?” ~Senator Cotton – “That’s a question I don’t think I should answer in an open setting” ~Mr. Comey *
* “I’m between opportunities right now” ~Mr. Comey *
* 12:27 “There was an explanation [for my firing] I just don’t buy it” ~Mr. Comey *
* 12:29 “I’m not going to sit here and try to interpret the President’s tweets” ~Mr. Comey *
* 12:35 Senator McCain just said “President Comey” out loud. Things to come? *
* 12:38 “I’ve had a lot of conversations with humans over the years” ~Mr. Comey He’s alluding to “that thing” being a promise of loyalty that POTUS requested, but Comes denied. *
* “We are grateful to you [Mr Comey] for your service to this country.” ~Senator Burr *
While driving back from lunch with a friend the other day, a crazy idea hit me about the nature of day-to-day activities for information workers in the 21st century. I turned to my passenger, who has endured building software with me at two companies thus far, and asked rhetorically “Why do we get up every weekday morning and drive to an arbitrary building filled with desks to practice our craft? What value could this noisy and distracting structure possibly add to the grand scheme of things?”
We don’t build physical widgets, treat sick people, or serve customers in any capacity. We ferry bits and bytes around to where they ought to go and potentially accomplish amazing things on both incredibly small and incredibly large scales. There is no inherent physical nature to either our inputs or outputs. On any given day we might slice and dice more information than the sum of knowledge that previous generations ever imagined – let alone had access to. It isn’t even a remarkable task anymore to pull in petabytes of data, crunch some algorithms over it, and spit out meaningful conclusions in nearly real-time.
What do we even call ourselves? The list of titles I’ve held for essentially the same type of work over the past decade is wildly varied – Engineer, Developer, Programmer, Architect, Tech Lead, Chief Interactions Liaison… (ok I made that last one up.) As a student of Uncle Bob Martin’s wise musings, I’ve decided on “Software Craftsman” as the best way to describe what I do and how I seek to accomplish meaningful results. The Software Craftsmen of the world are a loosely organized guild of creators, inventors, and problem solvers – the likes of which the world of just a generation ago had never seen. We’ve given up on trying to explain to non-technical folks what exactly we do, but know it is our responsibility to educate our fellow non-geeks in the best ways to interact with us so that we can together accomplish great things.
Back to my original point, though. With our varied expertise, breadth and depth, why does it make sense to work for an arbitrary company that just happens to be within a 30 minute drive of where we hang our hat? Sure, there are a laundry list of practical reasons, healthcare, regular income, a steady stream of work, vacation, societal conformity, healthcare again. These outputs are generally associated with spending 45 hours a week at an arbitrary building full of desks, but none of them are inextricably tied to the experience.
In software, we often organize reusable parts into interchangeable abstractions. Traditionally, we might think of a paycheck as an output, but a better abstraction would be a stream of income. A stream of income isn’t necessarily a check addressed to John Q. Developer that arrives like clockwork on the 1st and 15th (unless you work at a startup, where sometimes it doesn’t arrive at all). We could structure a stream that arrives in a less granular way where income arrives based on the successful completion and delivery of a product or project. We could implement a SaaS model in which the stream of income arrives only based on who is subscribing to the software currently.
The duplicate mention of healthcare was no error at all, especially in America where we spend more than all other developed nations on healthcare and have the poorest results. The cost of healthcare obtained outside of a traditional employer will cost you more than the mortgage on a nice three bedroom house. That’s worth repeating to yourself quietly as you realize this cost will also increase much faster than inflation. While worthy of its own series of blog posts, this is a reality that supports and furthers the 20th century giant-corp employment model.
While having a steady stream of work might seem to be a tall order in other industries, just browsing the myriad open source software projects being actively developed on Github puts that notion to bed right away. If you get bored in this industry, it’s your own damn fault. Connecting this stream of work to a stream of income is a trickier task, and often involves skills that are highly irregular to pure technologist. My advice to technical folks is to partner with someone with business savvy, as it is nearly impossible to play both sides of this coin effectively.
Vacations are what you make of them. I’ve spent what should have been a weekend at the beach, instead sitting in the trenches at a keyboard & cases of red bull with fellow Software Craftsmen sliding sideways across the v1.0 finish line with our hair on fire. To me, that feeling accomplishment from shipping high quality software is tantamount to any weekend at the beach. I’d trade a weekend of R&R at an all-inclusive resort for an all-night Hackathon pretty much any day of the week. That’s not to say I don’t disconnect from all things electronic on a regular basis. My wife and I have spent the past couple of years rebuilding my Grandfather’s “Walden cabin” on a river in the mountains of southern Virginia where there is no internet access or even cell phone access at all. Unplug regularly to recharge, you ironic human.
In the coming decade, I expect we’ll see a different kind of outsourcing than we’ve ever seen. We’ll see folks in the IT industry outsourcing themselves, building abstractions between the traditional brick & mortar employer and themselves. This transition may not be completely unlike the shift from brick and mortar shopping to an electronic marketplace of work. This new landscape excites me, and I look forward to the efficiencies and freedoms these new abstractions will bring. We’ll be able to form loose connections with experts in our network and reconnect as needed to continuously accomplish meaningful work.
Reading an article from a former colleague, Proliferation of Depencencies got me thinking about how we manage dependencies today. There are inherent risks to blindly taking on a dependency to solve a single point need.
The tendency toward adding a dependency rather than writing code seems to be accelerating, at least from my observations.
The recent snafu with npm is a good example of how dependencies can be a risk. When Azer Koçulu removed all his npm modules, thousands of applications were suddenly unable to build. A situation that never should have happened due to namespacing, curation, and thoughtful dependency taking, it was a wake-up call to the node community. Many projects were dependent on a single package ‘left-pad’ that was only a couple of lines of code.
Taking a dependency on someone else’s code that isn’t part of a core language framework, especially for 3-4 lines of code, is an unnecessary risk. Alternatives to consider are to write the code directly into your project, or fork the dependency you’re considering taking.
The broader consideration is around how to curate an ecosystem such as npm. Languages and code bases with a benevolent overlord such as the Linux kernel, Microsoft’s .NET CLR, or Google’s Go have the benefit of a tie-breaking entity to minimize dependency sprawl. OSS projects without a strong advisory and curation group have a higher risk of dependency sprawl.
While a Swiss Army knife solves problems, a Swiss army chainsaw can make a mess.
Years of working in IT, especially in the financial and medical industries, have made me more paranoid than most people about data privacy considerations. We’ve all seen the data breach headlines from companies like Target, Home Depot, Adobe and countless others. These are companies with dedicated security teams charged with taking important measures to secure customer data who have nevertheless failed in this effort.
While the threat of a data breach cannot be eliminated entirely, having a written policy and methodically following it will go a long way. In many jurisdictions, companies are legally obligated to have such policies in place, so why shouldn’t you?
Having a written policy keeps any decisions out of the hands of arbitrary choice.
Should you feel inclined to develop a data security policy of your own, feel free to use mine as a template. It is released under the MIT License.
Once upon a time, in an economy far far away, the measure of a company was its balance sheet alone.
While a company must be profitable in order to stay in business, focus today is shifting to a more broad collection of measures, many of which have nothing to do with the bottom line. Organizations focused on achieving long term success are adept at firmly establishing their core values, attracting and retaining talented individuals and teams who embody these values, and communicating with customers authentically and transparently.
“As individuals and companies, everything that we say and do is a symbol of who we are. And it is only when we communicate our beliefs authentically that we can attract others to our cause, and form the bonds that will empower us to achieve truly great things.”
In the more ephemeral software realm, it can be hard for a customer to differentiate between a software platform from Initech Corporation or a similar product from Hooli. There was a time when companies could remain competitive on simply the number of features offered and the price, but the relevance of those two factors alone is waning, especially as the sales price of millions of pieces of software and apps approaches zero.
In software, a bullet-proof strategy is to have an ecosystem built around an ethos. While there is more to it than the field of dreams mantra “If you build it, they will come,” with other things equal, a clearly communicated “why” will separate the passionate innovators from the rest.
Companies and organizations are a powerful force in the world, and are able to organize and operate based on the ecosystem around them. There are limitless opportunities out there for us humans, as stewards of this planet, to make it a better place. Sir Richard Branson sums this up well.
“…imagine all the good that can be done when all companies place emphasis on purpose. Many customers want to buy from businesses that share similar values to their own, so more and more consumers are aligning themselves to impactful companies that sell social or environmentally-conscious products and services.”
I encourage each of you to get out there and build successful organizations or work to effect positive change in the organizations you are a part of.
Twenty-four years might be considered a long time for a mentor-ship, but this one was unique, and started way back in 1981.
What I didn’t know at the time was that the principles and rules I had gleaned over those 24 years would continue to mature and gain new relevance during the years to follow.
Learning / Technology
I can trace my career path back to a single day, July 12, 1986 when my mentor presented me with a hunk of metal, silicone, and glass that would keep me busy for the next 30 years and counting. That Commodore 64 is still in my closet, and the last time I fired it up, it booted up just like it did all those years ago. He somehow knew that putting me in front of this strange new machine would alter the arc of my life and career in so many interesting ways. I’ve always had a stubbornly inquisitive mind, and this was the perfect way to channel it.
He taught me to be loyal, fiercely loyal, to family – which can mean your blood relatives or close friends who you consider family. Their safety is your responsibility, and it’s your job to do whatever it takes to protect them from any harm that might come their way. On multiple occasions, he would tell me, “Take care of your brother. Long after I’m gone, you two will have each other and I expect you to look out for each other.” As an infantryman in Vietnam for two tours and as a Policeman in my home town for 33 years, he was a walking example of making sacrifices of self to protect others.
Do the right thing, even when no one is watching
So many times I’ve kept myself out of trouble by remembering his words to behave “as if people are always watching what you do, and they have a camera to take pictures as evidence.” Simple as this is, this perspective has kept me on the right track many times.
Reach for the Summit, but…
When I was very young, he gave me a pewter Ram with a motto that he subtly encouraged me to follow. The meaning of “Reach for the Summit,” has changed for me over the years as I have learned it applies not only to “Charge the hill,” but also to “Charge the right hill,” and “Don’t charge the hill if it is a volcano.” Several years ago I was leading a hike on Mt. St. Helens in Washington with a couple of colleagues from Microsoft. As we neared the top, I took a hard look at the situation and realized that “Reach for the Summit,” also included re-assessing the situation during the ascent and altering the plan if necessary – even if this includes not actually reaching the summit. I had under-budgeted on water for the team, and we got a late start on the mountain due to unforeseen circumstances. When I saw that reaching the summit was indeed possible, but only at the expense of the safety of my team, I made the call to turn back. In the end, we all made it safely home, and that’s more important than reaching any summit.
Others may be more skilled, but don’t let them outwork you. Once you’ve set your mind to accomplishing a goal, you keep chipping away at it. Whether you’re slow or fast, as long as you’re moving toward your goal, you’re on the right track and every day you get closer to achieving what you set out to do. Getting discouraged is fine, but push past it. Oddly, he passes this along to me as a lesson he learned from the opposing force in the Vietnam War. While his side was under orders to fight the Viet-Cong, he respected the way they leveraged their persistence as a strength and were able to evade a more powerful army. “Know your enemy,” as Sun Tzu might say. There is much you can learn from them.
They say that time heals, but this is patently false. If someone truly made a mark on your life, there’s an indelible scar left when they’re gone and you’re never quite the same again. What time does do, is to help those scars feel less painful, and to make the voids feel less empty. Scars remind us of where we came from, and that makes them pretty important. Seldom a day has gone by in the past ten years when I haven’t thought of my Dad and how he somehow prepared me for challenges I would face, even years after he was gone.
In 2006, he checked 10-42* far too soon, but left me with a lifetime of advice that I’m constantly reminded of.
* (10-42 is a law enforcement term for end of watch)
I recently decided to set out on the somewhat mundane task of replacing my (nearly falling over) mailbox with a nicer brick one. It’s certainly not the epitome of an exciting project, but I came upon an interesting bit of insight along the way.
When I set out have something built my first instinct is to built it myself. I’ve come to learn that is a double-edged sword. Sure, I get to learn a new skill or technique and have the unique sense of pride found in having sweat equity in the end result. I love both of those aspects of DIY, which is why I tend to lean toward it. The flip side is that unless I’m going to build one of these things more than once, ever project I complete is the work of an amateur, regardless of how diligent I am in doing the best job possible.
Over the years, I’ve had to force myself to always evaluate the equation of build vs buy. This applies to projects around the house, and software at the office. There are many factors, but the main ones are these…
I’d say 95% of the time, my initial back-of-the-napkin estimates indicate that it is cheaper to build than buy. The full implication of DIY on TCO (Total Cost of Ownership) is something I sometimes willfully choose to ignore. Questions I have started asking myself to counter this are
- Do I already have the tools I need to accomplish the task? If not, and can I use them to accomplish other tasks?
- How much will the necessary tools cost?
- Will these tools be useful for other tasks?
- How much space will these tools take up in my garage
- Can I just rent the necessary tools instead of buying them?
- Would a person I hire be able to complete the task for cheaper than I can?
- Do I already possess the knowledge I need to accomplish the task?
- How long will it take to obtain this knowledge?
- Can I apply this knowledge in other parts of my life?
- Do I have time to complete the task myself? This includes any ramp up or tool and material procurement.
- Can I complete the task myself faster than hiring someone?
- How long will it take to find and hire someone to complete the task?
- If I hire someone, how long will it take them to finish the project?
- How quickly do I need the task completed? This has to balance my time vs finding and hiring someone else.
- Will I be able to hire someone that will deliver a result of sufficient quality?
- If I do it myself, will quality suffer?
- Will my perfectionist tendencies prevent me from ever completing the project?
- Am I willing to give up control of the project to someone else
- How important is having complete control – taking other factors into account such as cost, time & quality?
- Will I be able to hire someone to complete the task with autonomy?
Taking the time to do a quick evaluation of these four factors have helped choose a more effective route and achieve better results rather than just always falling back to DIY.
As much fun as it is to DIY everything that comes along, it’s not the right route for every project.
As far at the mailbox goes, I decided to hire someone instead of slinging hundreds of pounds of bricks and mortar myself. When he came out to do the estimate I could tell this guy was a craftsman, not a Jack-of-all-trades and I’m pleased with the result.