Published articles Tiny Tiny RSS/1.10 2017-01-18T00:00:00+00:00 Machine Learning The pile gets soaked with data and starts to get mushy over time, so it's technically recurrent. ]]> 2017-05-17T00:00:00+00:00 Saturday Morning Breakfast Cereal - Blood of the Bayesian

Click here to go see the bonus panel!

Also one about a werewolf who uses statistical methods to determine he's actually an insane man experiencing a prolonged psychotic episode.

New comic!
Today's News:
2017-05-10T14:36:00+00:00 Saturday Morning Breakfast Cereal (updated daily) Mastodon is Like The Early Days of Many Different Tech Things

mastodon I can’t believe that I’m about to say this: I just started using the new social network, Mastodon. I’m not saying YOU should use it, YET, but I can tell you that there’s quite a buzz about it.

What is Mastodon

It’s a social network, but a distributed one. Instead of us all showing up on a bunch of servers we think of as “Twitter,” we can sign up to a “home” “instance” of a server (I’m using quotes for mortals – developers are already making a face at me, but I write my posts for humans, not code monkeys). I know. Don’t panic. This will take some explaining.

Continue Reading

The post Mastodon is Like The Early Days of Many Different Tech Things appeared first on

2017-04-06T21:41:06+00:00 Chris Brogan Saturday Morning Breakfast Cereal - Winning Arguments

Click here to go see the bonus panel!

I like to imagine this is what it's like at Nate Silver's house.

New comic!
Today's News:


2017-04-30T15:44:00+00:00 Saturday Morning Breakfast Cereal (updated daily) Here to Help "We TOLD you it was hard." "Yeah, but now that I'VE tried, we KNOW it's hard." ]]> 2017-05-01T00:00:00+00:00 Saturday Morning Breakfast Cereal - Dungeon Classes

Click here to go see the bonus panel!

Anyone caught emailing me in regards to the accuracy of today's comic shall be tarred, feathered, and made to carry a sign that reads 'No fun.'

New comic!
Today's News:

Last full day to get your BAHFest East tickets! We moved over a bunch of cheap tickets, but after these are gone, there are no more!

Also, in case you missed it, I'll be signing books prior to the show at MIT Press Bookstore, from 3-430. If you don't want to wait in line after the show, this is the way to go. <3


2017-04-22T13:24:00+00:00 Saturday Morning Breakfast Cereal (updated daily) Survivorship Bias They say you can't argue with results, but what kind of defeatist attitude is that? If you stick with it, you can argue with ANYTHING. ]]> 2017-04-21T00:00:00+00:00 Saturday Morning Breakfast Cereal - The Bones Speak

Click here to go see the bonus panel!

Now that I can no longer have faith in all the beautiful things I once held dear, I've decided to go into finance.

New comic!
Today's News:
2017-04-08T15:00:00+00:00 Saturday Morning Breakfast Cereal (updated daily) CodeSOD: A Piece of the Variable

In the Star Trek episode, “A Piece of the Action”, Kirk and his crew travel to Sigma Iotia II, a planet last visited before the Prime Directive of non-interference existed. Well, they left behind a book, Chicago Mobs of the Twenties, which the Iotians took as a holy guide, to be imitated and followed even if they didn’t quite understand it, a sort of sci-fi cargo-cult. Cue the crew of the Enterprise being threatened with Tommy Guns and guys doing bad Al Capone impressions.

Michael’s co-worker may have fallen into a similar trap. An advanced developer came to him, and gave him a rule: in PHP, since variables may be used without being declared, it’s entirely possible to have an unset variable. Thus, it’s a good practice to check and see if the variable is set before you use it. Normally, we use this to check if, for example, the submitted form contains certain fields.

Like Bela Okmyx, the “Boss” of Sigma Iotia II, this developer may have read the rules, but they certainly didn’t understand them.

if(isset($numDIDSthisMonth)) {
   if($numDIDSthisMonth == "") {

if(isset($numTFDIDSthisMonth)) {
   if($numTFDIDSthisMonth == "") {
   if($numDIDSthisMonthToCharge == ""){
if(isset($STDNPthisMonth)) {
   if($STDNPthisMonth == "") {
if(isset($TFNPthisMonth)) {
   if($TFNPthisMonth == "") {
if(isset($E911thisMonth)) {
   if($E911thisMonth == "") {
if(isset($E411thisMonth)) {
   if($E411thisMonth == "") {
if(isset($PBthisMonth)) {
   if($PBthisMonth == "") {
if(isset($TFthisMonth)) {
   if($TFthisMonth == "") {

As you can see, in this entire block of variables, we first set the variable, then we check, if the variable isset, on the off-chance it magically got unset between lines of code, and then we double check to see if it’s an empty string, and if it is, make it zero.

For extra credit, some of these variables are used in the application. Most of them are not actually used anywhere. See if you can guess each ones!

[Advertisement] Manage IT infrastructure as code across all environments with Puppet. Puppet Enterprise now offers more control and insight, with role-based access control, activity logging and all-new Puppet Apps. Start your free trial today!
2017-04-10T10:30:00+00:00 Remy Porter The Daily WTF Saturday Morning Breakfast Cereal - Neuroses

Click here to go see the bonus panel!

I'm just now realizing that this is a sort of prequel to that Dilbert comic I did.

New comic!
Today's News:

Hey UK buyers of Soonish! Apparently some of you got your orders cancelled/refunded. What happened is this: When we first launched, Amazon UK listed both the US version and the UK version. Some of you bought the US version, which has now been de-listed. If you want the book (you do), just go here to buy. This version is actually a bit cheaper!

2017-04-06T14:08:00+00:00 Saturday Morning Breakfast Cereal (updated daily) Security Advice Never give your password or bank account number to anyone who doesn't have a blue check mark next to their name. ]]> 2017-04-05T00:00:00+00:00 Saturday Morning Breakfast Cereal - A Job

Click here to go see the bonus panel!

Sadly, I'm not accepting applications to work for SMBC.

New comic!
Today's News:

Just three weeks until BAHFest East and we've already sold half of the tickets! Buy soon if you want one of the cheaper ones.

2017-04-04T13:58:00+00:00 Saturday Morning Breakfast Cereal (updated daily) Vomiting Emoji My favorite might be U+1F609 U+1F93F WINKING FACE VOMITING. ]]> 2017-03-20T00:00:00+00:00 Saturday Morning Breakfast Cereal - Password

Click here to go see the bonus panel!

The trick to passwords is to just reset them every time you need to log in.

New comic!
Today's News:
2017-03-26T15:00:00+00:00 Saturday Morning Breakfast Cereal (updated daily) Staying with the US Digital Service

A few months ago, I took a leave of absence from Google to do a stint with the US Digital Service. A lot of people know about the US Digital Service because they helped rescue the website. But you might not realize that the US Digital Service has helped veterans get their health benefits, brought bug bounties to the federal government, and helped the IRS protect taxpayer info.

USDS logo

When I joined the US Digital Service, I only planned to stay for three months. That quickly turned into six months after I saw the impact of the USDS. In the last month, I made a big decision. On December 31, 2016, I resigned from Google. I’m currently serving as director of engineering for the USDS. Mikey Dickerson, the first administrator of the USDS, is a political appointee, so he’ll step down on Inauguration Day. When that happens, I’ll serve as acting administrator of the USDS. The work that the USDS does is critical to the American people, and I’m honored to continue that tradition.

If you’re reading this blog post, odds are that you might be a tech geek yourself. I’d like to ask you to review what the US Digital Service has accomplished in just a few years. If you’re a more visual person, you might enjoy this short video:

Working for the government doesn’t pay as well as a big company in Silicon Valley. We don’t get any free lunches. Many days are incredibly frustrating. All I can tell you is that the work is deeply important and inspiring, and you have a chance to work on things that genuinely make peoples’ lives better. A friend who started working in this space several years ago told me “These last five years have been the hardest and worst and best and most rewarding I think I will ever have.”

If you have experience in the tech industry, there’s a decent chance that you have skills that can benefit the American people. If you’re considering joining the US Digital Service, please fill out an application.

2017-01-19T03:47:17+00:00 Matt Cutts Matt Cutts: Gadgets, Google, and SEO Hans Rosling – the World’s Greatest Data-Storyteller

Very sad to hear that Hans Rosling has passed away. Such a grand ninja of dataviz. His spectacular talks convinced me that data stories could be enlightening, illuminating, and entertaining – all at the same time.

Some of his best sequences:
» Five ways the world is doing better than you think (2013) – people are healthier, better educated than you might think
» 200 countries, 200 years, 4 minutes (2010) – health data in visual space
» The best stats you’ve ever seen (2006) – debunking myths about the so-called “developing world”

And heartfelt obits:
» NY Times: Rosling was “a Swedish doctor who transformed himself into a pop-star statistician”
» Guardian – “a kind and constantly curious genius”
» The Economist “a natural showman”

Thank you Hans.



2017-02-14T14:05:48+00:00 David McCandless Information Is Beautiful Based on a *True* True Story? Oscars edition

Oscar-nominated Hacksaw Ridge, Hidden Figures & Lion are all “based on true events”. But which is truly the truest of them all?

We carried out a scene-by-scene, beat-by-beat visual fact-check of several Oscar contenders – plus other true-story films like The Big Short, Spotlight and Wolf of Wall Street. Check out the newly-updated interactive visualization.

» See the truth
» Or just read the nicely tabulated data

2017-02-24T22:32:11+00:00 David McCandless Information Is Beautiful Amazon and Pinterest Threaten to Shake Up the Search Ad Market

Amazon has spent the past two years quietly building out a search advertising business, an area where Pinterest has just invested. Now ad buyers are hoping that both companies increase competitive pressure on Google, the category’s dominant player.

2017-03-06T11:00:14+00:00 Technology What Is a Data Scientist, Anyway?

Having a facility with numbers helps in the field of data science. But that’s only part of the equation.

2017-03-13T03:08:37+00:00 Technology Beware Collaboration-Tool Overload

Employees are struggling to cope with an abundance of collaboration tools, prompting providers to try to simplify things for them.

2017-03-13T03:12:15+00:00 Technology Facebook Bans Use of User Data for Surveillance

Facebook said data about users cannot be used for surveillance, cracking down on a method police departments allegedly used to track protesters and activists.

2017-03-13T22:09:50+00:00 Technology Hacking The dump also contains a list of millions of prime factors, a 0-day Tamagotchi exploit, and a technique for getting gcc and bash to execute arbitrary code. ]]> 2017-03-08T00:00:00+00:00 Listening Sure, you could just ask, but this also takes care of the host gift thing. ]]> 2017-03-06T00:00:00+00:00 Borrow Your Laptop If used with software that could keep up, a scroll wheel mapped to send a stream of 'undo' and 'redo' events could be kind of cool. ]]> 2017-03-03T00:00:00+00:00 Saturday Morning Breakfast Cereal - Physics is Poetry

Click here to go see the bonus panel!

New rule: Anyone referring to X as the poetry of Y must have actually ever read a poem.

New comic!
Today's News:
2017-03-03T15:57:00+00:00 Saturday Morning Breakfast Cereal (updated daily) For Generation Z, 'Live Chilling' Replaces Hanging Out in Person

For Generation Z, ‘live chilling’ replaces hanging out in person. Teens are finding their friends via video chat, in apps such as Houseparty, Fam and Kik, writes Christopher Mims.

2017-02-19T15:49:02+00:00 Technology Your Biggest Online Security Risk Is You

Phishing emails, texts, Facebook pop-ups and chat messages have never been better at tricking us into handing over valuable information; Geoffrey A. Fowler shares the latest tips for keeping your guard up.

2017-02-22T18:18:58+00:00 Technology Splunk Raises Annual Revenue Target

Data-analytics firm Splunk raised its revenue target for the year after results in the most-recent quarter easily beat internal and Wall Street projections, even as revenue growth continues to decelerate.

2017-02-23T22:28:30+00:00 Technology Software Bug at Web-Service Provider Causes Data Leaks

A software bug at a widely used internet-service provider leaked sensitive data for months, potentially creating security headaches for thousands of its corporate customers.

2017-02-24T22:28:43+00:00 Technology Location Reviews Google and Yelp keep deleting my scathing reviews of the Mariana Trench, the Chernobyl reactor core, the jet stream, and the equator. ]]> 2017-02-24T00:00:00+00:00 What’s in My Bag? — Mark Slavonia

I log about 10,000 miles per year from my home in San Francisco and around the world. I use this gear for short city loops or for 100 mile adventures. It’s reasonably light and easy to carry, and iit gives me what I need to handle mishaps and get home safely.

The bag:

Silca Seat Roll
Silca Seat Roll (discontinued, 100 grams)
Some riders carry all their gear in their jersey pockets, but I like to reserve those for my jacket, phone, and food, so I use a small bag under the saddle. My current favorite is a Silca Seat Roll, waxed canvas that wraps like a burrito. It’s discontinued but similar products are available. I like the tool roll design because I can unroll it on the ground and easily get to all my gear when I need to make a repair.

What’s in the bag:

Spare Tube (varies, 110 grams)
Lighter tubes are available.

Park Tool Self-Adhesive Patch Kit ($6, 4 grams)
Emergency use only if I flat more than once.

Tire Levers ($5, 24 grams)
These are Lezyne Matrix Power Levers which work well for me.

Tire Casing Boot (varies)
If a flat tire damages the casing of the tire it’s helpful to have a tough, flexible material like Tyvek to patch or “boot” the tire.

Ritchey CPR-9 Multi Tool (discontinued, 24 grams)
This handy little multitool includes 2-6mm allen wrenches, a screwdriver and a spoke wrench. It’s got no moving parts and it’s very light weight. I bought a few before they were discontinued. For bigger adventures I sometimes bring a larger Ritchey multitool with a chainbreaker.

CO2 Cartridge (58 grams) and inflator (14 grams)
Although I carry a good pump, on this bike I also carry CO2 cartridges for quick inflation when I’m on group rides and people are waiting. This costs me two ounces, on some of my other bikes I just rely on the pump.

Also included:

  • $20 for emergencies
  • Personal cards with my name and email address for when I meet people

Total weight of the packed bag = 347 grams


pump tube co2
Lezyne Road Drive Hand Pump ($45)
I’ve tried just about everything and I recommend the Lezyne Road Drive pumps that attach with a threaded hose. The larger ones weigh about 110 grams, make it easy to inflate a tire to 100 psi, and mount securely on the bike’s water bottle screws. Doubling up with the cartridge and pump on this bike is overkill, I know.

Phone, with DistilUnion Wally Stick-on pocket ($30) for credit card, $20, and more business cards (in a LocSak or ziploc bag on wet days).

Knog Blinder Mini Dot ($30, 16 grams)
This rear light is so light and small that I leave it on the bike all the time. For a front light I use a Light and Motion Urban 800 ($100, 120 grams), which I mount on the handlebars when needed.

Shimano CM-1000 Sport Camera
I’ve been using this because of its slim and unobtrusive profile, but the image quality isn’t quite a good as a GoPro and there’s a lot less support.

On a lanyard around my neck I carry a dog-tag style personal ID and a reading monocle by Nearsights ($60) — very handy for middle-aged eyes.

Cable Lock
If I might be making a quick coffee stop I’ll throw a small skiing cable lock in my back pocket.

Garmin 500 GPS ($250, 57 grams)
Still my favorite.

Of course I vary this kit depending on the ride and the conditions but as a base kit, this works pretty well for me. Many happy miles.


-- Mark Slavonia

[Cool Tools Readers! We will pay you $50 if we run your "What's in My Bag" story. Send photos of the things in your bag (and of the bag itself, if you love it), along with a description of the items and why they are useful. Make sure the photos are large (1200 pixels wide, at least) and clear. Use a free file sharing service to upload the photos, and email the text to]

2017-02-23T16:02:38+00:00 cooltools Cool Tools Editor's Soapbox: The Billable Hour

For every line of code that ends up in software the general public sees or interacts with, for every line in your Snapchats and Battlezone: Call of Honor Duty Warfare, there are a thousand lines of code written to handle a supply chain processing rule that only applies to one warehouse on alternating Thursdays, but changes next month thanks to a union negotiation. Or it’s a software package that keeps track of every scale owned by a company and reminds people to calibrate them. Or a data-pump that pulls records out of one off-the-shelf silo and pushes them into another.

That’s the “iceberg” of software development. In terms of sheer quantity, most software is written below the waterline, deep in the bowels of companies that don’t sell software, but need it anyway. That’s the world of internal software development.

And internal software development, in-house software shops, have a problem. Well, they have lots of problems, but we’re going to focus on one today: Internal Billing and the Billable Hour.

At a first pass, internal billing makes sense. If you are a widget manufacturer, then you want the entire company aligned with that goal. If you buy raw materials, those raw materials are going into widgets. If you pay laborers, their labor should be going into making widgets. If you buy capital assets, they should be things like widget-stamping machines.

A person using a computer and a calculator at the same time for some insane, stock-photo related reason

But you can’t just build widgets. Your workers need to organize via email. The new Widget-Stamper 9000 needs network connectivity, so you need network drops and routers and switches, which in turn need regular maintenance. This is, in pointy-haired-boss speak, “overhead”. You need it, but it doesn’t directly make widgets. It’s a cost center.

So what do large companies do? Well, they take all those “non-productive” activities and shuffle them off into their own departments, usually in a “corporate SBU”. Then all the departments doing “real” work get a budget to spend on those “cost centers”. And thus, internal billing is born.

Each employee needs an email account. Let’s assign that a cost, a rough—sometimes very rough—estimate of the total cost of managing the email account. Our corporate IT department will charge $20/yr per employee to cover the storage, configuration, management, and helpdesk support associated with their email account—and so on through the list of IT-related goods and services. Now the idea is that individual departments know their IT needs better than anyone else. By putting them in control of their IT budgets, they can spend their money wisely.

If you’re a widget-making company, you view software and IT support as an overhead cost, and recognize that you only have the capacity to pursue a certain number of IT projects, this makes perfect sense. Budgets and billing create a supply/demand relationship, and they give corporate the ability to cut overhead costs by controlling budgets. (Of course, this is all founded on the faulty assumption that in-house software development is simply overhead, but let’s set that aside for now.)

The problems start when internal billing meets software development, usually through the interface of the “billable hour”. The combination of these factors creates a situation where people who are ostensibly co-workers are locked into a toxic client/vendor relationship. The IT department is usually in a disadvantageous negotiating position, often competing against external vendors for a business department’s IT budget. Treating corporate IT as the preferred vendor isn’t all sunshine and roses for the business, either. There are definitely cases where external vendors are better suited to solve certain problems.

Putting IT resources on a billable hours system introduces a slew of bizarre side effects. For one thing, hours have to be tracked. That overhead might be relatively small, but it’s a cost. “Idling” becomes a serious concern. If developers aren’t assigned to billable projects, the IT department as a whole starts looking like it’s being non-productive. Practices like refactoring have to be carefully concealed, because business units aren’t going to pay for that.

Spending more billable hours on a project than estimated throws budgets out of whack. This forces developers into “adaptive strategies”. For example: padding estimates. If you can get an extremely padded estimate, or can get a long-running project into a steady-state where no one’s looking too closely at the charges, you can treat these as “banks”. A project starts running over your estimate? Start charging that work against a project that has some spare time.

Of course, that makes it impossible to know how much time was actually spent on a project, so forget about using that for process improvement later. It also makes every project more expensive, driving up the costs of internal development. This drives business users to seek external solutions, spending their IT budget outside of the company, or worse: to find workarounds. Workarounds like maybe just building a big complicated Excel spreadsheet with macros in it.

This isn’t even always restricted to hourly charges, either. I saw one organization that had a charge-back rate of $10,000/yr for a SQL Server database. That wasn’t licensing or hardware, that was just to create a new database on an existing instance of SQL Server. The result? Pretty much no business unit had a working test environment, and they’d often stack four or five different applications into the same database. Rarely, they’d use schemas to organize their tables, but usually you’d have tables like: Users, Users_1, UsersNew, UsersWidgetsoft, ___Users.

Forget about upgrades, even if they’re required. Short of making organization-wide modernization a capital project, no department or business unit is going to blow their IT budget on upgrading software that already works. For example, Microsoft still supports the VB6 runtime, but hasn’t supported the VB6 development environment since 2008. So, when the users say, “We need to add $X to the application,” IT has to respond, “We can’t add $X unless we do a complete rewrite, because we can’t support it in the state it’s in.” Either the business ends up doing without the feature or they make it a demand: “We need $X and we need it without a complete rewrite.” Then your developers end up trying to breathe life into a Windows 2000 VM without connecting it to the network in hopes that they can get something to build.

Billable hours turn work into a clock-punching exercise. Billing time is how you’re judged, and whether or not that time is spent effectively becomes less relevant. Often, by the end of the week, employees are looking for ways to fill up their hours. This is a task that should be easy, but I’ve watched developers agonize over how much they’re going to lie to make their timesheet look good, and hit their “85% billable” targets. This gets especially bizarre since you’re not self-assigning tasks, but you have to have 85% of your time billable, and thus you need to take the tasks you’ve been assigned and spend a lot of time on the billable ones to make sure you hit your targets, turning five-minute jobs into ten-hour slogs.

We could go on dissecting the problems with billable hours, and these problems exist even when we assume that you can just view your in-house software as a cost center. Some of these problems can get managed around, but the one that can’t is this harsh reality: software isn’t a cost center.

I’ve heard a million variations on the phrase, “we make widgets, not software!” Twenty years ago, perhaps even ten years ago, this may have been true. Today, if you are running a business of any scale, it simply is not. It’s trite to say, but these days, every business is an IT business.

One project I worked on was little more than a datapump application with a twist: the data source was a flow meter attached to a pipe delivering raw materials to a manufacturing process. The driver for reading the data was an out-of-date mess, and so I basically had to roll my own. The result was that, as raw material flowed through the pipe, the ERP system was updated in real-ish time with that material consumption, allowing up-to-the-minute forecasts of consumption, output, and loss.

How valuable was that? It’s not simply an efficiency gain, but having that sort of data introduces new ways of managing the production process. From allowing management to have a better picture of the actual state of the process, to helping supply chain plan out a just-in-time inventory strategy, this sort of thing could have a huge change on the way the business works. That wasn’t a skunkworks idea, that wasn’t IT just going off and doing its own thing. That was a real hook for business process improvement.

Smart companies are starting to figure this out. I’ve been doing some work for a financial services company that just hired a new CTO, and he’s turned around the “We make $X, not software,” and started his tenure by saying, “We are a software company that provides financial services.” Instead of viewing IT as a sink, he’s pushing the company to view IT as a tool for opening up new markets and new business models.

So, yes, IT is a cost of doing business. You’ll need certain IT services no matter what, often fulfilled with off-the-shelf solutions, but configured and modeled to your needs. IT can also be a cost savings. Automation can free up employees to focus on value-added tasks.

But the one that’s underestimated in a lot of companies is IT’s ability to create value-added situations. If you make widgets, sure, it’s unlikely that your software is going to directly change the process of making widgets, so it’s unlikely that your software is itself technically “value added”. But a just-in-time supply chain system is more than just a cost savings or an efficiency booster. It can completely change how you manage your production process.

By placing the wall of billable hours between IT and the business, you’re discouraging the business from leveraging IT. So here are a few ways that corporations and management could possibly fix this problem.

First, as much as possible, integrate the IT staff into the business-unit staff. This might mean moving some corporate IT functionality out into individual departments or business units (if they’re large enough to support it), or dedicating corporate staff to a relationship with specific business units. Turn IT workers into a steady flat cost, not a per-hour cost. When trying to handle priorities and deciding how to spend this limited resource to get new software developed, business-unit management can set priorities.

If an organization absolutely must use internal billing to set priorities and control demand for IT resources, move as much work as possible into fixed-rate, flat-fee type operations. If a business unit requests a new piece of software, build a fixed-bid cost for that project, not an hourly cost.

While a “20% time” approach, where employees are allowed to spend 20% of their time on their own projects, doesn’t work in these kinds of environments, an organizational variation where some IT budget is used on speculative projects that simply might not work—a carefully managed skunkworks approach—can yield great benefits. It’s also an opportunity to keep your internal IT staff’s skills up to date. When you’re simply clocking billable hours, it’s hard to do any self-training, and unless your organization really invests in a training program, it’s easy to ossify. This can also involve real training, not “I sent my drones to a class, why don’t they know $X by now?” but actual hands-on experimentation, the only way to actually learn new IT skills.

All in all: billable hours are poison. It doesn’t matter that they’re a standard practice, they drag your IT department down and make your entire organization less effective. If you’re in a position to put a stop to it, I’m asking you, stop this. If you can’t stop it, find someone who can. Corporate IT is one of the most important yet under-prioritized sectors of our industry, and we need to keep it effective.

[Advertisement] Release! is a light card game about software and the people who make it. Play with 2-5 people, or up to 10 with two copies - only $9.95 shipped!
2017-02-23T11:30:00+00:00 Remy Porter The Daily WTF Blind Obedience

Murray F. took a position as an Highly Paid Consultant at a large firm that had rules for everything. One of the more prescient rules specified that for purposes of budgeting, consultants were only allowed to bill for 8 hours of work per day, no exceptions. The other interesting rule was that only certain employees were allowed to connect to the VPN to work from home; consultants had to physically be in the office.

The project to which Murray was assigned had an international staff of more than 100 developers; about 35 of them were located locally. All of the local development staff were HPCs.

With that much staff, as you would expect, there was a substantial MS Project plan detailing units of work at all levels, and assorted roll-ups into the master time line.

A soccer ref holding up a red card

The managers that had created this plan took all sorts of things into account. For example, if you attended three hours of meetings two days a week, then you only had 34 hours available for work; if you had to leave early one day to pick up your kid, it set those hours aside as non-work, and so on. The level of detail even took into account the time it takes to mentally put down one complex task and pick up another one. It was awful to look at but it was reasonably accurate.


Weather forecasters are wrong as often as they are right. However, the spiraling pin-wheel of snowstorms was getting bigger and barreling down on the local office, and was so imminent that even the forecasters were issuing absolute warnings. Not "It looks like we might get six inches"; but more along the lines of "Get groceries and plan to be shut in for a while".

The storm hit at night and by first light, anyone who looked out the window immediately realized that the forecasters were right and that they weren't going anywhere. In an attempt to be good team players, the consultants called their managers, pointed out that they were snowed in and unable to travel, and given the special circumstances, could they use the VPN and work from home?

The managers all responded that the rules were very specific and that the consultants could only work from the office. Since the consultants were powerless to do anything about the weather or the mountain of snow that had to be shoveled, they took snow days and no work was done.

That's 35 consultants for 2 days or 70 days of (loaded) work, or about 2 ½ months of work that vaporized. Needless to say, this turned the otherwise green time line quite red.

The managers called a meeting to discuss how to make up the time. Their first suggestion was that the consultants put in more time, to which they responded The rules specify that we cannot bill more than 8 hours each day. The managers then asked the consultants if they would work without pay - to get it done. Wisely, the consultants said that they were required to play by the rules set forth by the company, and could not falsify the billing sheets with the wrong number of hours worked.

The sponsoring agencies of the consultants all agreed on that one (free labor means no commissions on said labor).

This went back and forth for a while until it came time for scheduled demos. Only the work was about ten person-weeks behind schedule and the features to be demo'd had not yet been built.

At this point, the senior people who could not see their expected features in action had no choice but to address the snow delay. After much discussion, they decreed that the budgets had to be adhered to (e.g.: billing was limited to 8 hours per day), but the line development managers could hire additional consultants to make up the missed work. The managers got to work adjusting the master project plan.

The existing consultants pointed out that it would take a substantial amount of time to find new consultants, get computers, set up development environments, do general on-boarding and get new developers up to speed; and that it didn't make sense to hire new developers for something like this.

It was decreed that rules had to be followed, and it didn't matter if it wasn't cost efficient to follow those rules.

So they spent about a month interviewing (new project task for existing senior consultants and managers), bringing new consultants on board (getting them equipment, access, etc. - a new project task for managers) , and giving them architecture and code walk-throughs (new project task for existing senior consultants). This necessitated increasing the expense to the project to cover all the additional overhead.

All to save a few bucks in additional billing by already-trained-and-equipped developers, which would have been completely unnecessary if they had just let them work from home in the first place.

But hey, those were the rules.

[Advertisement] Application Release Automation – build complex release pipelines all managed from one central dashboard, accessibility for the whole team. Download and learn more today!
2017-02-21T11:30:00+00:00 snoofle The Daily WTF CodeSOD: Well Padded

We don’t receive many CSS-based submissions, possibly because CSS is already pretty horrible. There are real-world, practical things that you simply need to take a hacky, awkward approach with.

Matthew found this code, however, which isn’t a clever hack to work around a limitation, and instead just leaves me scratching my head.

    @media (min-width: $screen-lg-min) {
      padding: 1rem 1rem 9999px;
      margin-bottom: -9999px;

I liked this approach so much I went ahead and used it on this article. It's a brillant way to control page layout.

[Advertisement] BuildMaster integrates with an ever-growing list of tools to automate and facilitate everything from continuous integration to database change scripts to production deployments. Interested? Learn more about BuildMaster!
2017-02-22T11:30:00+00:00 Remy Porter The Daily WTF Decision Paralysis Good point--making no decision is itself a decision. So that's a THIRD option I have to research! ]]> 2017-02-20T00:00:00+00:00 CodeSOD: Notted Up

There’s an old saying, that if your code is so unclear it needs comments to explain it, you should probably rewrite it. Dan found this code in a production system, which invents a bizarre inversion of that principle:

static BOOLEAN UpdateFileStoreTemplates ()
  BOOLEAN NotResult = FALSE;

  NotResult |= !UpdateFileStoreTemplate (DC_EMAIL_TEMPLATE); // Not-ing a fail makes it true, so if Not result is True we've had a failure
  NotResult |= !UpdateFileStoreTemplate (DC_TABLE_HEADER_TEMPLATE); // Not-ing a fail makes it true, so if Not result is True we've had a failure
  NotResult |= !UpdateFileStoreTemplate (DC_TABLE_ROW_TEMPLATE); // Not-ing a fail makes it true, so if Not result is True we've had a failure
  NotResult |= !UpdateFileStoreTemplate (DC_TABLE_FOOTER_TEMPLATE); // Not-ing a fail makes it true, so if Not result is True we've had a failure
  NotResult |= !UpdateFileStoreTemplate (WS_EMAIL_TEMPLATE); // Not-ing a fail makes it true, so if Not result is True we've had a failure
  NotResult |= !UpdateFileStoreTemplate (WS_TABLE_HEADER_TEMPLATE); // Not-ing a fail makes it true, so if Not result is True we've had a failure
  NotResult |= !UpdateFileStoreTemplate (WS_TABLE_ROW_TEMPLATE); // Not-ing a fail makes it true, so if Not result is True we've had a failure
  NotResult |= !UpdateFileStoreTemplate (WS_TABLE_FOOTER_TEMPLATE); // Not-ing a fail makes it true, so if Not result is True we've had a failure

  return !NotResult;

Here, the code is clear enough that I don’t need comments, but the comments are so unclear I’m glad the code is there to explain them.

Not-ing a fail certainly does not make a win.

[Advertisement] Release! is a light card game about software and the people who make it. Play with 2-5 people, or up to 10 with two copies - only $9.95 shipped!
2017-02-15T11:30:00+00:00 Remy Porter The Daily WTF What's So Great About Snapchat Anyway?

Here’s what grown-ups still struggling to find the appeal need to know, as Snapchat files for its IPO.

2017-02-03T14:51:11+00:00 Technology Twitter Rethinks Ad Strategy in Effort to Find Revenue Growth

President Donald Trump has made Twitter more visible than ever. Now, the company has to find a way to cash in.

2017-02-10T00:20:34+00:00 Technology Zenefits Cuts Nearly Half of Staff

Zenefits on Thursday said it cut another 45% of its staff, marking the latest blow for the startup that has struggled with weakened sales and regulatory issues.

2017-02-09T18:32:28+00:00 Technology Box Plot You have to be careful doing this. Sometimes, when you push the whisker down, dynamite explodes. ]]> 2017-02-13T00:00:00+00:00 What Bugs Beneath


During the interview, everything was gravy. Celestino Inc. was doing better business than ever before, and they were ready to expand their development center. They had all the keywords Gigi was looking for: Java 8, serving up a SPA for a hot new streaming product, outsourced from a company with money to burn but no developers of their own. She loved the people she'd interviewed with; they were smart people with great ideas. It'd been a long, grueling job hunt, but it'd been worth it. Gigi was eager to work with the technology, not to mention having plenty of budget and a greenfield to work with.

By the time Gigi started work, however, the deal had fallen through. The big name with the budget had gone elsewhere, leaving Celestino in the dust. Gigi's boss seemed surprised to see her. He assigned her to work on bug duty for their 7 year-old Java product instead.

A few minutes of settling in, and Gigi found the Jira for the product. She clicked through to "Unresolved issues" ... and nearly fell out of her chair. There were 8,800 bugs.

That can't be right! she thought. Maybe they're not setting a resolution when they close them?

But there was no such luck. Clicking into a dozen or so of the older ones revealed that they'd been filed years ago and never opened.

Where do I even start? she wondered.

"I'll give you an easy one," said the manager, when asked. "Just fix this one thing, without touching anything else, and we'll get it rolled out to prod in the weekly release. Be careful not to touch anything else! We've had guys in the past who broke stuff they didn't realize was there."

The bug did look easy, at least: if one chose a red background in the app, the text "looked funny". Gigi had no trouble reproducing the effect 100% of the time. All she had to do was find the offending line of code and tweak it. No risk of introducing extra bugs.

And it was a snap—of her patience, not her fingers. The codebase had 133,000 source files implementing 3,600 classes, all just for the backend part of the application. She found a surprising number of places calling TextOut() that could've produced the text she saw, and the code was, of course, awful to read.

Gigi gave up understanding it and tried the old standby: a binary search of the codebase by commenting out half the instances and seeing if the "funny" text still appeared. Six comments were inserted, and the code recompiled, taking 20 minutes. Gigi had been warned that if she tried to run make all, it'd take six hours, but that the build script was reasonably reliable—"reasonably" being the operative word.

Still, it compiled, and she booted up the app. In theory, if the problem was in the six output statements she'd commented out, she'd see no text; if it was in the six she'd left alone, it'd still appear.

She never anticipated a third outcome. The red background was gone, indicating that the output was in the commented half ... but instead of nothing, she saw two copies of the text that'd been hidden behind the red background, both reading the same thing, but in different fonts and different positioning.

Gigi stared at the screen, a sinking feeling in the pit of her stomach. A vivid daydream flashed across her eyes: she envisioned packing up her purse, walking out the doors into the sunshine, and never returning. Maybe, if she were feeling generous, she'd call and explain she'd been deported to Mars or had suffered a violent allergic reaction to the application or something.

It was her first day, after all. Nobody would miss her. Nobody depended on her yet. Nobody ...

She flipped open her cell phone, staring at the lock screen: a picture of her husband and year-old son. They were counting on her. She needed to stick it out at least long enough to look good on her résumé and help her get the next job. She could do this for her family. She had to be brave.

Taking a deep breath, Gigi resumed her herculean task. She commented out a few more text outputs, hoping to figure out which of them was causing the effect. After another build and run, there was no text—but the text box twitched and flashed alarmingly.

There's at least three layers of bug here! How am I meant to solve this without touching any unrelated code?!

Gigi turned back to the Jira, realizing now why so many of these defects were ancient and still unopened as she set the bug back to "todo" status and went to find the manager.

The next defect she was able to resolve, putting her back on solid ground. Not that it'd been easy—the problem was in a button event handler, spread across six source code files. The first file created an object and a thread; the next file scheduled the thread in a private queue. The third class hooked the thread up to the button, while the fourth class caught button clicks and scheduled another thread to handle the event. There were a few more layers of passing data around between files, until finally, another thread was queued to destroy the object. But once she got her head around the architecture, the bug was a simple typo. Easy enough to resolve.

A week later, an email came through: some contractor in Siberia had resolved the first bug ... by upgrading the video drivers. Apparently there was a known issue with layering visible text on top of invisible text, with or without the red background.

Why was the invisible text there? What did it have to do with a red background? What unearthly combination of branches created that particular display?

Gigi didn't know or care. She was too busy filling out applications on Résumé be damned, she needed to escape. Maybe she'd just leave this one entirely off.

[Advertisement] Release! is a light card game about software and the people who make it. Play with 2-5 people, or up to 10 with two copies - only $9.95 shipped!
2017-02-14T11:30:00+00:00 Jane Bailey The Daily WTF The Second Factor

Famed placeholder company Initech is named for its hometown, Initown. Initech recruits heavily from their hometown school, the University of Initown. UoI, like most universities, is a hidebound and bureaucratic institution, but in Initown, that’s creating a problem. Initown has recently seen a minor boom in the tech sector, and now the School of Sciences is setting IT policy for the entire university.

Derek manages the Business School’s IT support team, and thus his days are spent hand-holding MBA students through how to copy files over to a thumb drive, and babysitting professors who want to fax an email to the department chair. He’s allowed to hire student workers, but cannot fire them. He’s allowed to purchase consumables like paper and toner, but has to beg permission for capital assets like mice and keyboards. He can set direction and provide input to software purchase decisions, but he also has to continue to support the DOS version of WordPerfect because one professor writes all their papers using it.

A YubiKey in its holder, along with an instruction card describing its use.

One day, to his surprise, he received a notification from the Technology Council, the administrative board that set IT policy across the entire University. “We now support Two-Factor Authentication”. Derek, being both technologically savvy and security conscious, was one of the first people to sign up, and he pulled his entire staff along with him. It made sense: they were all young, technologically competent, and had smartphones that could run the school’s 2FA app. He encouraged their other customers to join them, but given that at least three professors didn’t use email and instead had the department secretary print out emails, there were some battles that simply weren’t worth fighting.

Three months went by, which is an eyeblink in University Time™. There was no further direction from the Technology Council. Within the Business School, very little happened with 2FA. A few faculty members, especially the ones fresh from the private sector, signed up. Very few tenured professors did.

And then Derek received this email:

To: AllITSManagers
Subject: Two-Factor Authentication
Effective two weeks from today, we will be requiring 2FA to be enabled on
all* accounts on the network, including student accounts. Please see attached, and communicate the changes to your customers.

Rolling out a change of this scale in two weeks would be a daunting task in any environment. Trying to get University faculty to change anything in a two week period was doomed to fail. Adding students to the mix promised to be a disaster. Derek read the attached “Transition Plan” document, hoping to see a cunning plan to manage the rollout. It was 15 pages of “Two-Factor Authentication(2FA) is more secure, and is an industry best practice,” and “The University President wants to see this change happen”.

Derek compiled a list of all of his concerns- it was a long list- and raised it to his boss. His boss shrugged: “Those are the orders”. Derek escalated up through the business school administration, and after two days of frantic emails and, “Has anyone actually thought this through?” Derek was promised 5 minutes at the end of the next Technology Council meeting… which was one week before the deadline.

The Technology Council met in one of the administrative conference rooms in a recently constructed building named after a rich alumni who paid for the building. The room was shiny and packed with teleconferencing equipment that had never properly been configured, and thus was useless. It also had a top-of-the-line SmartBoard display, which was also in the same unusable state.

When Derek was finally acknowledged by the council, he started with his questions. “So, I’ve read through the Transition Plan document,” he said, “but I don’t see anything about how we’re going to on-board new customers to this process. How is everyone going to use it?”

“They’ll just use the smartphone app,” the Chair said. “We’re making things more secure by using two-factor.”

“Right, but over in the Business School, we’ve got a lot of faculty that don’t have smartphones.”

Administrator #2, seated to the Chair’s left, chimed in, “They can just receive a text. This is making things more secure.”

“Okay,” Derek said, “but we’ve still got faculty without cellphones. Or even desk phones. Or even desks for that matter. Adjunct professors don’t get offices, but they still need their email.”

There was a beat of silence as the Chair and Administrators considered this. Administrator #1 triumphantly pounded the conference table and declared, “They can use a hardware token! This will make our network more secure!”

Administrator #2 winced. “Ah… this project doesn’t have a budget for hardware tokens. It’s a capital expense, you see…”

“Well,” the Chair said, “it can come out of their department’s budget. That seems fair, and it will make our network more secure.”

“And you expect those orders to go through in one week?” Derek asked.

“You had two weeks to prepare,” Administrator #1 scolded.

“And what about our faculty abroad? A lot of them don’t have a stable address, and I’m not going to be able to guarantee that they get their token within our timeline. Look, I agree, 2FA is definitely great for security- I’m a big advocate for our customers, but you can’t just say, let’s do this without actually having a plan in place! ‘It’s more secure’ isn’t a plan!”

“Well,” the Chair said, harrumphing their displeasure at Derek’s outburst. “That’s well and good, but you should have raised these objections sooner.”

“I’m raising these objections before the public announcement,” Derek said. “I only just found out about this last week.”

“Ah, yes, you see, about that… we made the public announcement right before this meeting.”

“You what?”

“Yes. We sent a broadcast email to all faculty, staff and students, announcing the new mandated 2FA, as well as a link to activate 2FA on their account. They just have to click the link, and 2FA will be enabled on their account.”

“Even if they have no way to received the token?” Derek asked.

“Well, it does ask them if they have a way to receive a token…”

By the time Derek got back to the helpdesk, the inbox was swamped with messages demanding to know what was going on, what this change meant, and half a dozen messages from professors who saw “mandatory” and “click this link” and followed instructions- leaving them unable to access their accounts because they didn’t have any way to get their 2FA token.

Over the next few days, the Technology Council tried to round up a circular firing squad to blame someone for the botched roll-out. For a beat, it looked like they were going to put Derek in the center of their sights, but it wasn’t just the Business School that saw a disaster with the 2FA rollout- every school in the university had similar issues, including the School of Sciences, which had been pushing the change in the first place.

In the end, the only roll-back strategy they had was to disable 2FA organization wide. Even the accounts which had 2FA previously had it disabled. Over the following months, the Technology Council changed its tone on 2FA from, “it makes our network more secure” to, “it just doesn’t work here.”

[Advertisement] Application Release Automation for DevOps – integrating with best of breed development tools. Free for teams with up to 5 users. Download and learn more today!
2017-02-09T11:30:00+00:00 Remy Porter The Daily WTF Saturday Morning Breakfast Cereal - Math Puzzles

Click here to go see the bonus panel!

You come to a mysterious island where everyone always tells the truth...

New comic!
Today's News:
2017-02-07T15:52:00+00:00 Saturday Morning Breakfast Cereal (updated daily) Soda Sugar Comparisons The key is portion control, which is why I've switched to eating smaller cans of frosting instead of full bottles. ]]> 2017-02-01T00:00:00+00:00 Saturday Morning Breakfast Cereal - The Multiverse Explained

Click here to go see the bonus panel!

A lot of physics makes sense if you imagine it's designed by a tech billionaire with a confusing vision.

New comic!
Today's News:

Why Do Birds Sing? From BAHFest Sydney 2016

2017-02-02T15:19:00+00:00 Saturday Morning Breakfast Cereal (updated daily) There Is No Salvation for the ‘Facebook Expert’

In the old days of search marketing, it was about tricking the dumb robots–buy links, cloak, spin content, or whatever trick you could pull.

And then came the old days of Facebook marketing (up through 2014), which was also about tricking the dumb robots–arb out placements available only via Power Editor, run weighted average fan acquisition campaigns internationally, pollute a competitor’s remarketing campaigns by sending garbage traffic, scrape Facebook user IDs to generate custom audiences, roll up applications to build your email list, run sponsored stories with messages fans never endorsed, move text to bypass the 20 percent rule and the list goes on.

Sounds like a bunch of mumbo jumbo?

Good–that means you’re not one of the people who are about to get slaughtered. Maybe it’s people on your staff or some of your vendors. Seeing the forest from the trees, the smart Facebook advertiser no longer salivates like happy dogs hearing dinging bells.

Ride the gimmick game from tactic to tactic–and as each trick exhausts, you are a junkie in search of your next fix. As we said before, Facebook has now largely solved the optimization challenge for you.

Choose your business objective, load up your content, connect your audiences–that’s it. Put the money in the machine and Facebook itself does the optimization. But you’re still responsible for your goals, content and targeting.

This kills the single-channel marketer and a raft of Facebook-only companies at the same time. The walking dead who are peddling search-engine optimization, Facebook ads, or other disciplines are starting to realize this. They’re dropping SEO out of their name, rebranding as content marketers and jumping ship.

Keyword <> Facebook interests (2007-11)

You see, keywords were a great start in search-engine marketing. And the first folks to do Facebook advertising were the search PPC (pay-per-click) folks that assumed interests were keywords. Some people even pretended to build software that mapped Google keywords to Facebook interests.

Of course, that didn’t work.

That’s also why you don’t see any legitimate keyword, audience research or competitive tools for Facebook. It was easy with Google, since you could set up a crawler to scan where you ranked and also monitor competitor ads. On Facebook, because every user feed is personalized and behind a login, you have no idea what anyone else is doing or seeing. There is no legitimate competitive ad intelligence tool out there, and I doubt there ever will be.

Back to the consultants and software companies, which had raised funding from venture-capital firms which themselves hadn’t used Facebook. The curtain were hamster wheels, frenetically spinning to extract intent out of things people liked. But what you clicked like on in an indeterminate time past was no proxy for your immediate needs now–a broken toilet, hunger pangs for sushi or the need to buy a wedding gift for an old high-school friend.

You just couldn’t make gold from coal, no matter how many philosopher stones and divining rods you had. The fool’s gold of social was inflated fan campaigns, the bubble of app installs and general nonsense passed off to unsuspecting brands. Back when Facebook had one-dozen offices in Palo Alto, Calif., in 2008 (its food was delicious and still is), I felt we had a new tech gold rush.

But this time, it was data miners, not panhandlers–though the same charlatans existed selling their wares.

We actually did have search ads in 2011 briefly on Facebook. But Facebook pulled them because 99 percent of the searches were navigational, not demand-driven. And, I suspect, a lot of brands didn’t like being sniped on their own terms.

It was a clever, effective parlor trick.

In the same way you could cloak the search engines (show them one thing, while showing users another), with Facebook ads, you could programmatically bid high and low every 60 seconds. Thus when you created the ad at the high bid, it would get priority in the auction.

But when the system came around to bill you, it would notice the lower CPM (cost per thousand impressions) bid, assume there was an error and credit you back. The ad geeks called this optimization, but I called it cheating.

Facebook going through the ‘teenage years’ (2011-14)

With Power Editor and the Facebook Ads API (application-programming interface), the geeks got a ton of tools to play with. The number of ad types grew to more than 30, depending on how you counted them. Multiply that by the hundreds of thousands of interest targets (we got a list of 300,000 from Facebook at one point), partner targeting (offline behavioral data), custom audiences, and demographic data and you have billions of combinations possible.

The complexity created huge niche opportunities, as well as room for consultants to sell into the confusion. Facebook was able to “move fast and break things,” which conferred advantage to folks who could exploit cracks in the system before they were fixed.

For example, a number of companies found that they could spin up thousands of ads at low bids. And the ad algorithm wasn’t smart enough to know, allowing you to game the system. Many of the software companies that manage Facebook ads still rely upon this mass multiplying.

Even if you could get the targeting spot on, trying to do CPM and CPC (cost per click) bids against a range of placements was too hard.

So optimized CPM solved this issue by not only bidding to the business objective, but subselecting within the broad audience you’ve chosen. This solved the problem of needing to micro-target (you reading this?) and of conversion optimization. It meant the system could automatically learn who your best customers are and find more of them for you–lookalikes, for example.

Now if only they could create your content for you–use PostPlanner, Canva and your customers to curate and create for you, meanwhile. Every piece of content, which includes every organic post you’ve done, necessitates a different audience, too.

In the Google ad world, you create content that exists only for advertising and can live forever.  Set it and forget it.

But on Facebook, it’s the opposite–there are no ads, just organic posts that you amplify. You throw fuel on the fire once you find that something is working. The “always-on” post was perhaps my favorite ad, since it would just promote your most recent post. But that died, largely because not all posts should get promoted, like when you’re notifying the community of a problem.

There is still no good solution for this issue, so you need a human to watch this every few days. You can simplify their work by predefining the audiences they can choose from–saved audiences and various custom audiences.

Facebook ads as a young adult (2015 and onward)

I suppose if you’re old enough to drive a car and get your own place, you’re an adult. But maybe if you’re not old enough to drink or possess maturity in other subjective areas to be truly “grown-up.”

Likewise, Facebook integrates with only a few systems that you’ll need–your content-management system and your customer-relationship-management solution. Facebook is a platform that connects the two, matching people with content–you just happen to need to pay to do it–social postage, if you will.

Assuming you can get the content (Facebook posts, blog posts, photos from customers, reviews, etc.) and users (emails, app users, pixeled users, check-in users, etc.) piped in automatically, you still have to deal with specifying the business logic of sequences. In other words, you have to chain out content delivery according to the customer persona and where they are in the funnel.

The current batch of marketing automation companies out there do this nascently via drag-and-drop flow charts.

I’d argue that even if Facebook were to create the ultimate version of Power Editor, there is no way it will succeed in asking customers to build duplicate funnel logic within Facebook. It will have to integrate with the marketing automation companies to replicate the same logic into Facebook. Same users and content–just delivered beyond just email, which is what’s currently happening.

The marketing automation companies are really just email automation companies, since they don’t extend across all marketing channels yet. I predict three more years before Facebook is truly able to help mainstream small business owners. The delay is less about their technology, which is already robust enough, but about partners that need to integrate platforms and about educating marketers what Facebook is and isn’t.

Google was founded in 1998 (2000 for AdWords), so that’s 17 years. And I’d argue that it is too hard (at least its ad platform) for most businesses to use.

Facebook was founded in 2004 (2007 for ads), so not bad for only 10 years. Facebook ad optimization is a human psychology and finance problem, not a geek optimization problem.

When these integrations are finally in place, the finance people will be running the show. In undergrad religious studies, we learned about supersessionism. The Christians say they believe everything the Jews do but chide them for missing Jesus. The Muslims say they believe in everything the Christians do but they missed out on Mohammed. I’m not a preacher, so forgive the oversimplification.

When the web started to become mainstream in the mid-1990s, it was dominated by tech weenies. They were called webmasters, if you were around then. And they protected their high priesthoods with jargon, in the typical union-like keep-away played by IT.

Then the marketers came in and took over the web functions, too. And you’re not surprised that the chief marketing officer now outspends the chief technology on technology. The mainstream marketers–even business-to-business and small and midsized businesses–have been blasting Facebook posts indiscriminately.

Facebook stock is way up because of this, but nobody is quite sure what the return on investment is of these efforts.

We’re in the end of this period now.

Now the finance people are coming in. They don’t care about the information-technology or marketing stuff, except to minimize cost centers and not eat too much into profit margins. So the smart marketer must tie Facebook results to profits and losses, which is the only thing that finance people care about.

They are no longer OK with impressions, likes, shares or reach–they want revenue and margin maximization. The Facebook ads geek can talk a good technical game about how novices wouldn’t possibly begin to comprehend the complexity of these algorithms.

They may even be able to talk content marketing and marketing automation. But the people holding the purse strings will tire of this, since they want to know cost and revenue, tied neatly into a forecast. And that is why the Facebook tech weenie or Facebook guru will be dead soon, along with all single-channel marketers.

It’s not just Facebook ad specialists: It also includes social media strategists and anyone professing channel or tool-specific expertise. External consultants who come in for specialized situations–sure, there’s some room for that, but not in-house. Left behind is the ROI-minded marketer that leaves the optimization natively to the networks.

That smart marketer focuses on business goals, sources content in line with personas, and has the systems build audiences automatically.

2017-01-26T22:00:59+00:00 Dennis Yu The Social Times Big Ten Conference Will Hold a 'League of Legends' Tournament

The Big Ten Network later this month will begin televising an e-sports tournament comprising teams from 12 of its 14 member schools, which will compete in the popular multiplayer online battle game.

2017-01-20T22:11:14+00:00 Technology WeChat Rides QR-Code Wave

WeChat has helped reshape China’s mobile internet by promoting widespread adoption of the square QR code for payments, writes Li Yuan.

2017-01-25T17:25:38+00:00 Technology Scraping for Craft Beers Comments ]]> 2017-01-17T14:02:07+00:00 DataTau Your first DIY Hadoop cluster Comments ]]> 2017-01-20T09:31:44+00:00 DataTau What is a GPU & Why Do I Care? A Businessperson's Guide Comments ]]> 2017-01-23T19:01:37+00:00 DataTau Statistics for Hackers Comments ]]> 2017-01-24T17:31:50+00:00 DataTau Introduction to Natural Language Processing Comments ]]> 2017-01-25T00:31:48+00:00 DataTau Approaching (Almost) Any Machine Learning Problem Comments ]]> 2017-01-25T17:01:35+00:00 DataTau How to Create Population Pyramid in Tableau Comments ]]> 2017-01-25T17:01:35+00:00 DataTau NYC Subway Math

NYC Subway Math

2017-01-17T12:01:00+00:00 Yhat | Blog Predictive Analytics 101 - the basics explained for non-devs Comments ]]> 2017-01-27T10:01:30+00:00 DataTau Google Gets Stronger Still in Search

A key selling point of Alphabet’s Google is that nearly everyone, especially on mobile, uses it to negotiate the internet.

2017-01-26T23:17:22+00:00 Markets CodeSOD: Checked Numbers

Dealing with types in dynamically-typed languages is always a challenge. Given a variable, does it hold a string? A number? An object? Without inspecting it, you have no idea!

Thus, most of these languages have methods for inspecting variables, where you can ask questions like, “is this a number?” and then decide where to go from there. This can make validating your inputs a bit more difficult.

Of course, this code Joe found might make it more difficult than it needs to be:

        //Return decimal value only
        function get_decimal_value($value){
                        $result_value = null;
                                        if(preg_match('/^[0-9]+(\.[0-9]*|)$/', $value)){
                                                $result_value = $value;
                        return $result_value;
                }catch(Exception $x){
                        echo trim($x->getMessage());
                        return null;

Yes, not only does it check is_numeric, but then it also uses a regex to verify that the string is a number. As an aside, (pattern|) is an unusual way to write an optional section, I’m far more used to (pattern)?, but that’s just nit-picking, and there’s a much larger problem with this code than can be seen from this snipped. I’ll let Joe explain:

This is called on the backend with values straight from DB which are guaranteed to exist and be a number.

That, combined with the bad exception handling? I strongly suspect this is programming by copy/paste.

[Advertisement] Release! is a light card game about software and the people who make it. Play with 2-5 people, or up to 10 with two copies - only $9.95 shipped!
2017-01-25T11:30:00+00:00 Remy Porter The Daily WTF Voice Commands Dvorak words may sound hard to pronounce, but studies show they actually put less stress on the vocal cords. ]]> 2017-01-18T00:00:00+00:00