Blog Archive

Home » Blog

Finish Your Work!

There are many pieces to a software development project, some more important than others. There are the mundane tasks that, although very important for a successful project, sometimes aren’t the most exciting to code/write. And it’s a tendency for some people to get all the “fun” aspects of a task done and then move on to the next steps, without completely finishing the boring parts of their first task. It may seem obvious, but…you should really try to avoid this if at all possible.

I realize there are sometimes constraints which make moving on the smarter option. For example, maybe you’re waiting on client feedback or you’re stuck on a particular issue and taking a mental break will likely help you resolve the task better later, with fresh eyes. But my point here is that you don’t want to get a screen or process to the 90% level, with the “majority” of its features or functions working, and then start on something new, without finishing the stuff up that might not be so exciting.

If you find yourself saying, “I’ll get back to it later” try to fight this urge. There’s a chance you’ll never go back to it, and it might accidentally squeak out into production unfinished. There’s also a chance you’ll create more stress for yourself, worrying about all the open tasks you have yet to complete. Leaving a bunch of incomplete work for yourself might create a feeling of having “so much to do” when, in fact, you don’t. Why create an unnecessary stressor that may only serve to distract you for the bigger picture?

Finish your workYou’re also likely to see a decrease in your overall efficiency when jumping back and forth on separate tasks. When you find yourself not getting as much done over the course of the project, you’ll probably also find that this is when your budgets start to bloat! If you do have to leave a task undone, prioritize it high on your to-do list so you can get right back to it when you’ve got the capacity and it’s still fresh in your mind.

So what’s the benefit of leaving little bits of work until the end of your project? I don’t see any. See your work to 100% the first time through and you’ll:

  1. Be more efficient
  2. Produce quality software
  3. Stay under budget
  4. Feel better about your overall workload

In Business, Sharing is Caring

A key to successful business growth is sharing thoughts and informationSharing is nice. That’s what we teach our children. So what happens between nap-time in Mrs. Kernecki’s kindergarten class and the first day in corporate America that makes keeping things a secret so important?

As a society, we’ve  become so concerned that someone is going to rip us off that we’re often unwilling to reach out and lend a hand if there is nothing in it for us. That’s a shame. Yes, we all know there are people out there who are trying to rip us off. We also know a thousand unexpected things can happen to us when we leave for work in the morning but we don’t just cower in bed, we get up and face the day. Helping other people shouldn’t be any different.

A principle that the owners at Algonquin Studios have been championing for years is to “just start consulting.” This is also central to the theme in Eric Sherman’s article in Inc. magazine on “The First Rule of Success.”  This means not worrying about what someone else is getting from you. Don’t worry about the value you’re giving away for free. Crazy, right? I mean, what if you’re an independent consultant with two kids at home that need clothes and books and a car that perpetually seems to keep finding those pot holes that let your local discount tire retailer take home 20% of your net income? You HAVE to think about money first, don’t you? No. And here’s why:

Nothing in business is more important than meaningful, trusted relationships.

It’s easy to jump right to the bottom line, especially when you’re young and starting a business or when times are tough. It’s also easy because it’s clearly measurable – and business owners and investors like things that are measurable. The goodwill of your contacts? How do you measure that?

Of course, this isn’t just some altruistic ivory tower scenario. The fact is, helping others do better helps you. When you do something that puts money in someone else’s pocket, they’ll be more likely to spend some of it on you. What you don’t want to do is have every meeting begin and end with you trying to put a dollar value on each individual you interact with. People don’t have dollar signs stamped on their foreheads, and for good reason:

Nothing ruins a meaningful, trusted relationship faster than money.

We’ve all been to a networking event where, at some point, you become the person whose turn it is to put up with the naive (usually) young salesperson who asks you about what you do and then steers the conversation into how he can help you do it.  Everyone HATES that and can see it coming from a mile away.  By contrast, everyone LOVES the person who spends her time introducing people she thinks can help one another. Fostering these kinds of new conversations builds and sustains those meaningful, trusted relationships.

As an example, Algonquin Studios recently hosted a demonstration of a home health care / monitoring software solution being developed by a company in our region. Originally, I was seeking potential players for an opportunity in a foreign market and was hoping to take advantage of the investment that’s been made in the Buffalo/Niagara region to find someone local. However, once I saw the company’s demonstration, I knew I immediately wanted to share it with our health care clients because of the core value it brought and the earnest and open attitude of the company’s owners.

Our background in health care solutions development allowed us to bring together a group of our clients and expose them to some really interesting technology. It also allowed us to get a roomful of high-profile players in the health care space together to share ideas and thoughts – particularly as related to the challenges that different types of organizations face when it comes to issues of tele-health, home health care,  and regulation. The best part is, doing this also benefited our organization. Through actively listening, we realized an opportunity we otherwise would not have had to learn about the problems our clients are dealing with in a particular area and the kinds of solutions they need to fill the gap in dealing with these problems and with each other. Plus, we established a trust relationship with organization who may have need for our services in the future.

There is also one really important thing that we did in this case – and this is crucial to the development of a trusted relationship – we got out of the way. Once the introductions were made, we handed off further correspondence to the company who did the demo. This demonstrates trust in two ways: we trust that they won’t cut us out of opportunities that might arise for us and we trust that they will be respectful of our clients.

Finding ways to help others is professionally sound and personally rewarding. Finding ways to work together helps everyone grow the pie instead of fighting over the crumbs and it’s something everyone should strive to do.

Free Getty Images?

Screen shot of the Getty embed tool.
Earlier this year, there was big news for bloggers and content authors when Getty announced it would open up ~40 million of its images for free for use on web sites. Over on my personal blog I talked about some things to consider before using those free Getty images on your site.

The Caveats

Since then I’ve had a few of my clients ask me about how and if they can use those images on their sites and blogs, and my blog post is a bit long-winded (it’s written more for technical people). I’ll distill my feedback here, with less technical jargon.

Resizing

If you want to resize the image to fit your layout, you’ll need to know some HTML. Complicating matters, if you have a responsive site that shifts its layout for phones and tablets you’ll quickly find the Getty image doesn’t do the same. What may look great on your desktop could break your layout when you view the same page on your smartphone.

Privacy

You aren’t allowed to place an image right on your pages, you have to reference the image from Getty’s servers using code Getty gives you. While today not much may be in that code to concern you, in time Getty can add anything it likes, including ads.

Longevity

At any time Getty can revoke its license for use (or the photographer could). Because you are using code from Getty, you may never know if the image disappears, potentially leaving a big empty block in your page. To be fair, you take this same risk when you embed a YouTube video, among other services that allow you to use their content or media player.

Code

You need to have access to the raw HTML code of the page in order to use Getty’s code. For some authors and some platforms, this may be a little trickier than it seems. In addition, Getty offers a tool to generate that code, but doesn’t give you any way to customize it. It also doesn’t offer alternate versions of the code (shortcodes for WordPress, for example).

Featured

Many content management systems or blog platforms allow you to identify a featured image for a page or post (such as WordPress), otherwise the platform may use the first image in the page as the featured image (such as Blogger). When you use Getty’s code, there is no image, just a reference to one. Therefore you cannot set it as the featured image and it won’t appear in your blog index or in your RSS feeds.

Accessibility

Getty doesn’t account for accessibility. If your site needs to meet internal or government accessibility standards (specifically for marking up images), the code that Getty provides will certainly fail. Even if you know HTML, you cannot just add the necessary code since you cannot access the discrete image code that Getty ultimately embeds on your page.

One Workaround

Of all the issues I identified above, I can only control one — making the image work in a responsive layout. I have a much more detailed explanation of this over at my blog.

My approach doesn’t require you to modify the Getty code at all. As long as you can paste the following JavaScript into the site’s footer (somewhere before the closing body tag), it should just work when the page loads. To make it work when users resize their windows or rotate their screens, you will need to call the function then as well, perhaps in an onload event in the body.


function responsiveGetty() {

  try {
    // Get all the iframes on the page.
    var iframes = document.getElementsByTagName('iframe');

    // Height in pixels of the Getty credits/share bar at the time of this writing.
    var crHeight = 69;

    for(var i = 0; i < iframes.length; ++i) {

      // Check to see if it's a Getty embed using the only attribute that's unique, the src.
      if(iframes[i].src.indexOf("//embed.gettyimages.com") != -1) {

        eachIframe = iframes[i];

        // Get the current ratio after excluding the credit bar.
        picHeight = eachIframe.height - crHeight;
        picRatio =  picHeight / eachIframe.width;

        // Set the iframe to fill the container width.
        eachIframe.style.width = "100%";

        // Set the iframe height to correspond to the ratio, adding back the credit bar height.
        eachIframe.style.height = ((picRatio * eachIframe.offsetWidth) + crHeight) + "px";
      }
    }
  } catch(e) {}
}

responsiveGetty();

Obviously there are a few ways to implement this, so feel free to play around with it to get a solution that works for you. You can see an example page I made with a few different sizes of images that also resizes them if you resize your window or rotate your device.

In Defense of HIPAA: How Compliance Drives Innovation

As a software developer working in the health care industry I often find myself in discussions with folks who believe HIPAA is holding them back. They argue that the rule is inflexible when it comes to technology and woefully out-of-date with its roots going all the way back to 1996. A recent post by Keas CEO John Stevens sums up that argument quite nicely. Stevens suggests that HIPAA doesn’t fit the social atmosphere of 2014 and that it prevents the sharing of data that could lead to better health for all of us.  Further, he suggests that “HIPAA doesn’t accommodate for advances in technology, regardless of if it is hardware or Innovationsoftware” and calls for an overhaul or annulment of the rule.

While I respect the frustrations felt by Stevens and others trying to drive innovation in health care, I believe they’re misdirecting their contempt. HIPAA is a pain and compliance is tedious, but it’s not the problem. People who don’t understand the rule, and use it as an excuse to silo their data, are the ones holding us back.

HIPAA Doesn’t Prevent the Sharing of Data – It REQUIRES It

The director of the Office of Civil Rights (OCR), Leon Rodriquez, wrote the Right to Access Memo - informing patients that under HIPAA they have the right to get a copy of their records from their provider, as well as their health plans. Patients have access to their records. Period. The fact that some providers make you jump through hoops to get it shouldn’t be blamed on HIPAA. Take HIPAA away and these same providers may not give it to you at all.

White House Senior Adviser, Ryan Panchadsaram, gave a powerful talk at TEDMED 2013 explaining how HIPAA frees the data and the HIPAA requirement to make our data available has already led to key innovations like Blue Button, which will give  millions of Americans immediate and  secure online access to their medical records.

HIPAA is Flexible

HIPAA doesn’t reference a single specific piece of hardware or software.  In fact, it’s designed to be flexible to meet the needs of any particular organization.  Since I’m discussing technical innovation, let’s focus on the Security Rule, which governs the handling of Electronic Private Health Information (EPHI). The rule is broken up into 18 Standards with 42 Implementation Specifications (i.e. the things we need to address when handling EPHI).  Of those, only half are required and they cover what amounts to basic IT governance that any technical solution should follow (risk assessments, data backups, disaster recovery, access controls, etc.).  The remaining 21 controls are classified as “addressable,” meaning we must implement them only if it’s reasonable and appropriate to do so.  HHS states, “This decision will depend on a variety of factors such as, among others, the entity’s risk analysis, risk mitigation strategy, what security measures are already in place, and the cost of implementation.”  You can read the full breakdown here.

HIPAA was designed to account for the vast differences in size and structure of the covered entities and this fact makes it particularly open to incorporating new and innovative technology.

HIPAA Requires Us to Keep Up With The Times

In order to remain HIPAA compliant, organizations will often decide to upgrade systems sooner than they otherwise would have.  For example, Windows XP will no longer be supported with security patches after April 8th, 2014.  This has led to many organizations evaluating their use of the OS in their environments. If their assessment identifies that the machines put EPHI at risk, then they’ll be compelled to upgrade those systems to a supported OS. This has a nice side effect – these upgraded systems are more likely to be supported by, and capable of running, the new and innovative technologies that we want to bring to the table.

That’s just one example, but the point is this: HIPAA requires an ongoing program of due diligence that will keep many organizations’ infrastructures more up-to-date than they otherwise would be.  Outdated systems lead to downtime, band-aids, fires, and other things that tie up IT resources. Up-to-date, smooth-running technical infrastructures are very good for innovation.

How to Move Forward with HIPAA?

HIPAA makes data available and requires us to practice good IT governance and due diligence.  Yes, there’s a policy and paperwork burden, but don’t you want to sit down and spend time reviewing your business on a regular basis anyway?  I know I do – and I want my providers to do so, too.

So, let’s stop blaming HIPAA for stifling innovation. It’s a cop out and usually based on fear induced by not understanding the rule. In fact, if everyone embraced HIPAA as a whole and properly implemented all of its controls, I’d bet we’d actually grease the wheels of innovation. Our systems would be reliable and available when needed. IT personnel would spend less time fighting technical fires and more time innovating. Our staffs would spend less time waiting for systems to respond and more time taking care of patients. Most importantly, we’d know that we could trust sharing our data with other organizations because we’d know they were doing their due diligence, too.  By embracing the HIPAA rule and truly understanding its meaning we can stop fearing what might go wrong and, instead, start dreaming about what might go so right.

“Inaction breeds doubt and fear. Action breeds confidence and courage. If you want to conquer fear, don’t sit a t home and think about it. Go out and get busy.” – Dale Carnegie

Is It Time to Stop Supporting IE8?

On April 8, 2014, Microsoft will end support for Windows XP. Internet Explorer 8 is the most recent version that can be installed on Windows XP. Since “there will be no more security updates or technical support for the Windows XP operating system,” IE8 users on XP will also no longer get updates for that browser, should there be any.

Many believe that the impending security vulnerabilities will lead to a rapid exodus from XP and, therefore, IE8. Troy Hunt wrote a very thorough and insightful piece last year detailing the situation.

To support this, some major web sites have begun dropping support for IE8. In fact, Google Apps haven’t supported IE8 since late 2012 and Google Analytics dropped support about a year later. There are many similar examples that could be cited and I expect to see even more soon.

Gmail's unsupported browser messaging

This overlay is displayed when IE8 users log into Gmail.

But what does this mean for developers and web site administrators?

Should you continue to support IE8? Well, that really depends on how it will affect your users. If you still have a significant number of visitors using IE8, then you should continue to support them.

What do I mean by “support?”

By support, I mean that your web site needs to function – IE8 users should be able to complete all critical tasks in some capacity. But, that doesn’t mean that the experience needs to be to the same level; if your site doesn’t look exactly the same, that’s okay as long as it’s still usable.

For several years, web developers have been making use of “progressive enhancement” and “graceful degradation” techniques that reward users in modern browsers without ruining the experience for users in older browsers. Some of these techniques are quite easy to pull off while others can require a good deal of effort and testing.

What do I mean by “significant number  of visitors?”

This is harder to answer because it’s going to be different for each web site. Any web developer can attest that it’s easier to build a site that functions properly in IE9 than in IE8. IE9 has much better support for recent web technologies like HTML5 and CSS3, which allow us to create better web sites with less effort.

However, many web developers like myself also believe in a universally accessible Internet. Anyone, regardless of device, browser, physical impediment, etc. should be able to successfully browse the Internet and use web sites. Older browsers tend to make this a lot harder and, ultimately, we must determine when it’s acceptable to stop testing our sites and fixing issues.

My rule of thumb for public-facing web sites to this point has been to stop supporting older browsers when they conclusively reach less than 1% of that site’s market share. I suspect other developers have their own similar rules.

It really comes down to return on investment. Will the extra cost of supporting IE8 be worth the return that you’ll see from those users? If you have an e-commerce site, you can easily see if those users bring in sales but on informational web site, ROI can be a lot more difficult to determine.

I’ve compared the Google Analytics data for several web sites spanning the health care, legal, education, and marketing fields. Over the last year (March 25, 2013 – March 25, 2014), IE8 usage varied between 5.69 and 35.16% for these sites. Over the previous year (March 24, 2012 – March 24, 2013), the low end was 10.11% and the high was 52.71%.

Google Analytics chart depicting declining IE8 traffic

This graph shows the decline of IE8 traffic over the last two years.

Although the actual percentages varied wildly, the sites did share a common statistic: IE8 continues to steadily decline and that’s a good thing for everyone. While most of us will be forced to continue supporting IE8 for now, it appears that the end may be in site.

Related Reading:

Don’t Use Global Browser Stats

Don’t Ask Me To Mislead You

Can I trust my sales guy?Informal survey:

You walk into a place of business and speak to the salesperson. You’re looking to find out how much a service they provide will cost you. After a short conversation, Salesperson A confidently tells you your request will cost “$ X.”

You then go to a second company, one providing the same service, and walk through the same process with a new salesperson. But Salesperson B tells you he can’t give you an estimate unless you’re willing to spend more time with him, answering additional questions.

What’s your knee jerk reaction to this scenario? Which salesperson made you feel more comfortable?

Before I became a sales consultant myself, I would have said Person A. Salesperson B would have made me very uncomfortable. An unwillingness to provide a cost estimate means he’s hiding something, right? Will this service be so expensive he doesn’t want to admit the full price to me yet? Is he trying to manipulate me into paying more than I should? Is there something dishonest going on here?

But as a sales consultant today, my process includes an early attempt to educate my prospective clients about why Salesperson B’s approach is the right way to go and why NOT giving an estimate right away is the far more honest way to do business.

When you remove any preexisting cynicism you may have about the sales process, and sales people in general, and think about the process logically, the more your salesperson understands about what you need, why you need it, and what the goals for your project are, the more accurate they can be about the effort, time, and technology involved. This certainty ultimately means they can be more accurate when providing you with estimates about pricing and turn-around timeframes.

Rather than dismissing Salesperson B and going for the “sure thing” that Salesperson A claims he can provide, I believe the real question any prospective client should ask Salesperson A is “How can you confidently provide an estimate for my project when you’ve invested so little time and effort learning about what I need?” because that seems like the perfect set up for a situation where promises get made and then not delivered upon.

Data Visualization for Database Size

With any production system, you may end up with lots of data in your MSSQL Server Database. You may plan very carefully to ensure you know how and where this growth will occur. But inevitably, data will grow where you least expect it (like a message log or a logging table you forgot about) and you won’t know why…If you even notice the growth at all!

Below I have created a MSSQL Script and example from the AdventureWorksDW database of a data visualization that can be setup as a Job on your SQL server to automatically email you a “Tree Map” of your tables.

The Data Viz uses a Javascript Library called D3.JS that is wonderful and has lots of great plugins and examples.

Live Example 

Download Code Example

ByRowCount

By Row Count

BySize

By Size

 

Shared Decision Making Continues After the Decision

Imagine that I’ve just learned that I have hypertension, a chronic condition, and my physician has invited me to participate in deciding which course of action to take. She dispassionately described two drug therapies as options for me, and explained that they have statistically equivalent outcomes. Next, she explained the trade-offs: one likely bears no side effects for me but costs three times as much as the other, which is accompanied by a dry cough that I’d probably have forever. My physician asks, “What are your preferences? Which one fits your lifestyle better?” I answer, “I think I could put up with the cough, because I’m tight on money as it is and I’d like to use it for other things.” So, we choose the second therapy, and she explains the prescription and plan, and off I go.

Shared Decision Making

Shared Decision Making

That’s a pretty good shared decision making (SDM) session. There were two or more participants; we shared options, evidence, values, preferences, and tradeoffs until we were peers in the decision; and we built a consensus and agreed on a plan. Had I learned that I had cancer, my physician likely would have given me time to come to terms with the diagnosis before picking up the conversation about options. If I’d come down with the common cold, the session might have taken less than two minutes.

Proponents of SDM cite studies showing that it brings greater commitment from the patient and could save money as patients choose less invasive treatments more often than their physicians would. Proponents also believe that it’s a more ethical course to take. To make SDM practical in a time-crunched clinical setting, clinics can delegate education to trained staff and deliver guides for patients to absorb offline.

But what happens after I leave the clinic with my script? To get the benefits of SDM, I need to remain engaged. Yes, the way SDM happens should make me feel more invested in the plan, but I’ve got to take this hypertension drug for the rest of my life. Even if the drug could become a part of my unconscious daily routine, maybe I’ll come to dread those side effects that I initially felt would be no problem.

Do any of my health tools support SDM? You know, the patient portal from my physician, my tablet-based health monitor connected to my blood pressure cuff, and my physician’s EHR system? Today, my bet is no. These systems show facts about the past but they miss the conversation with my physician about my values and preferences. If my therapy needs a bunch of steps to occur, do I know where I am in that process? What if I get the steps wrong to begin with? What if I find a step more difficult than I anticipated or I change my mind about tradeoffs later?

When you design software tools for my use, as your patient, please put some critical thought into whether they support the full scope of my therapy, including my decision-making process. You may not deliver such support in your Phase 1, but are you headed in this direction? Shared decision making doesn’t end when I leave your office with a plan in hand.

Sources and Further Reading

Speaking on Accessibility at 2014 HTML5 Developer Conference

2014 HTML5 Developer Conference

I will have the pleasure of speaking at the 2014 HTML5 Developer Conference in San Francisco, taking place May 19 through May 23 (I’ll be speaking on May 22). The quick overview of the conference:

The HTML5 Developer Conference has grown to become the highest attended HTML5, JavaScript, and Web Development conference in the world. Providing tracks on Javascript, HTML5, Apps and Games, client, server, and mobile. HTML5DevConf boasts renowned speakers and leading edge sessions at the most developer friendly price on the planet.

You can learn more at the HTML5 Developer Conference site and you can also follow the conference on Twitter.

I will be speaking about accessibility and how it relates to you as a current and future user with my presentation Selfish Accessibility. The full abstract:

We can all pretend that we’re helping others by making web sites accessible, but we are really making the web better for our future selves. Learn some fundamentals of web accessibility and how it can benefit you (whether future you from aging or you after something else limits your abilities). We’ll review simple testing techniques, basic features and enhancements, coming trends, and where to get help. This isn’t intended to be a deep dive into ARIA, but more of an overall primer for those who aren’t sure where to start nor how it helps them.

My bio and the abstract are on my speaker page on the HTML5 Developer Conference site.

Getting The Most Out of Your Next Software Project

Determining a Budget for Software DevelopmentSo, how do you make sure you’re getting the most value for your budget on your next software project? Whether your next project is a brand new system, designed from scratch, or updates and additions to an existing build, similar considerations should be taken early on. 

To begin, let’s briefly discuss what value is, or how it can be defined in terms of software development. Put simply, value is how efficient something is at completing a task or providing a solution. In this sense, we can calculate value as a price using the following equation:

Revenue – Cost of development = Value

This equation doesn’t take into account money or effort saved as a result of the software, though. For example, a new piece of software may change a system so a task that used to take five employees to complete now only takes one. While the revenue remains the same, the effort and payroll required to complete the task has greatly decreased. With that in mind, we can look at value like this:

(Revenue + Saved Operational Costs) – Cost of development = Value

Now that we have an idea of how to define value, we can apply the definition to the list of items on our next software project.

An early output in your Requirements Analysis phase should be a list of items for your project. Personally, I don’t feel that this is the time to worry about budget – this is the time to be creative and identify any and all requirements and problems, as well as the processes, features, and solutions that will add value to your business.

Next, you’ll work to refine that list of items into a scope of work and this is when you start thinking about budget.  First, you’ll need to identify items as a necessity or a luxury. Use the K.I.S.S. rule and ask the question, “Do I need this would it simply be nice to have?” Work with your software consultant to determine the effort and cost it will take to implement each item. This process will help you identify where the bulk of your budget should go and how much work will be required to construct each item.

Determining value in software developmentFinally, compare the value each feature provides to the amount of effort or cost required to build it. You should find yourself with 4 categories:

  1. Low Value, High Effort - These are items you should avoid and a good software consultant should steer you away from these items, as they’ll chew up your budget and provide very little in return.
  2. Low Value, Low Effort - This often ends up being a list of “nice to haves.” These are items that should be considered if there is still room in the budget after your necessities have been accounted for.
  3. High Value, High Effort - These items will likely be the meat of your project – they’re the reason for the project in the first place! This list should also be short and, unless you’re working with a large budget, you may want to leave some of these items for the next phase of development.
  4. High Value, Low Effort - These are the items a good software consultant will encourage you to include in your development phase. They’ll provide great return for your investment!

After this evaluation you should have a pretty good idea of which items to include in your project scope. Anything not included in the scope of work should be recorded somewhere as potential future development items and should be revisited in the next phase of development, since they may provide a different level of value or require a different amount of effort in the future.

I hope these refining tactics help you and your team determine how to get the most value for your budget during the next phase of your project!