Today, I want to share two anecdotes about my life as a contractor.
One
About seven months ago, one of the projects on which I was an iOS developer received a stop-work order. In private conversations over the following days, I revealed to one of my colleagues that I had seen the writing on the wall since the inception of the project. I didn't know how to distill my feelings into words at the time, but two things in particular stuck out about the client: lack of total executive commitment, and lack of resources for user experience design.
Let's take the second one first: no UX design resources. The project was to port an existing Windows-only desktop application to the iPad. There was an iPhone project that had been completed by a different consulting team and then brought in-house, but it had performance issues and (in my opinion) a ghastly UI.
In our initial meetings for the new iPad product, it was explained that there would be no UI/UX staff on our iPad project. The presumptive reasons were (a) that the client just wanted to use "stock" UI components and (b) the functionality was a subset of the desktop app, so it could act as a living spec for the UI/UX of the iPad app.
Anyone with app development experience who also has an iota of taste will tell you that this is insanity. But hey, we were all Agile and SCRUM (emphasis on the ummm...). We trundled along on the project, using stock paradigms where possible, and trying to force them where they weren't possible. The only design guidance we got (and I'm not exaggerating) is from the PM, who was using Microsoft OneNote to draw wireframes. We went straight from wireframes to code. "Once more unto the breach, dear friends", and "into the Valley of Death rode the six hundred".
The second troubling symptom was lack of executive commitment. I got the impression that the CTO was lukewarm about iPad-only development from the start. Confirmation came quickly enough. The client was going through a rebranding effort during this project, and out of curiosity I googled the old and new trademarks. I stumbled onto a job posting indicating that the company was seeking full-time "HTML 5" developers. It used words like greenfield development and you choose the technology. I realized pretty quickly that our team was going to get shit-canned. The client had sunk tens of thousands of dollars into this project, but far from throwing their whole weight behind it, they were instead putting out feelers for a whole different kind of development team, a development team that could hit all the latest platforms instead of just iPad. Yes, we were about to get cross-platformed and responsive-designed out of business.
And so we did. Two weeks after the stop-work order, the project was shelved indefinitely.
This second story isn't about abject failure, but about the consequences for a company that chooses to rely on contractors to plug a hole that would be better filled by full-time employees. About 18 months ago, I was brought onto an iPhone project that was already underway. This time, it was an existing Web application that needed to have an iPhone interface.
To make a long story short, because I have more to say about the lessons learned here than the project itself, this made for about eight months of fat checks. It was also a pretty high-stress project, with constantly slipping deadlines and sometimes hurt feelings. It could have been at least two orders of magnitude worse, though. At the end of the day, we shipped, and the product is by most accounts a hit.
I feel the need to mention here a very important fact: both of the companies in these tales are software companies. Their core competency was development, sales, and support of an existing piece of software that had a lot of moving parts and dozens of dedicated individuals in database architecture, programming and IT (not to mention the massive sales teams and managerial infrastructure).
The client was a company that should have focused on hiring better. Not just better people, but better roles. You've probably heard some variant of the adage, don't outsource your core competency. Similarly: if you are a software company, even if your products are in C# and SQL Server, your recruiters should know a thing or two about how to hire for other technologies.
If you have to use a contractor to get your project off the ground, treat them like part of your hiring staff for half of the time. Have them architect your new project, then move them aside with full-time hires. Otherwise, you'll have outsourced a new and potentially large piece of your core competency. There are at least two reasons why this is a problem: incentives and adjacency to the rest of your team.
Perhaps the best, if not only, incentive you can offer to a contractor is higher pay. If instead, you rely on internal resources to take over a project in an unfamiliar technology, they have all the reason in the world to excel (assuming a certain baseline of competence): promotions, esteem from their peers, raises and the rest.
Adjacency to the team is as important as correctly-aligned incentives. A team member will benefit greatly from being able to walk down the hall to a veteran on your mature projects and ask for clarification on business logic, or Web service endpoints, or preferred coding style or whatever. Consultants are nearly always harder to reach (unless you keep them on-site, which is both expensive and of questionable legality).
Epilogue
Well, if both of these companies had taken my advice, I would have been out of a job for most of last year, so I'm glad I wasn't wise enough (or in much of a position) to give it back then. In the mean time, I've had a chance to work with some tremendously effective teams as a hired gun, and I hope I'm able to continue building a track record of excellence. There are an awful lot of lessons you have to learn the hard way, but if you're lucky, you get to have fun along the way and get paid for your trouble.
Let's get one thing out of the way right now. The design of this blog is not unique. It is incompletely borrowed from Dustin Curtis' Svbtle blog platform, and I'm not ashamed to admit that. As far as minimal blog designs are concerned, I think it's one of the best to-date. So, I stole it. I could have used an open source clone like Obtvse, but since I haven't written any front-end code for the Web in a long time (over two years, in fact), I decided to do it all by hand. And since I wrote a custom front end, why not write a custom back end?
Static Site Generation
The fundamental requirements for the back end are pretty slim. I write in Markdown most of the time, since it can be published as-is, or easily converted to HTML or even LaTeX with pandoc. Each blog post consists of two files: a .markdown file and a JSON-formatted .meta file. The filename before the extension in each case is the slug for the post (for this post, it's "feelin-good"). The .markdown file contains only the post contents. The .meta file contains key-value pairs such as author, full title, publication date and tags.
The engine of site generation is a Ruby script that loads all posts into a hash, then generates static pages with a configurable number of posts per page, a static page for each post, and a page for each tag (each post also contains a ] link to its respective tags). Right now, tags are not paginated, but that could be added in the future. In fact, nothing but the bare-freakin'-minimum is included.
The routing is done with a combination of nginx configuration and a tiny PHP script.
The workflow basically goes: write blog post in TextMate or Mou, cp the default.meta file and edit it to satisfaction, run the engine script, move the fresh-baked files to the server.
The Aim
I've written perhaps a dozen blog posts in the past eight years. I've spent more time installing Wordpress and fussing over themes than I've spent writing. Each new iteration gets a couple of posts and then mostly lies dormant until it gets swept under the rug. I have done a better job of maintaining permalinks for my posts over the last four or five years, but really, I haven't been at all prolific.
Part of the problem with writing only occasionally is that I hold what I do produce to an artificially high standard. I've never had the inertia built up to just put a lot of things out there. My writing hasn't developed far enough not to be self-conscious, so in hindsight, everything looks a little affected, even twee. I don't think I have enough material for daily posts. Maybe short weekly pieces. Maybe just a write-up of an interesting question I answered on StackOverflow (I'd have three solid years of material if I'd been doing that all along). Or a response to a post on Hacker News.
When I did improv comedy, one of the common things that was said behind the curtain is you have to treat the show like you're performing only for yourself. You can't stand up there trying to give the audience what they want, because neither you nor the audience knows what they want, and any attempt to pin it down will come off wooden, or pandering, or silly. The most transcendent moments in improv are when everyone including the performers get drawn up into the story and explore it in an earnest way without trying to be funny or outlandish. Part of the craft is recognizing when you're not being genuine, because when you're trying too hard, you almost always end up in the trope of "fighting or fucking" where the egos of the players take over and lead to unnecessarily escalated scenarios.
Genuine is delightful. So to the extent that I can use this new platform to be more genuine and consistent, I will. I hope I occasionally get lucky enough to deliver delight.
For the past year, I've been employed by 352 Media Group, based first in Gainesville, FL and then in Atlanta, GA.
Recently, I decided that the time had come for me to try to make it as a freelancer. I'm not the kind of person who thinks everyone should follow the path of self-employment. On the other hand, there comes a point in some of our lives where the idea of working for someone else is so distasteful that the inevitable pain and isolation that comes from going it alone is actually attractive.
In other words, it isn't all roses. I'm extremely optimistic about what the future holds. I know that my skills are valuable once they get in the right hands. But for the past year, I've had people above and around me figuring out how to distribute my skills, and now that's all on me. Project management, IT, business development, marketing, public relations, HR... they all just collapsed into the singular incomprehensible mass that now rests before me.
Back in August of 2007, I had this to say about my expected trajectory. I'm reposting it here, unedited, because I think it's important to remember that I was as clueless then as I feel now, and things have gone pretty well so far.
One of the most striking patterns that has shaped my life is the exponential feedback of intentionality. What I mean is, I seem to be eerily good at making things happen that I set my mind to. Before I ever spoke to Microsoft at the Fall 2006 job fair at UF, I wrote a Post-It note and stuck it to my mirror: "I will work for Microsoft."
Several months later, I was. Before that, I had opportunities in tech support, web application development, and game development that were greatly aided by just thinking hard about what I wanted.
The key to manifesting intentions is to let your subconscious mind discover opportunities for you, because you could easily burn 25 hours a day looking actively for them. As long as you keep your goals (which should take no more than about 20 words to state) in your mind at all times, following your "heart" (really your mind giving you hints about the correct choice of action) will cause you to converge on your goals.
What happens when you don't keep specific goals in mind? You will consistently converge on whatever occupies your mind for the moment, or on nothing at all. One way or another, you'll notice that you spend a lot of energy just getting by.
I can't conceive how many of my peers accept the reality that shortly (in about 10 months for some of us), they will be sitting at desks in whatever big company pities them with an entry-level position and 3 days of vacation doing menial coding tasks that amount to a piss-take in the ocean of personality-free software.
This is not the corporate America of your father. $30 a hour is not enough for me. $200 an hour isn't enough either. Not if I give up control. Not if I'm beholden to someone whose seniority will always dictate their position (above me) in the org chart.
These are the reasons I will not accept a safety net once I graduate. It's all or nothing, because failure is never final. Failure is just one more motivation to try harder. The alternative to trying again after failure is death.
So, come what may. King me or kill me.
Truer words. But words without commitment or substance. So, the fresh realization is that there is no substitute for cutting the cord for real. For shipping. For taking clients and failing or succeeding on my own merits and not within someone else's support structure. It took awhile to get here, but here goes...
A recent article by Tom Davenport on the Harvard Business Publishing metablog has me thinking. Entitled "Is Web 2.0 Living on Thin Air?," the post asks whether all us hipster Starbucks jet-setting metrosapiens are really creating value, or just participating in a "fluffy" game of social media- powered self-delusion. I think it's the wrong question to ask, but because Davenport implicitly answers another question, this present post is vindicated and the fundamental issue at hand is revealed as both beginning and end.
Concordantly, allow me to ask the question that Davenport really wants to ask: Regardless of the degree of engagement in often frivolous social networking activities (i.e., poke wars, media tagging, and adding edges to the social graph just for the sake of increasing your friend count), who is creating value and in what is that value based?
Speaking as an aspiring coffee shop hipster creative, I can tell you that when I'm sitting down with a Grande Pike Place drip brew, I'm not going to be spending much time on facebook; I'm going to be spending time slicing .PSDs, writing CSS, and scripting PHP and jQuery, or my language du jour.
I remember reading a much more conservative piece by an individual I could only imagine being the type of neo-maxi-zoom-dweebie who could make a career of doling out largely vapid and condescending advice. Substantial Googling and Snopesing turned up Charles J. Sykes and the relevant quotation: "Television is not real life. In real life people actually have to leave the coffee shop and go to jobs." Surely enough, he's at it again. Suffice to say, this kind of polemic fails to inspire me. I guess my necktie is a little too loose for me to get the point.
It turns out that it's possible to create value darn-near anywhere these days. I'm not saying every job is implicitly mobile; vanishingly few are. But for those of us knowledge workers who produce the technology that makes everyone elses' lives richer and easier, a favorite coffee shop can, as in the vision for Starbucks envisioned by Howard Shultz, provide a comfortable "other place," a sacred venue away from the distractions of home where, on the best days, everything but the workpiece fades into the background and we're cruising along in the zone of maximum productivity.
In short, the value we produce takes the form of applications and systems that make it easier for people to do whatever it is they do. So indeed, getting overly engaged in social networking can be a big drain on personal productivity. But we shouldn't confuse such value-sapping minutiae with the value-creating work of producing sites that encourage engagement, including, yes, the creation of social media sites.
In the last hour or so of the day (on the West Coast, at least), and even though this site is still under very active construction, I wanted to drop a quick post for Blog Action Day '08. The topic of the year is poverty.
No, being in the first world, I like to imagine that I can get by, due to my place of privilege in Maslow's hierarchy, on just my principles. One of my friends recently posted on facebook a quotation by Protestant minister William J. H. Boetcker, from which I take the following excerpts: "You cannot strengthen the weak by weakening the strong[...]" and "[You] cannot help men permanently by doing for them what they can and should do for themselves." As much as this sentiment reeks of the hackneyed arguments people make for trickle-down effects between classes, there is something to be taken from it, and it has everything to do with urgency.
Obviously, the time and money dumped into efforts to "elevate" the third world has benefits, up to and including saving lives that would otherwise be lost. But is this naive approach adequate when the very lives that are saved lack the infrastructure, knowledge, and other resources necessary to perpetuate it? This is what Boetcker meant when he said, "you cannot help the poor by destroying the rich." If all the wealth generated by the top 3% of earners in the world went to feed, clothe and shelter children in states of poverty, we would have not one but two destitute generations as a result.
The good news is that "elevation" doesn't have to entirely recapitulate the history of the Western world. We routinely design and commoditize hardware that is decades ahead of that available in the poorest areas abroad, which means that the adoption cost in those areas is a tiny fraction of the initial development cost - yet another instance of the way in which the pricipal of a personal investment can be multiplied many times over.
So, in moving on poverty, the answer is not strictly an influx of capital. Obviously large humanitarian organizations must be aware of this at some level, because their operations are not as naive as the base case described above. But the broader population should be grounded in firmer realities than the swollen bellies of starving children half-way around the globe. These images are tragic and unsettling, and run the risk of inducing despair or a kind of detached revulsion; instead, where is our collective plan for introducing infrastructure and slowly burning poverty up in the flames of progress and accrual of benefits from both social and monetary investments?
It's a humanity-sized goal, but for as slow as it would seem to be, it's the fastest way to see the payoff we'd all love to see.