IT Needs to be a Better Business Partner

November 8, 2013 by Morons. 4 comments

Post to Twitter Post to Facebook Post to Reddit Post to LinkedIn Post to StumbleUpon Post to Digg Post to Delicious Post to Technorati

Salespeople have a reputation for being just about the worst people to work with when building software. Being in the CRM space myself, this is a constant topic of conversation. Usually the focus is around user adoption, as opposed to mundane complaining about salespeople caring about nothing but their commission checks. But it’s true, that’s all they care about. That’s why when pitching CRM systems to salespeople the pitch always revolves around increased sales\commission.  “This will save you time, so you can do more of what you do best, selling!” or “Not only will you have greater visibility into what your customers are interested in, but when they are interested so you can strike while the iron is hot!”. The thing is salespeople don’t buy CRM systems. Sales managers do. This stuff that we are telling the salespeople is usually post sale, during training, when we are focused on user adoption.  Good salespeople know when smoke is being blown up there a**, and this is a primary reason why CRM systems have abysmal user adoption rates (though it has gotten a lot better in recent years). Salespeople know that all this extra data entry is primarily for the sales manager’s reporting needs.

The traditional advice is that companies should seek a system champion. An evangelist, who is going to sell the system to users, and if he fails simply force the users to use the system. I feel this is somewhat misguided; systems that work shouldn’t have to be sold to users. When presented to users, it should have such a clear advantage over current processes, that the users themselves evangelize the system. Yet, how often do you hear business users praising the systems they work with? It’s almost unheard of.

It’s my belief that IT workers need to take ownership of this. For too long we have left business managers\owners to evangelize technology….

In a perfect world, up front at the start of such a project, the technology team would tell the sales manager, “If you want your reports, your sales people have to do some data entry, lets figure out a way to make the CRM system work for them, so they want to do the data entry because they benefit from that data too. Now let’s work together to figure out how to do that.” But this is rarely the advice given.


My initial reaction to Gene’s Article.

Some time ago, I read a great article, in which the author (Gene Marks) is “sick of the whining”, he tells business owners to take responsibility for their technology and getting the most out of it, he says:

the problem with your CRM system isn’t usually about your CRM system.  It’s about you.  It’s the way it’s been setup.  It’s the way it’s been implemented.  It’s the way it’s managed.  Wake up.  Stop your finger pointing.  Enough with the whining.  Look in the mirror.  If you want your CRM system to succeed, then take a deep breath and do these three things….


Gene is 100% correct on this, but what really hit home in this article is the following quote:

To succeed, you also need someone like Kathy.  Hire that person or re-organize to create time for that person.  This should not be an IT person either – those people are not suited for this task.”

Ouch.  What really hurts about this is that it’s true. IT people suck at questioning business requirement correctness and suck even worse at questioning business requirement usefulness. The below image is from the ITSM Trends 2012: The State of the Dev-Ops Union report


91% of business system users don’t consider IT to be a true business partner, 91%! Even if this number is off by 20 points, it’s an embarrassment. We as technology professionals should be ashamed. Maybe business owners share some of the blame here. But the bottom line is, we work for them, not vice-versa. It’s our job to keep them happy, and we are failing miserably.

For 10 years, I worked in professional services. About 2 years ago, I joined a Fortune 500. I always knew this was a problem, but for me it was always a good problem. If I had to make a back of the napkin estimate, I would estimate that 75% of our Fortune 1000 customers worked with us for no other reason they when working with a vendor they didn’t have to deal with internal IT people.

Professional services firms understand how important it is to be a strong partner with their customer . Product companies understand this as well, probably even more so than professional services firms. All too often internal IT staff looks at business users as peers as opposed to customers.  This is what I feel is at the root of this problem. If IT looked at business users as customers they would make it their business to know everything there is to know about their customer and bend over backwards to help them achieve their goals.

Internal IT departments need to get on the same page as professional services firms and product firms when it comes to understanding business and only then can they provide proper guidance on the use of technology. They need to act as an advisor on business matters (not simply technological ones), they need to accept that business users don’t understand how technology works and therefore don’t always know what they need. Today internal technology people simply don’t know enough about the business they support to properly guide them.

Enter the Business Analyst, the individual who doesn’t fully understand the business or the technology. Most often the business analyst is reduced to a middle man between business and IT, not allowed to think but only to ask and document. More often than not the technology team understands the business rules better than the business analyst. I can’t count how many times I had to explain the intricacies of a formula or data integration to a business analyst only to get a blank stare back.  Often (I know I have had to many, many times) a developer needs to compose an email for the business analyst asking a very detailed question, only to have him\her forward it along to the business owner. A business analyst is not the solution. It’s not surprising that has come up on P.SE, see: “How much system and business analysis should a programmer be reasonably expected to do?


A classic example of bad advice given by IT, and approved by the business.

I think the solution is clear. IT people need to take responsibility for understanding the intricate details of the business; it is my belief that any IT person should be able to conduct the job of the person they are writing a system for with a reasonable level of competency. Yes, if you are writing accounting systems you should be able to perform the job of an accountant. Yes, if you are writing marketing systems you should be able to run a simple marketing campaign.

This is the level of knowledge needed to build proper systems, and is the only way you, as an IT professional will understand the psychology of your user and can be confident that you are not only meeting the business requirements, but that you are meeting the intent of the business requirements.  This is the only way to insure that you are building systems are usable by your target audience, that your users want to use.

This is what I believe is what needs to happen to restore the broken relationship between internal IT departments and business users. It starts with you… step up, learn your industry, it will make you a better IT professional.


One final point, an anecdote really… Recently one of my old clients asked me help him to look into an issue with a Gift Card module I wrote for them years back. The system had worked flawlessly for years, until one day a customer complained that he didn’t receive one of his gift cards. While investigating I came across something very odd, the customer was buying gift cards with gift cards, over and over again… really bizarre. At first I thought, maybe his gift card was about to expire so he found a loophole, to extend the expiration. But no, he was buying gift cards using gift cards he bought the day before!! W.T.F.! This is what caused the glitch. I fixed it and went on with my day. But this odd behavior was bugging me, why would someone use a gift card to buy another one? Few days later I was talking to another person who worked for that same client and told her of the odd set of transactions. She immediately knew what this person was doing. A few weeks prior the Co joined one of those “Cash Back” affiliates, so basically this person signed up with the cash back affiliate, and every time he used  the gift card to buy another gift card he made 1% of the gift card value! So basically kept turning over the same $100 gift card making 1$ on each turnover! That’s one smart SOB! Anyhow the point is understating the business is also an important part of system security. Perhaps I knew a bit more about the marketing habits if this retailer, this sort of “fraud“ could have been prevented.

Recommended Reading: Quantum: Einstein, Bohr, and the Great Debate about the Nature of Reality

Post to Twitter Post to Facebook Post to Reddit Post to LinkedIn Post to StumbleUpon Post to Digg Post to Delicious Post to Technorati

How to make Stack Exchange behave exactly how you want it to

July 12, 2013 by Manishearth. 4 comments

Post to Twitter Post to Facebook Post to Reddit Post to LinkedIn Post to StumbleUpon Post to Digg Post to Delicious Post to Technorati

So you’ve been using Stack Exchange for a while now and, like most other programmers, expect to be able to customize the website. I’ve seen many feature requests on the main meta, and a large fraction of them never get implemented because:

  • It’s not a feature that everyone will like — Stack Exchange tries not to provide too many customization options, so features that will be annoying to some won’t be implemented
  • It’s a rather minor feature that may be only useful to some people (or will be used rarely), and not worth the developer time
  • The developers are all busy working on something else

It could be something as simple as adding a small reply button to comments. It could also be something more elaborate; like a script that lets one manage and use a bank of boilerplate comments or a script that makes editing long posts easy.

Whatever it is, it’s not always easy to get a feature implemented. In many such cases, userscripting proves to be a viable alternate solution. For those who haven’t heard of userscripts, a userscript is a block of JavaScript code loaded into the browser by the user. It contains some metadata, including instructions for the browser on what type of pages it is meant to be loaded on. They’re very useful if you want to tweak the behavior of a website.


Tips for creating a userscript for Stack Exchange

Firstly, here’s the userscript template that I use:

// ==UserScript==
// @name Script name here
// @description Short description goes here
// @namespace Manishearth (This is to avoid conflicts with userscripts that share a name)
// @author Your name here
// @license GNU GPL v3 (http://www.gnu.org/copyleft/gpl.html)
// @include http://stackoverflow.com/*
// @include http://serverfault.com/*
// @include http://superuser.com/*
// @include http://meta.stackoverflow.com/*
// @include http://meta.serverfault.com/*
// @include http://meta.superuser.com/*
// @include http://stackapps.com/*
// @include http://.stackexchange.com/
// @include http://askubuntu.com/*
// @include http://meta.askubuntu.com/*
// @include http://answers.onstartups.com/*
// @include http://meta.answers.onstartups.com/*
// @include http://mathoverflow.net/*
// @include http://meta.mathoverflow.net/*
// @include http://discuss.area51.stackexchange.com/*
// @exclude http://chat./

// ==/UserScript== function with_jquery(f) { var script = document.createElement("script"); script.type = "text/javascript"; script.textContent = "(" + f.toString() + ")(jQuery)"; document.body.appendChild(script); };

with_jquery(function($) {

// Your custom code goes here


Parts of the above code were taken from this post by badp


The @include directives tell the browser which sites to load the script on. You may wish to tweak these to your needs. You may omit the with_jquery bits if you’re not planning on using jQuery, and instead just write your code after the // ==/UserScript== line. If the file is saved as a .user.js file and loaded into your browser (instructions for each browser here), then it will run the code on each SE site you visit.


Make sure you’re familiar with the Chrome Developer tools (or Firebug) as well. Remember that building a userscript is different from using JS for making a dynamic webpage. In the former case, there are many more unknowns, so one can’t always accurately predict how the page will react to your code. With this in mind, I find that it is easier to develop userscripts bit-by-bit on the console, instead of writing a large portion of the script at once and then testing it. I start by testing smaller code snippets on the console, and slowly assembling them into larger code snippets. Then I assemble the larger snippets off-console. This way, you can catch bugs before they get buried in large chunks of code. For example, while writing this script, there were a few issues with the predefined behavior of the preview and edit history that would have been quite hard to catch if I had written the code in bulk.   Another thing to remember is that Stack Exchange has many dynamically-created elements. If, for example, you want to add a  keyboard shortcut to the markdown editor, you will need to make sure that the corresponding event handlers are delegated. This post (and this documentation page, under the “direct and delegated events” section) are good places to learn event delegation via jQuery.

The Stack Exchange API is currently limited to mostly read actions, but it’s another useful tool for writing userscripts and apps. You may have to register for an API key, depending on the nature of the script.

A final, very useful resource is the unminified javascript. The normal Stack Exchange javascript files that one sees in the debugger  look like this (there is also stub,js, full-anon.js, and wmd.js), but by modifying the cdn in the URL to cdn-dev, one gets this page, which is much easier to read. The URLs may change — if the above links change, go to http://dev.stackoverflow.com/ and look for the URL of /js/full-anon.js in the source code or the sources tab of the Chrome developer tools.


Publishing your script on StackApps

StackApps is a repository of apps and scripts for Stack Exchange. You can just post your script by asking a question tagged with the [script] tag. Give links to the script source code, and instructions for installation and usage. Note that installing a userscript on Chrome is currently a slightly roundabout process, so it is advisable to link to the [script] tag wiki for further instructions. Here’s an example of a complete StackApps script post.


Some great userscripts

There are a lot  of  awesome userscripts on StackApps, which can be directly installed. Here are some of those that I find quite useful:


Well, there you have it. You should now be able to tweak the behavior of SE to your tastes with relative ease.

Post to Twitter Post to Facebook Post to Reddit Post to LinkedIn Post to StumbleUpon Post to Digg Post to Delicious Post to Technorati

Endangered Pythons

February 18, 2013 by Ben. 5 comments

Post to Twitter Post to Facebook Post to Reddit Post to LinkedIn Post to StumbleUpon Post to Digg Post to Delicious Post to Technorati

Well, not yet, but possibly.

There’s a dispute going on between the Python Software Foundation (PSF) and a UK company over the name Python. A loss for the PSF could mean that they are no longer able to use the name Python within the borders of the EU.

The chairman of the PSF, Van Lindberg, posted a “call to arms” last Thursday on the PSF blog about the trademark issues:

For anyone who works in a company that has an office in a EU Community member state, we need your help. There is a company in the UK that is trying to trademark the use of the term “Python” for all software, services, servers… pretty much anything having to do with a computer. Specifically, it is the company that got a hold on the python.co.uk domain 13 years ago.

The company is POBox Hosting, formally Veber, an ISP based in the UK specialising in dedicated hosting. The Guardian newspaper quotes the managing director of Our Holdings (apparently another name associated with the company)  as saying

… that the PSF had dragged its feet after he had been in touch with it last year about applying for a trademark on python.co.uk’s logo – which also necessitates seeking a trademark on some uses of the name. “We were talking to them but they didn’t get back to us so we filed for the trademark. And now, with 14 days remaining, the PSF has got back to me at 5.30pm on a Friday.”

According to the European trademark database POBox Hosting registered the trademark in April 2012; the status of the application is now “opposed” since the PSF filed a separate trademark application on the 6th February this year. As with everything, it’s not that simple. The PSF needs help in opposing this application; they need evidence that they have more right to the name “Python” than POBox Hosting.

What is easy is what you can do to help. Van Lindberg writes (emphasis mine) that

[a]ccording to our London counsel, some of the best pieces of evidence we can submit to the European trademark office are official letters from well-known companies “using PYTHON branded software in various member states of the EU” so that we can “obtain independent witness statements from them attesting to the trade origin significance of the PYTHON mark in connection with the software and related goods/services.” We also need evidence of use throughout the EU.

If your company uses Python and has an office or hires in the EU, whether you’re in Austria or the UK, Malta or Germany, you can do something to help. Van Lindberg asks

Could you write a letter on company letterhead that we can forward to our EU counsel?
  1. just a brief description of how Python is used at your company,
  2. how your company looks for and recognizes “Python” as only coming from the PSF, and
  3. your view that another company using term Python to refer to services, software, and servers would be confusing
This doesn’t need to be long – just a couple of paragraphs, but we would want any description of how you use Python for software, web hosting, Internet servers, VPNs, design and development of computer hardware or software, hosting websites, renting servers (like Openstack), or backup services.

Alternatively do you have, or know of, anything published within the EU that uses “Python” to refer to Python? Can you provide copies, pictures or scans of books, pamphlets, conference programs or talks, job listings, magazines or other publications or prospectuses.

All the above should be sent in PDFs to psf-trademarks@python.org

Predictably, and understandably, they’re also asking for money and ask that you consider donating to the Python Software Foundation at http://www.python.org/psf/donations/

One last point. The Guardian also reported that:

Poultney said that the issue… had led to him receiving death threats and that the python.co.uk website was receiving 250 hits per minute.

This was followed up by Brian Curtin in another PSF blog post

… it has come to our attention that the organization with which we are currently involved in a trademark dispute has been receiving messages from our community members, including threats. We ask that no matter who you support in this matter, that you remain civil in your communications and actions. It is important that we maintain the positive and friendly atmosphere that Python is known for regardless of the situation at hand.

Civility harms no one and threats and crashing the companies website could actively work against the PSF. Far more important is to get writing something relevant and useful to support Pythons everywhere.

Full details are available on the PSF blog post.

Halp Cat

Post to Twitter Post to Facebook Post to Reddit Post to LinkedIn Post to StumbleUpon Post to Digg Post to Delicious Post to Technorati