Paul C. Williams

Interfacing Technology & Business
View Paul Williams's profile on LinkedIn
StackOverflow
 3.3k 

Monday, December 23, 2013

Bitcoin is going mainstream

This morning I read on Forbes that Overstock.com is going to start accepting bitcoin payments, probably through Coinbase or Bitpay.  These two companies are really poised to rake in all the spare nickles floating around the market.

In related news, Belgian mobile telecom Mobile Vikings is also accepting bitcoin payments.

This is really good for the stability of bitcoin, which will see the wild deltas in valuation start to settle down as soon as there's a few arbitrage experts around to take advantage of any deviations from real value.

This is following my predicted model for bitcoin stabilization, and someone is making a ton of money.

Friday, December 20, 2013

Of whales and sardines: sales in professional services

Spend long enough in a professional services project environment, and you'll notice a tendency over time to chase "whales".  Large projects with expansive scope that look great because of their big price tag. These projects also tend to be very complex, with many moving parts. Whale projects require a higher staffing level, so more management oversight. The customers are more demanding and have more quality issues.

I'd like to take a moment to contrast that to a sardine project.  Sardines by contrast are simple creatures. They have similar needs to one another, and are often found in groups.  Professional services organizations often start out with sardines, but are tempted to move toward whale projects as cost structures start to balloon before efficiency measures and economies of scale kick in.

While a whale might provide meat for a village and any one sardine isn't very interesting or filling, but if one is efficient enough at pulling a volume of sardines at a time, it might just be as valuable as that whale you spend so much effort hunting, trapping, catching and butchering.

Image credit: Karen Kasmauski & Getty Images/Science Faction

Wednesday, December 18, 2013

Why do websites still have local log-in systems?

I was shocked today when perusing the PC Pro website, that they still require you to create an account on their system to post a comment. To be fair, I'm not contesting the usefulness of having an authentication mechanism. It keeps us a little safer from anonymous diatribe and vitriol.

But why would PC Pro or any other website want to maintain a safe authentication scheme, manage user accounts and all that when the apparatus of Google, Yahoo, Facebook, Twitter and others can be used so effectively? They're easy, cheap, effective and secure enough for most general use applications on the net.

Tuesday, December 17, 2013

Arbitrage opportunity for bitcoin payments

I see a huge opportunity coming up. Retailers everywhere are (always) looking for a cheap way to attract more purchases without huge valuation fluctuations. Bitcoin owners want to determine a practical and legal use for their currency. Bitcoin values are trending up rapidly. With demand and fluctuation comes arbitrage opportunity.

Sunday, December 15, 2013

Consumer grade hubs suck

I had to share a ethernet drop between a couple of computers in my home office today. To achieve that, I connected  a little Netgear 5-port 10/100/1000 hub to my drop and sent a couple of ethernet lines out to the nodes.

This morning, I was having connectivity issues out to the internet. Connections were spotty, the speed wasn't fabulous and latency was much higher than normal. A trip to speedtest.net confirmed that I wasn't seeing what I usually see.

I took the hub out of line, so that it was no longer between my very awesome Asus RT-N66U router and ran the speed test again. Pouf! Problems gone; speeds back up to 50+ MBPS with fewer connectivity and latency issues.

Note to self: consumer grade hubs generally suck.

Saturday, December 14, 2013

Teenage is an intimidating time

My daughter Hannah pictured here is currently in 8th grade. As we tour high schools looking at the different programs that are offered, I can't help but feel intimidated. Of course, she's too cool to be intimidated by such things -- she just wants to make sure her friends are in the same school.

There's a lot of focus on the programs that prepare kids for college, and all the work and activities that kids will be expected to participate in to qualify for these programs. Nearly all programs are engineering-oriented.

At a time in which we lament grade inflation at schools like Harvard, there is ongoing scandal at secondary schools regarding the standardized testing, and a constant fear that American colleges aren't preparing students for the work world, I have to say I am amazed at how much energy is put in to designing compelling-looking programs. One would think that with all this energy invested in these programs that there would be less of a problem with our education system.

One program commonly implemented in our area is the International Baccalaureate (IB). This program claims to be the most rigorous liberal arts program in the country, focusing on well rounded students ready to enter into the most prestigious schools in the country.

And, I have to say, based on the presentations and interviews with the IB students, it seems an impressive program. But with a stated 5 hours of homework nightly, as well as a requirement for sport and community service and the highest academic standards at any given school, this program sure feels scary to me, and I'm not even in it.

Friday, December 13, 2013

Android modal in-process dialog

It turned out that adding an in-process dialog to the previous example of an asynchronous task was pretty simple.

With a minor change to the AsyncTask I showed in the last posting, I was able to get a handle to the dialog in order to dismiss it at the appropriate time.  Dismissing it in the finally block ensures that the dismissal happens even if there is an error in processing.

Android network development: network activity on main thread?

If you, like me, are learning Android development, and your Android application requires network access, you might see an error like this when you try to access the network:

E/AndroidRuntime(673): java.lang.RuntimeException: Unable to start activity
ComponentInfo{com.example/com.example.ExampleActivity}: android.os.NetworkOnMainThreadException

It turns out that Android has disallowed network activity on the main thread since version 3.0 (Ice Cream Sandwich) or so. This is done to prevent UI blocking during network activity. The fix is to handle the network activity in the background. This sounds scary, but fortunately the developers added a helper abstract class AsyncTask to ease the process.

And it is easy. Here's an example AsyncTask that uses an existing network utility to look up product details based on a string SKU:

private class GetProductTask extends AsyncTask<String,Integer,Product> {
    private String sku; 
    @Override
    protected void onPostExecute(Product p) {
        try {
            if( p == null) {
                // alert the user that we couldn't find a product for the SKU
            }
        } finally {
            // clear the throbber
        }

    @Override
    protected Product doInBackground(String... params) {
        this.sku = params[0];
        // ProductCatalog.locateBySku() is a network activity
        return ProductCatalog.locateBySku(sku);
    }
}

The generic parameters <String,Integer,Product> are the input type, status type, and output type respectively. That is, in our case, the doInBackground() method accepts Strings and when successful onPostExecute() is passed a Product.

This is called simply as an execute to a new object:

new GetProductTask().execute(sku);

You can choose to set up a throbber to communicate to the user that there is an activity in progress.  I made mine modal so that no other data entry could occur while we wait for the network.  That's a different blog posting.

There is also another method you can override, the onProgressUpdate() routine which would be passed an Integer, but in this case I didn't need it.

Thursday, December 12, 2013

Installing Ubuntu using network boot (PXE / TFTP)

I feel like such a stud!  Using a windows TFTP server, I loaded and installed Ubuntu 12.04 LTS Server on a 1U HP Proliant server using absolutely no media.  This was not super easy, because the TFTP server doesn't like relative paths, so I had to be tenacious to overcome the limitations.

My reward: a fully operational battle station Ubuntu Linux Server.

Saturday, December 7, 2013

Innovation is getting watered down

The Wall Street Journal has an article about the audacity of some businesses to tout their most recent product evolution as "innovations" by using the case of "Peanut Butter Pop Tart" being labelled as one.  This tendency of leaders to label such adjustments as innovation waters down the term and belittles the truth of innovation.

What is real innovation?

Thursday, December 5, 2013

Wednesday, December 4, 2013

Stay Foolish. Hungry is helpful too.

Perhaps no man has affected the way we conceive of leadership, entrepreneurship and innovation more than Steve Jobs. His oft-quoted phrase given during the commencement address in 2005 to Stanford University grads "Stay Hungry; Stay Foolish" is usually interpreted to be an admonishment to be relentless in the search for users, buyers and funding. I think this misses the mark in a very profound way, and minimizes the true genius of the statement.

Tuesday, December 3, 2013

Why are KPIs troublesome in professional environments?

There's no argument: Key Performance Indicators (KPIs) are useful. We, as busy people, must distill complex processes into easily understood and manageable chunks.  It's hoped that most KPIs, if improved, would actually impact the performance of our organizations. Why do we latch on to that so readily, and why doesn't it always work?

The Theory

It's a business school mantra that one cannot improve that which is not measured.  Scientific management needs to have easily gathered, analyzed and understood metrics in order to know where bottlenecks exist, and what parts of the process are ripe for optimization.  This is relatively easily done in some industries.  In manufacturing, you can measure process flow through each manufacturing line.  Similarly, calculating the number of units in various work-in-progress states is straight-forward.  It's very easy to see how decreasing process time improves process flow thus productivity and profitability.  Reduction of works-in-progress (which in manufacturing is equivalent to unproductive capital) directly affects the cash flow of the operation as well.

Both of these metrics can be used to compare the average values to specific measurements on specific lines to determine if a specific manufacturing line using a standardized process.  A manager can easily see that manufacturing line A has difficulties during the 2nd shift, because it's throughput is 20% lower than average. Similarly, we can look at line D to see what they're doing so much more effectively because their throughput is 20% higher than average.
Hypothesis Testing: Determine statistical significance
of a measurement against the known operational range.


Pay For Performance

It's natural then to implement a pay-for-performance scheme based on KPI measurements. In fact, KPI measurements can be used for a host of management processes that are functionally equivalent to pay for performance.  Consider an annual performance review that may use a KPI measurement as an objective component for the review. If the annual review might in the eyes of the reviewee be used as justification for promotion, termination, or even to which work space the employee gets assigned, it's important enough to the reviewee to ensure maximal results. The situation gets even more important for middle managers who may have variable compensation that depends on KPI targets.

KPI Development & Ownership

How are KPI targets developed?  The textbook answer to this question is to collaboratively decide using a cross-functional team of stakeholders from all levels to decide what metrics to use that accurately reflect improved support of the organizational strategy.  With a shared sense of ownership grounded in a firm understanding of the organization and strategy, all stakeholders have an incentive to make their metrics better.

The prerequisite here is that all the stakeholders really understand what the strategy is, and how their role supports the strategy.  Believe it or not, this understanding is exceedingly rare.

What seems to wind up happening is from somewhere on high, a directive is handed down that such-and-so will be measured, and we shall strive to improve this measurement.  In software development, the new measurement might be, in the most naive cases, lines of code, or bugs resolved.  In more enlightened organizations the metric might be estimated hours vs. actual hours for project execution.

In either case, those who are most subjected to the result of the analysis of the metric may not have much control over the outcome.  In the estimate vs. actual case, we might make the argument that the team ought to be good enough to estimate the effort required to execute the task. It's not uncommon though for teams to not know enough about external factors, such as specific integration requirements, or nonfunctional requirements like performance to accurately foresee all impacting tasks.

The net result is that contributors have a feeling of helplessness in affecting the KPIs they've been committed to.

A Perverse Incentive

What happens when contributors are impacted career-wise or financially by KPIs that were assigned to them by a management stack? They game the system. Teachers, held to KPIs encoded in law, cheat to improve their class test scores. I imagine the teachers and officials in these cases, already woefully underpaid, feel somewhat justified in their decision to cheat. Their KPI measurements are frequently impacted by factors outside their control. It's hard to get a kid to care about what I think most rational people can agree is a bogus standardized test. Kids can have impressively accurate BS detectors.

Kent Arnold, A former manager of mine once said about KPIs that "All software engineers are game theorists". By this he means software engineers and other professionals are savvy enough to figure out what is being measured and improve exactly that. Unless the metric actually supports an organizational goal directly, the KPI might encourage a behavior that doesn't support productive activity. Is 100% test completion a good target? What if a software developer were to, in the name of boosting the metric, decide to exclude tests that might not succeed? Perhaps the test suite is sandbagged with trivial tests to reach a 90% success measurement. In either of these cases, is the organization's goal of lowering maintenance costs and higher customer satisfaction achieved?

Are KPIs doomed?

This is a somewhat depressing line of thinking. Are metrics are so deeply flawed that they cannot be used in professional organizations?

I don't think so.  More importantly I think that the "right" way to implement KPIs will actually benefit morale and employee engagement while simultaneously providing better insight into the operations of the organization.

In an upcoming posting, I'll outline a model for generating useful KPIs in professional organizations.