things i like: guided tours

I just got back from a weekend in Chicago. I like to travel, and I get off the farm as frequently as is practical, but while in my younger days it tended to be me, a backpack and a guidebook, these days, I find a nice guided tour to be much more efficient.

Don’t get me wrong; I’m still DIY about most things, but there are a few factors that, to me, make it worthwhile to have somebody else leading me around.

First, if you’ve never before visited a given city or country, there’s always a little bit of culture shock, and it always takes a little time before you get comfortable. You’re focused on all those questions in your mind: Am I in a bad neighborhood? How does this public transit system work? Am I going to get arrested for jaywalking or something stupid like that? What is this food item, and should I eat it?

So you’re already distracted. The second thing is, you’re trying to actually take in the scenery, the experience, to actually enjoy the place/thing you’re visiting. If you’re trying to read a map and a description while you’re looking at the thing you’re supposed to be looking at, you’re not really traveling, you’re just leading your own little tour group of one. Let’s face it: half the time, you’re already thinking about how you’re going to get to the next place you’re going.

It’s even worse if you’re the one with the guidebook and you’re trying to read the description to somebody else. You’re not really able to just enjoy being in the moment.

And, logistically, there’s nothing like the challenge of planning an adventure before you’re even at your destination. Maybe those two things that seemed really close together on the map are actually a lot further than they seem. Maybe that particular subway stop is closed, or that landmark is under construction. The wait at the restaurant might take a lot longer than you planned for; on the flip side, you might find that the famous museum everybody told you about is interesting for all of five minutes, leaving you with a lot of extra time.

Here’s where a guided tour saves the day. The tour guide isn’t dealing with culture shock. Neither are they distracted by trying to experience the moment; they’re there solely to make sure you’re having a good time, and frankly, they’ve already seen that famous house or park or intersection three times this week.

And, they live in the place you’re visiting, 24/7/365. If there’s something that throws off the logistics, they can compensate for it. They know how long a certain segment of the tour takes, and they’ve got reservations for lunch.

Furthermore, they know that little tidbit of trivia that you somehow missed when you were reading the book. They’re not just guides, they’re entertainers; their livelihood depends on them being experts at the same thing you’re trying to squeeze in between booking a hotel and finding your passport in your sock drawer.

There’s also the “theme” factor, wherein the tour has some attribute that makes it an experience above and beyond just seeing the sights. For example, when Kara and I were in Chicago a few months ago, we took a Segway tour, which, aside from being informative and educational, carried the added bonus of us being able to zoom around the fountain from the start of “Married with Children” on electric scooters. On my more recent visit, some friends and I went on a food tour that focused on regional specialties. We still learned about history and architecture as we walked, but having that unifying theme made it that much more fun; it wasn’t just “let’s learn about this city,” but rather, “let’s learn about food, which we love, and how the subjects of food and local culture are intertwined.”

Now, please take this post with a big grain of salt. Given enough time and knowledge, you can certainly put together an amazing visit to any destination, tailored precisely to what you want to do. Of course, I know not all tours/guides are created equal, and if you get a bad one, you might as well not have one at all.

But, I tend to assume here that you’re not moving to England for a year, but rather, that you’re visiting London for a wedding, you’ve never been there before, and you have exactly 6 hours on a Thursday afternoon to see the highlights of thousands of years of civilization. Neither do you have the time/energy/expertise to read through multiple guidebooks and websites to make this the vacation of a lifetime.

Again, efficiency is the key word: you get a good flavor, some nice trivia, and a good, if general, experience. But should you love the location so much that you come back someday for a longer visit, you’ve got a good jumping-off point to start your own exploration.

Posted in Life, Things I Like | Tagged , , , , | Leave a comment

mini-cases: controlling the source

Collaboration tools are a big business.

When you’re working on something by yourself, life is simple. You don’t need to coordinate with anybody else’s schedule, and only one person needs to remember what you were working on last, and what needs to get done next—which can be done with a sticky note at worst, and your memory at best. If you put your tools down, they should be where you left them when you come back. The only communication that needs to happen occurs within your own head.

But add just one person to the mix, and the overhead costs suddenly increase dramatically. You have to talk to another person. If I’m painting the walls and my cohort is waxing the floor, we need to make sure we’re not expecting to do the same room at the same time. Worst case, I might actually get trapped in a side room behind a freshly-waxed floor, thus wreaking havoc with the schedule.

Now, add a whole crew. Was the room already painted by somebody else? Did the guy who does window trim make sure he did his work after the wall guy? Are multiple people now “gated” behind that nice, shiny floor?

In real life, we have a number of solutions for the problems created by multiple people working together on multiple intertwined paths towards the same goal. They’re not all high-tech, either: the simplest is called “conversation,” and the second-simplest is called “writing things down.”

Interestingly, despite the evolution of more advanced communication media like email (persistent, auditable, multi-participant written conversations), scheduling tools (reconciliation between task status, resource availability and dependencies) and multimedia systems (instant text messaging, voice communication, video imaging), we still depend on the basics. As complex and efficient as all these, they still are fundamentally just improvements upon writing and talking.

So, things change—not just in the development of project management technology, but within projects themselves. Ideally, you want to keep track of what changed, when, and who was responsible. And beyond that, if you discover that something broke because of a recent change, you want to (quickly) get back to a working state. This isn’t always possible in all situations—if a floor of a building gets built wrong, you can’t just click a button to “revert” to the version before floor 30 was done.

Fortunately, in information work like software or most of the analytical parts of business, “rolling back” isn’t impossible. In fact, it’s an essential safety feature for software development: the ability to “code, merge, test, and undo if needed” is simply not optional.

In the vernacular, this operation is called “source control” or “version control” or “versioning.” It’s all about making sure that you know exactly what “stuff” is in the software that your customers are using and what “stuff” is still being worked upon. It’s also about making sure that, once you fix something, the broken part doesn’t somehow make it back in front of the customer.

In this particular case, I arrived at a company that had no real source control or versioning system. Since there were really only a few developers, source control was based on the old poor-man’s method of “I’ll copy the code into a directory somewhere, and let’s just agree that nobody makes changes to the same pages or subdirectories at the same time.”

And if a change went into production and ended up breaking something, it could become a mad scramble to figure out what changed, and how to roll it back to the previously-working condition.

So we had two real problems to solve: how could we keep from shooting ourselves in the foot if a change went south in a hurry, and how would we, mechanically, keep our growing development staff from overwriting each-other’s work?

In this case, the solution was versioning software. We evaluated a number of options before settling on Subversion, which is a free, open-source version control system.

A quick aside: a detailed description of the “open-source” and/or “free software” movements would require its own article, given that their nuances and history rival those of contemporary religious schisms. Basically, open-source software is software where the “source code”—the structural, editable, human-readable DNA of the finished application—is made available to users for their own modifications. Examples include the Linux operating system, the Firefox browser, and even the software used to produce my blog: WordPress. It differs from “closed-source” software in that such programs cannot be modified by their users: MacOS, Microsoft Office, Photoshop, and countless others.

The business model between open-source and closed-source tends to focus on a sort of “the razor is free, but shaving lessons will cost you” model for open-source, versus a more traditional product-based model for closed source. Both have their advantages: closed-source tends to be a little more user-friendly, while open-source tends to be more flexible. And both have weaknesses: closed-source means you are beholden to the developer for any innovation or new features, while open-source requires expertise, patience, and the bandwidth to participate in a community-driven development process.

But, as it happens, Subversion is what we might call a “mature” open-source project: not just stable and functional, it has spawned a subset of support applications designed to make the core application useful beyond the default ambitions of the developers. It’s a solution more than a program; the system provides for a number of ways to accomplish the same objective, from obscure typed commands to pretty drag-and-drop graphical icons and streamlined menus that remind you of any Microsoft product.

So there was no controversy in adopting such a solution. It didn’t hurt that the company adopting it was a startup with a limited budget, but they were pleased to be using the same system as companies a hundred times their size.

The process of adoption had a few steps. First, we needed to narrow down the “products” that we offered, and compartmentalize them into their own “repositories,” in the Subversion nomenclature. Step two involved some relatively uninteresting and technical discussions about the relationships between, say, our development environment and our production environment, and where exactly we would store our new repository. Finally, we needed to synchronize our real live website with our versioned website—again, a fairly technical exercise.

This project was an absolute success: for 14 consecutive quarters, we were able to roll out software updates with absolutely no compatibility-related issues.

Well…better make that a qualified success. There were no issues with code changes being overwritten. We did have the occasional issue with merging our code together—as it turns out, source control systems are great for keeping track of changes, but when you’re comparing two different changes on the same line of code, you still need a human to oversee the process and pick the one you want.

And it took time for us to get used to the new system, which forced us to have to scale back the scope of our first few releases. In much the same way as your productivity might initially suffer when you hire a new employee and have to take extra time to teach them the ropes, we found that certain tasks took longer than they used to take.

Which leads to the first lesson learned: software is a tool, and tools only get you so far. Far more important—and almost always overlooked—is the challenge of doing proper process analysis.

In other words, you have to think about more than just the tool. You have to think about how you do things, in what order, with what interactions. What exactly is the root of the problem you’re trying to solve? What might actually get worse with your new system? Are there things that can’t change, no matter how much you want them to? You can’t just up and start doing things a different way without considering the impact: the impact doesn’t go away just because you ignored it.

I think that we struggled a little in the early days of using Subversion because we weren’t yet used to doing things, to thinking about things, the way the tool wanted us to do them. And you have to adapt to fit your tool, no matter how “seamless” a transition the sales guy tells you it’s going to be. It’s like this: a microwave oven is great for reheating food. But if you don’t adjust your technique for the specialized tool, you’re going to set the kitchen on fire. You have to take that slice of pizza out of the foil first, and that pot doesn’t even fit in the microwave.

Software can’t make two programmers talk to each other to ensure that they’re working together towards solving a problem. Software also can’t make decisions about what problems to solve in the first place, or what the solution might look like. All it can do is keep track of the changes along the way.
And we still had plenty of problems to solve long after we got source control working smoothly. But, I don’t think that we would have been able to move much further along without having solved the simple problem of versioning.

That’s the second lesson. Business, like anything in life, proceeds in steps, and you have to walk before you can run. If you want to build a restaurant chain, you need to start with good inventory control in your first location; if you want to be a wedding photographer to the stars, start by making sure your tripod is straight. If you want to build a business that relies on software, you’re going to need to keep track of changes.

Finally, remember not to reinvent the wheel. As I just said, source control is an essential part of every software business, so if you think you’re encountering a common problem, your first step should be looking for a common solution.

That said, open-source free-software Subversion wasn’t free—far from it. We had lower initial productivity as we implemented it, and the hours spent setting it up, training people to use it and administrating it cost real money. But it was cheaper than building a system from scratch, and cheaper than finding a more user-friendly system. You can’t always find something that does exactly what you need it to do for exactly the price you’re willing to pay, but in this case, we were close enough.

Posted in Business, Life, Mini-Cases, Tech | Tagged , , , , , , , | Leave a comment

mini-cases: better to beg for forgiveness, part 2

In this mini-case, I did not have official approval for my idea.

And it was simple: I was working for a business that, among other things, allowed users of a website to search for airfares across multiple providers—pretty innovative, at the time.

Now, I had always heard that it was best to purchase an airline ticket around 2 weeks before the flight. Any sooner, and the airlines would profit from those who had immutable travel plans far in advance; any later, and prices would steadily go up as you approached your chosen departure date. Yes, you could always get last-minute tickets, but you had little control over the specific timing or even destination.

Fundamentally, I wanted to answer the question, “If I need to be at a wedding in Dallas on a certain date, when should I buy my ticket?”

We had access to flight and price data. We certainly could record, to a certain extent, the prices of the tickets viewed by our customers. We could make this happen. I was pretty sure it would be useful.

So I proposed it as a new project. It was promptly denied by my manager.

The response I got was that we didn’t have enough data to make a truly accurate estimate of what future flight prices would be—that there was no sense in trying to tell somebody when to buy a ticket if we couldn’t be exceedingly confident that we were giving them good information.

Of course, I disagreed. Any data was better than no data…couldn’t such a system, even as simple as a red-yellow-green coloration for a given price, offer some good value to our users?

But, to no avail.

It didn’t occur to me at the time that I should just go forward with my idea; that it was better to beg for forgiveness than to ask for permission. I was worried that my innovation would be seen as insubordination, and I just didn’t think I could keep my mouth shut on something that really interested me; I couldn’t go the clandestine route. And I didn’t have an appropriately thick skin to resist criticism of an idea that was so far below the radar that management had formally forbidden it.

So I moved on to other things.

A few years later—after I had left this company—somebody at a different company did exactly what I had described.

Did the company that implemented my idea make a ton of money? I don’t know. Was it super-accurate? Don’t know that either. But, I mean, it was a good idea. If you could have input a travel destination into a website and had it email you when it estimated you should purchase the ticket for the cheapest price, you’d sign up? Right?

All I know is that I—and probably many, many other people—came up the idea first. And of those many people, I was one of the ones who had access to the data to make it a reality.

But, I didn’t. I didn’t, because my manager told me not to.

Do I feel ripped-off? Nah. Anybody involved in entrepreneurship will tell you that ideas are a dime a dozen; the secret sauce is in the execution. Am I sad that I didn’t give it a shot? Yeah. But do I feel like I missed the opportunity of a lifetime? Again: nah. It would at some point have required the support of the organization to make it successful, I’m not sure I could have made that happen.

That said, the first lesson of this case is pretty simple: if you have a good idea, and you think you can make some real progress towards making it a reality—while still getting your regular work done—there’s no reason not to do it.

So your manager doesn’t encourage you. Did he outright say that he’d fire you if he caught you working on it? And, so what? Did you ever do anything in your life just for spite? Just because somebody told you you’d fail?

Remember that your manager is just a human being, and that humans fail a lot. Augment that opinion with the very real phenomenon that far more individuals are in management that have true aptitude for the position—see “the Peter Principle”—and be sure to take all opinions with a great big grain of salt. And even if it’s not a competence issue, there are always far more ideas in any organization than can possibly be pursued.

The second lesson is to realize when you are in a situation where you can have a real impact; don’t always get hung up on processes and procedures if you can figure out a way to get around them.

Yes, there is a real risk here: you might get discovered, disciplined and fired. Even if your product is wildly successful, the organization might discipline you for breaking the rules, in an effort to head off future insubordination.

But recognize your environment and try to get a good feeling for just how much trouble you’ll get into before you automatically dismiss an idea. Are you stepping on toes, or is everybody too busy dancing to notice that you’re working outside your official capacity?

Learn to recognize possibilities for making a difference, even if they aren’t in the context of a great big game-changing skunkworks project. If your marketing department is shorthanded and you have a knack for writing bullet points, volunteer. Are you a great writer but you’re in a technical position? Write the manual or the documentation, or make friends with the editorial staff.

Lesson three is that premium features are a great way to monetize investments. If somebody is criticizing that “it’ll never stand on its own” or “why should we do more for our customer?”, the next step is to point out that value-add services make money. If you don’t believe this, pull out your credit cards. Do they all have around the same interest rate? Or might one card justify a higher rate—or even an annual fee—by giving you access to more desirable rewards if you use that card?

And Lesson Four is another of those quotes that ought to be tattooed on your body, or carved into your tombstone: “Any data is better than no data.”

Listen: you’re planning to make a pizza. You turn the oven to 425, and it seems to be kind of cold. You turn it to 200, and it seems to be extremely hot.

You turn it to 300, and it’s sort of in the middle. At 150, it’s as hot as you’ve felt it. At 450, it’s barely on.

And that’s data. At this point, you realize that the temperature knob is backwards, and so you’re able to find an appropriate temperature.

Could you have arrived at that conclusion without several data points? Without experimentation?

That’s the value of data.

Posted in Business, Life, Mini-Cases | Tagged , , , , , , | 2 Comments

mini-cases: better to beg for forgiveness, part 1

This case is about a time I should have started a skunkworks.

While the historical origin of the term “skunkworks” is lightly disputed (it most certainly references a comic strip called “Li’l Abner” and stems from military projects in the late 1930s or early 1940s), the definition is not: it refers to a group, a project or a product being developed through special channels, perhaps without official approval, possibly in spite of being officially forbidden. Defense contractor Lockheed Martin was one of the first companies to have a formal “Skunk Works” division, tasked to work on highly secretive and advanced fighter planes.

Probably the most famous story about a real under-the-radar skunkworks project is the story of a graphing calculator developed for the Macintosh computer in the early 1990s. The developer responsible for the calculator program was laid off when his project was canceled, but decided to keep showing up—effectively and arbitrarily “uncanceling” the calculator. He operated in clandestine fashion for months, improving and perfecting his program without pay, harvesting support from official employees like some modern-day Robin Hood. Eventually the fruit of his labor was discovered, accepted and included as standard software on millions of Macs.

That story is a mini-case in itself. My favorite quote: “The first 90 percent of the work is easy, the second 90 percent wears you down, and the last 90 percent—the attention to detail—makes a good product.

But, back to this case.

This case is also about strategy.

The day-in, day-out operations of running a company tend to revolve around making appropriate “tactical” decisions (see the “Strategy” section of MBA-A-Day). If you’re serving hamburgers, you make sure you pay your ground beef bill on time. You train your cooks to grill the patties to order without creating waste. You make sure your employees are healthy and happy by maintaining a pleasant working environment, but you also insist that they follow guidelines to maintain quality and productivity.

Strategy, on the other hand, happens at the highest echelons of the company. Strategy is the decision to sell hot dogs as well as hamburgers because you think the added variety will generate more revenue without adding much cost. It’s deciding to franchise your restaurant concept rather than trying to build additional wholly-owned locations. It might strongly influence how you carry out tactics: strategy can decide who you buy your ground beef from, your standards about wasted food, and even the idea that employees ought to be kept happy.

Strategy, in other words, is what you do. Tactics is how you do it.

The reason strategy exists is that if every employee had carte blanche to make decisions about every aspect of a business, it wouldn’t be a business. Imagine going to McDonalds and being told that they didn’t have hamburgers there because the employees decided to make pizzas that day instead. Or, imagine that BMW suddenly started only delivering minivans to dealerships because a single line worker (with a large family) felt that every car needed to have seating for 8.

Businesses have strategies for the same reason you do: there are only so many resources available, and tough choices need to be made to figure out which projects will best accomplish the company’s goal. If your wife is coming home from a business trip and you only have time to go out to the bar or vacuum the floor, you’ve experienced the challenge of strategic decision-making!

A skunkworks sometimes evolves in a situation where the official environment of a company is not conducive to producing some output that would actually prove extremely valuable to the company—maybe that line worker was convinced that BMW minivan would actually sell really well, and other employees who felt that way would join him at the plant after hours to fabricate the first M-series vehicle with two sliding power doors. I’d guess that this is the most common type of skunkworks, although I can’t possibly back that up with actual numbers. It’s certainly the most popular image of what a skunkworks is: one man, in a world that doesn’t understand his vision, railing against the powers that be (cut to a man in a boardroom shouting “You don’t understand the future! This is the future!”), struggling against all odds, until, with the power of true love (can we get Sandra Bullock?), he transforms an industry…and a world (maybe Aerosmith or Bret Michaels can perform the theme song).

Sorry. Always wanted to be a movie announcer.

But on the other hand, it’s important to note that a skunkworks can arise as a result of corporate strategy. The company as a whole may decide that most of its operations require a certain type of environment with certain rules to thrive, and that it needs to form a sort of “A-Team”: a high-risk, high-reward business unit to pioneer special sorts of projects.

It’s not as sexy as a grassroots skunkworks, but I’d be surprised if it wasn’t more effective. After all, you have official budget and recognition, you’re not fighting for basic resources like QA staff or developers, and you know that the higher-ups want the product you’re developing.

I’ve had the privilege of being part of skunkworks projects with the corporate imprimatur. The best example I can think of is a job where we were developing a sort of dot-com approach to publishing information as opposed to our more conservative parent’s print-based business. We had the flexibility to do things our way without being immediately saddled with P&L (Profit and Loss) responsibility, which gave us more time to get our individual strategy sorted out. We were our own little business unit, exploring new possibilities and employing as much creativity as we could muster to do things differently from our parent.

And if we failed…well, we were a tax write-off.

It’s like investing. You might put a large percentage of your capital in something with a safe return, and a very small percentage in a high-risk, high-reward investment. A formally-approved skunkworks project, or even skunkworks division, makes good business sense for a company seeking to maintain its core business but still support innovation.

Posted in Business, Life, Mini-Cases | Tagged , , , , , , | Leave a comment

brief update: 20100916

No update yesterday, for which I apologize. I’ve been writing quite a bit of the content for the mini-cases, but it doesn’t always make it to the blog by the deadline. I blame the editors.

I had a great lunch meeting today with a Boston-area writer who gave me some great advice on…well, on writing, and publishing, and how to sort of get back into the mix.

Nothing else of interest to report, so I will instead send you here:

The SCP Foundation

Secure, Contain, Protect: when something weird is discovered, these people are the front line in making sure it doesn’t cause the end of humanity…or the universe.

About the SCP Foundation

And a good start of stuff to read:

Top-Rated SCPs

A few I really enjoy:
SCP-002 – The “Living” Room
SCP-015 – Pipe Nightmare
SCP-084 – Static Tower
SCP-087 – The Stairwell
SCP-106 – The Old Man
SCP-201 – The Empty World

Do not start reading these late at night…unless you sincerely enjoy being afraid of touching a coffee cup that might permanently bond with your hand and be eternally filled with body fluids, or a staircase that seems to have no bottom.

Posted in Personal, Things I Like | 2 Comments

mini-cases: support your core

The new content-management system was done, and we breathed a sigh of relief.

We needed it to support our ambitions of providing even more specific content to our users, who came to our site for our well-informed professional recommendations in our area of expertise (about which I will remain ambiguous, for purposes of anonymity). The old CMS had been constructed in-house, and the new upgrade added a great deal of functionality.

There was only one problem: the writers and editors didn’t like it.

I had arrived at this company only a few months before, and was surprised to discover that, despite their core business as essentially an online magazine, they had decided to build their own custom CMS.

That didn’t make a ton of sense to me, given that even at the time, there were plenty of web-based publishing systems, from expensive enterprise-level solutions to open-source projects.

“The ones we looked at didn’t meet our needs,” I was told. “They weren’t flexible enough. And plus, we should be able to make money selling our CMS to other people.”

So the decision was made: take the existing CMS, update it with new features and capabilities, while retaining the same level of nearly-infinite flexibility.

But it nagged at me that the editors didn’t like it. They were the ones who had to use it, day in and day out. The way I saw it, even if the guy who built your house used some sort of highly-advanced construction techniques, it didn’t much matter if you couldn’t reach the cabinets and were always banging your shins on the stairs.

And constructing this upgrade presented its own problems. For the original developers—smart folks, I might add—I think it was just a question of how fast they could type. But for those of us trying to learn the system, it was like deciphering stereo instructions written in Egyptian. For all its flexibility, the code was incredibly obtuse; for me, raised on a philosophy of “just make it better and get it to the customer,” I was mystified by this insistence on absolute perfection at the code level at the expense of clarity.

And, mystified by the fact that the main developers didn’t seem to think it was necessary to do any User-Acceptance Testing with the writers. Or, to my recollection, even to ask their opinions.

The end result seemed like a dinner chair crafted out of the finest diamond: brilliant, internally perfect, and yet, utterly uncomfortable when put to use.

Did we meet our goal? Yes. We were able to roll out the desired new features. We didn’t hit our deadlines, mostly due to the struggles of developers like me, who either weren’t smart enough, experienced enough, or just familiar enough to comprehend the core code.
But the users of the site had their new information. And the editors had the tools they needed to provide it.

That doesn’t mean I consider the project to be a success.

The first lesson I took away from the experience goes back to the fact that there were two sets of users when it came to this new CMS: the readers of the site, of course. But also the writers.

And the writers, I felt, were utterly neglected.

I remember being in the training meetings with the staff, shortly after the new system was launched, watching them struggle to interact with the new system—this was, after all, the first time any of them had any input at all into the technology.

This would have made sense, had we decided to utilize some outside vendor. But this was a custom-tailored suit; why on earth hadn’t we even asked the people wearing it so much as their color preference, much less their precise measurements?

We had built a solution for one set of customers—the readers—and had utterly neglected the other. And the responses to their confusion from my fellow developers were shockingly dismissive, implying that they weren’t “thinking about things the right way,” that “they didn’t get it,” that “this is the way you need to work and that’s the end of it.” Utterly unsympathetic.

So the first lesson I took away was this: you have to consider all the users of your product when you’re designing a new system. Yes, people do tend towards the lazy, and yes, any change requires modification of long-established habits, but you can’t just shove something new in people’s faces and say, “Deal with it.” Especially if you custom-built the system in the first place!

User-Interface and User-Acceptance Testing aren’t just boxes you check the day before you launch. You need to involve real users in your process, or you’re going to have a lot of unhappy users in the end. And while internal users may not have much of a choice, shouldn’t you at least try to keep them happy? They’re your teammates! Why would you throw them under the bus?

The second lesson learned is that frameworks are fun. APIs are fun. Systems, languages, and architectures are fun.

Have you ever asked a developer to perform a task and heard the reply, “I just need to build out a framework, an Application Programming Interface, a tool, a language, a system, and then it’ll be trivial to do that thing that you wanted.”

This is a dirty rotten lie.

The truth is, performing tasks is like painting the barn when you’d rather be painting the Sistine Chapel. It’s often menial, boring and dull.

But it pays the bills. That’s the problem: programmers want to do work that is exciting, innovative, and creative. And if you work for Google, Microsoft, Apple, or any other company who has taken up the mantle of envelope-expansion like a modern-day Xerox PARC (look it up), that’s just great. Somewhere, there’s a sales and marketing guy dedicated to selling your brilliance.

In most companies, though, their needs e.g. Innovation involve getting the server to not crash and figuring out why the CEO can’t seem to get his Internets to work right.

Fun? No. But when the server is up, the company makes money. Which pays paychecks. And keeping the CEO happy is also important, in terms of not getting fired, and based on (hopefully) his/her leadership for the organization.

All this integrates quite nicely into the third lesson of this case: focus on your core business.

Was our core business building content-management systems?

No.

So why did we build our own?

I frankly think that the answer of “we couldn’t find one that would meet our needs” was an excuse presentedby programmers who didn’t want to solve boring (but important) business problems; programmers who instead wanted to show off their chops. I’ve frequently been guilty of it myself.

Is a commercial solution “good enough?” Can you make minor modifications to your business to accommodate the shortcomings of the tool everybody else is using?

If the answer is “no,” you need to really, seriously re-evaluate. Are you that unique?

And does it matter? Shouldn’t the content of your opinions matter? If you’re making a movie but can’t afford the latest 3D technology, can you step back for a second and ask yourself, “can I tell an effective story without this technology?”

Listen: if you truly depend on innovation, innovate. Good luck. It’s hard enough to start a new business working in an established field. Trying to do it while simultaneously building a market is almost impossible. But it has been done, and continues to happen.

First, though, think about your core business. What brings in revenue for your company? That’s nice that you might someday open a shop to sell the cupcakes you bring to the company picnic. And everybody agrees that the pictures you’ve taken of your cat are adorable.

But are you going to quit your job to sell them?

Then why would your employer embrace a line of business outside of their declared practice?

If you’re still struggling with this one, think of it this way: would you buy the best brownies on earth from Jiffy Lube? Would you trust Microsoft to walk your dog? Would you buy a suit from Budweiser?
Do what you do. Think long and hard before you expend significant resources on other stuff.

Posted in Business, Life, Mini-Cases | Tagged , , , , , | Leave a comment

mini-cases: things take time

My manager uttered a phrase that, to a software developer, was simultaneously thrilling and terrifying: “It’s time for an upgrade.”

I was working for a company in the financial services sector; their core business involved a proprietary system for predicting the likely performance of publicly-traded companies. It was a good company, and a solid system.

And the technology behind it was…functional. Yes, it was cobbled together with the programming equivalent of duct tape and string; some PHP language here, Javascript language there, a few different databases, half the code in one version-control system and the other half on somebody’s hard drive. Not a textbook example of a best-in-class enterprise-level application, but it was functional, and it made money.

However, with a new CEO came new expectations of growth. We realized that, if our sales projections came remotely true, our little web application would be quickly overwhelmed. So it was time to search for a replacement.

Nobody was really against this plan; that was the “thrilling” part of the project. We recognized that the current system had its shortcomings, and we welcomed the chance to have formal approval to build something better.

We decided that we’d try not to reinvent the wheel, and management evaluated various “enterprise” platforms with the built-in features, functionality and scalability we expected to rapidly require. The one they picked wasn’t a black horse candidate by any means, and we were all pretty excited by the sales demos.

There was one very important caveat: this particular platform was written in a language that, although popular, was not one that any of the developers (including myself) were experts in. But we would have plenty of training, we were told, and consultants would be on-hand to help us build the application.

That was the “terrifying” part.

We commandeered an empty office, moved our desktop PCs into our new bullpen, scheduled training sessions, met our consultants, and immersed ourselves deeply in our new development environment. And so it went, for a number of months. Code, test, refactor, repeat.

I’m not sure exactly when we realized we were not going to meet our deadline.

Maybe it was after we discovered that the process of deploying code on our new platform was significantly more involved than we’d previously believed. Maybe it was when we found that code that deployed fine in development mysteriously failed on the not-yet-live production server. Or when we realized that we couldn’t debug the production code by just outputting errors to standard output—we needed specialized debugging subroutines.

Which also didn’t work.

Plus, we were understaffed. Well, to be more specific, we didn’t have too few staff, we had too few staff who knew what they were doing. As I recall (though I could be wrong) I was one of the only ones who had exposure to this particular language, and my experience involved reading most of a “For Dummies” book and following some online tutorials. It was the blind leading the blind, deaf and dumb.

Personally, I realized we were in trouble I discovered that our new platform’s vendor had recommended that a group of programmers—with multiple years of experience in the language the platform used—would probably take about 18 months to deploy the sort of application we were attempting to build.

The application we were attempting to build in 6 months.

Was the project a failure? Well, we did code a stopgap solution in a language I was far more experienced with, which only took a few weeks. Marketing had to scale back a bit on some of their promises. Sales had been…optimistic…in their estimates of new customers, so that ended up being okay.

But did we build the application we had hoped to build, using our fairly expensive new enterprise-level framework?

Not even close.

We spent a lot of money. We met our needs, but not in the way we had hoped…sunk costs, in the end. I left that company not long afterward—certainly not as a result of this project. I had personal reasons; specifically, I was trying to woo my now-wife, which worked, so, good decision. Career isn’t always everything.

I like to think that some lessons were learned (besides the above exhortation that your job sometimes has to take a backseat to your personal life). First, while I strongly, strongly recommend using frameworks rather than solving every problem from scratch, there’s nothing like having a backup in your back pocket. Embrace your chosen new language, but if it all hits the fan, there’s nothing like falling back on a time-tested classic—PHP, Ruby on Rails, Excel, Access, or a shoebox full of index cards.

You can carve the following on my tombstone: Technology does not make money. Solving problems makes money.

Second: VARs (Value-Added Resellers) or vendors or providers or whatever are in the sales business. While they will (hopefully) not lie, they have no vested interest in saying anything contrary to that which will get you to adopt their solution, thus increasing their sales numbers.

If they tell you that doing X with their solution will take time period Y, they are erring on the low side. Think about it: if a person selling a house tells you it’s “10 minutes from downtown” they have absolutely no reason to believe that it only takes 5 minutes; if they thought that, they’d say “the house is 5 minutes from downtown.” Most likely, getting to downtown in “10 minutes” means either you’re weaving in-between buses on a motorcycle at 70 mph, or it’s 5 a.m. on New Year’s Day. 10 minutes is the absolute lowest value they felt comfortable quoting.

So if the vendor says “18 months” and you have a 6-month deadline, one of three things needs to happen: you need to hire a bunch of developers with the recommended level of expertise, or you need to change your deadline, or you need to scale back your project.

The second and third options are, in my experience, the ones most likely to be successful, and the least likely to be followed (see “Mini-Cases: Taking Stock”, on the importance of being absolutely sure you need a given feature).

The first option is the third lesson I learned: you’ve got to plan ahead.
I remember being in a meeting, hearing a manager talk about an upcoming staff augmentation, designed to help us meet our rapidly-approaching deadline. I (in a serious Career-Limiting Move) raised my objection that, even if a new hire arrived the next day, it would still take them three to six months to get up to speed, that hiring someone would likely take at least a month even if we started looking right after the meeting was over, and that, regardless, our deadline would be long-past when by the time our alleged new people were actually adding any value.

This was not well-received. Lesson 3.5: calling your superiors on their questionable logic, no matter how well-intentioned, is not a good thing to do.

But my intentions were pure, and, frankly, make sense: if your strategy involves employees having requisite skills, you need to recognize that this takes time.

There are lots of people without jobs right now. And there are lots of jobs available. Unfortunately, the skills of the available workforce may well not match with the requirements of the available jobs. So that complicates things: you have 500 .NET developers in your backyard, but you use PHP.

Second, a new employee is probably going to need, at a minimum, 2 weeks to give notice at a current job. And don’t forget that scheduling interviews takes time as well. If you don’t think ahead, you’re not going to have the resources you need in time for them to do any good.

One final lesson: a smart, capable person was in charge of web application development. It’s my understanding that the above-mentioned CEO asked him if he felt we were capable of meeting the goals of the business in the requisite timeframe, to which he gave a realistic reply. He was promptly demoted below another individual who responded in the affirmative to the impossible task.

Wishful thinking.

Don’t mistake caution for a bad attitude. Don’t mistake enthusiasm for idiocy.

Or plain old…questionable logic.

Posted in Business, Life, Mini-Cases, Tech | Tagged , , , , , | 1 Comment

mini-cases: keeping the lights on

You know your job is in trouble when you can’t log on to the Internet, and the Internet Service Provider tells you that the bill hasn’t been paid in months.

Such was my situation at a small government contracting company. But even before our Internet issues, there were other signs that the company wasn’t in the greatest health: slow payment from customers, turnover, and finally, some real stretching in terms of what our core business was.

This mini-case isn’t so much about a small project or a new software feature. Rather, it’s about the experience of being at a small company when things weren’t going so well. The decisions made at the top were pretty clear: keep the company afloat!

First, we started looking into doing projects for current customers that were slightly outside our core of software development. We actually became a small video production company, filming a fairly creative series of training videos; I got to wear a production assistant’s hat and even ended up doing some acting and voiceover work.

Perhaps the next thing that became apparent was the aforementioned slowdown in bill payment. And then, we abruptly decided to move the company’s offices from fairly high-priced space into a sort of sublease situation with another company friendly to ours.

Which was about the time that I decided it was time to leave. But even after I was gone and cashflow had slowed to the point where employees had to be laid off, essential staff were given the option to continue working as contractors—and some of them did.

And the impact? The company, such as it was, survived for about another year after my departure. Not too bad.

But there were plenty of lessons to come out of the experience, the first of which is key to all companies, especially startups: understand the sales cycle for your industry!

For us, government contracts were our bread and butter—and the government is slow. Slow to pay, slow to make decisions, slow to give feedback, slow to do everything. In fact, a request for feedback that had been submitted to a client agency before I was an employee still hadn’t been fulfilled by the time I had left.

But while the government is slow to pay, your bills still come due with alarming regularity, from rent to paychecks to those pesky folks at your ISP. You have to understand this, and understand that if there is a difference between when the actual check comes in the mail and your bills come due, you need to figure out how to bridge that gap. Thus, you probably need a fairly sizable cushion of cash just to get started in an industry with a long, slow sales cycle.

Without that cash cushion, it can become inevitable for a company to get caught in a “death spiral.” You don’t have the cash to make payroll, which means that you have to lay off (or otherwise lose) key employees who would have done the work that would eventually get you paid. No employees, no output, no payment, and you have to cut costs even more. At that point, you’re locked in the death spiral, where your costs will always exceed your revenue, and it’s only a matter of time before the padlock goes on the door.

Now, maybe this particular company had that, once upon a time. Perhaps they grew too fast, or didn’t land a key contract that they were counting on. I don’t know the specifics. All I know is, you can have all the “revenue” in the world: without cash, you’re sunk.

Some of the actions taken by this company—delaying payment, for example—probably fall on the dark side of the ethics scale. To which you might reply, “but they did keep the company afloat!”

But they weren’t without cost.

First, there was the cost to the company’s reputation. If word got out that the company would resort to delaying payment as a business tactic, that could have a very negative impact on everything from creditworthiness to client relationships.

Second, but closely related, was the impact of the “stay alive” actions on morale. Nobody wants to be on a sinking ship, and by the time we resorted to the fairly desperate (I felt) measure of sharing office space, I had determined that things weren’t going to get any better.

If management had been honest about the company’s problems and outlined a plan for survival, would that have convinced me to stay? I honestly don’t know. But pretending that everything was fine certainly didn’t help.

Was there anything that could have been done differently? Well, we could have made more money and had more work. But that’s easier said than done.

Maybe the biggest lesson is this: running a successful business—and keeping it running—is hard.

Posted in Business, Life, Mini-Cases | Tagged , , , , | Leave a comment

mini-cases: more movement means more mistakes

I used to have the power to email over 250,000 people at my fingertips. We weren’t spammers; far from it: we were publishing a successful newsletter to all those subscribers, and had quite a few who were actually paying for a premium-level product.

But that broadcasting process was nerve-wracking. Our specialized email broadcast utility (you can’t just email 250K people with Outlook) had 4 little checkboxes that you had to click, one at a time, before hitting the big “send this message” button, just to make sure that you were serious. That you had done your double-checking.

I hated it.

Not the checkboxes, or the fact that we were broadcasting to a quarter of a million people. I hated that there were so many manual steps.

I’d get the newsletter in Word format, at which point I’d copy-paste it into a text editor. I’d change headings into ALL CAPS, replace horizontal lines with exactly 68 “-” characters (we determined that 68 characters was the maximum number that wouldn’t wrap on most email clients of the time), and make sure that paragraphs had a space between them.

And then, after the email blast, we’d post the newsletter on our site. That involved turning the headings into anchors, adding a table of contents to the top (with functional links), and basically wrapping every paragraph in a <p> tag.

It was always the same sort of thing: a header, a footer. 7 to 12 sections, with multiple paragraphs of content. So I resolved to build a semi-automated system to streamline the process.

It was another simple sort of web application, with a dropdown menu to ask how many sections there would be, then some text areas to copy the content of each section into place. The code added the appropriate spacing, headings, table of contents and anything else necessary, then displayed a “test” and “broadcast” option: the “test” option sent the message to a selected number of editors so they could preview the output. Then, when they were ready, they could send the content to one of a number of pre-selected mailing lists. And, the program displayed HTML output that could be copy-pasted into our existing content management system, once the email broadcast was out.

The biggest mistake I made with this project was not recording the time/error savings. Anecdotally, I can say that I was able to leave work much earlier on days we did broadcasts, as the editorial team was able to use the new tool without my help. I don’t know for sure that we really reduced the number of mistakes…but quality control was now completely in the hands of the writers.

And that was the first lesson: quantify changes, and do it right away. In this case, there wasn’t anybody on my case to justify the results, but I also wasn’t able to easily show to management that my new system had a real impact. It would have been trivial, at the time, to go through my email and generate some sort of graph illustrating the error rate before and after the new system. But now, years (and jobs) later, forget finding good data.

The second lesson has to do with how much automation I did. My system didn’t integrate nearly as much as it might have: the content that came out of it actually interfaced with the existing email broadcasting system as if it were just a computer-controlled copy-paste. The mailing lists pulled from an external database. The generated HTML was temporary; I don’t believe it even created so much as a text file, instead of some copy-paste-ready text in a textbox. And that text had to be pasted into the existing content management system.

But that was ok. I knew the team, and I understood the importance of delegation: I gave them the tools to be able to perform the technical tasks I usually performed, and reaped the rewards. I saved myself valuable time, and I instantiated a far more reliable proxy than myself—a proxy who couldn’t make accidental mistakes.

Posted in Business, Life, Mini-Cases | Tagged , , , , , | Leave a comment

mini-cases: taking stock

It’s not unusual that writers occasionally need to do fact checking on the stories they write, and when your “stories” consist of stock recommendations, it’s even more important to keep your ducks in a row.

Such was the situation at the publishing company where I worked early in my career. We had a smart, visionary “idea guy” who came up with the basic philosophy for the stocks we picked, and a group of editors who took his big ideas and turned them into weekly articles and advice that we sent to our subscribers. Some were paying customers, some only signed up for the free newsletter, but all were interested in our perspective on investing. We had to make sure that we kept our credibility intact.

The only problem: there were so many stocks, so many opinions issued, and such a volatile market that it often turned into a major chore just to determine our historical opinion of a given stock…had we, in fact, previously recommended a stock that we were now panning? If we claimed gains of X% for a given stock, what share price was that based upon?

Each editor had his or her own system, consisting of various Excel spreadsheets, Word docs, text files and Post-It notes. As a young go-getter with a background in journalism, I was already close with the editorial department—I even helped them to proofread their articles when they were short-staffed—and so I quickly volunteered to help them come up with a better solution.

Being young and needing some good portfolio pieces, I decided to hand-code a database-driven mini-website. I believe I called it EMERALD, which stood for “Editorial-something-something-Database;” editors could log in, enter a stock ticker, a date, and a number of note fields regarding their current opinion on that stock.

I wasn’t savvy enough to get real metrics on the time savings from my new web application, but I’d estimate that it saved somewhere between 5 and 10 hours a week for the already overworked editors—probably at least a $10K yearly cost savings, depending on how you did the math. Not bad for a few days of programming work.

In this case, the project was a success, despite its technical shortcomings—the main screen could get very long since it lacked basic pagination options, for example, and the table structure resembled nothing so much as a large Excel spreadsheet. Which brings me to the first lesson, a real classic: the perfect is the enemy of the good. All my friends and coworkers really needed was a system that was better than what they were using, which was no system at all.

But your clients are the ones you need to convince that your solution is “good enough.” That brings me to my second lesson: if you’re going to do consulting work, you really need to develop a good rapport, and that means walking the walk and talking the talk. It wasn’t hard for me to gain the trust of the editorial team because of my own experience in journalism, and once they understood that I understood them and was on their side, they depended on me to help solve their issue.

In retrospect, however, I could have built a simpler, better system in even less time and with potentially better results—a centralized Access database, or even a shared Excel file might have met their needs. And that’s the third lesson: there’s a complex relationship, for developers, between challenge and efficacy. I wanted to do the project with the languages, database and framework I used because it would benefit me, as a developer, to a) gain more experience and b) have evidence of that experience—just as, if I were trying to get a TV job, my blog would rapidly become a vlog. It’s important to understand the needs of your problem solvers—as well as the needs of the problem owner—when coming up with a solution.

That’s true not just for software developers, but for anybody who is a worker bee in your organization: useful experience is its own reward.

Posted in Business, Life, Mini-Cases, Tech | Tagged , , , , , , , | Leave a comment