Software Development Life Cycle – Listen Up, They’re Not Just Buzzwords

If you’re interested in software development you should be thinking about the Software Development Life Cycle. Whether you have the next great idea for a web site, are a software developer finishing your degree, the owner of a company trying to increase your web presence, or an experienced project manager in the software industry, you may not know it yet but this phrase will have a profound effect on the success of any new or existing software project you’re involved in.

For the purpose of this post, let’s start with defining Software Development Life Cycle (SDLC). A Google search will provide anyone with countless resources on the topic, but for our purposes, we’re talking about the process that takes places from the inception of an idea for software to that idea becoming a fully functional, usable application. In researching the topic you can find most resources suggest an Life Cycle that utilizes phases to break up SDLC into parts. In an effort to be concise, we’ll discuss the following phases:

  1. Requirements Gathering and Analysis

  2. System Architecture and Design

  3. Construction

  4. Quality Assurance

  5. Maintenance

Really what we’re discussing when we say that a software application has a “life” is that it’s constantly growing and evolving to meet its users needs. The phrase “Life Cycle” becomes important when discussing a SDLC because of the evolution of software; the SDLC is the “cycle” of how the software will grow. Every time we create a new iteration of software that life cycle begins again, anew.

Now that we’ve provided a basic definition for SDLC, we can discuss ways to use this information and how it affects software projects. Here are some quick hit ideas to keep in mind:

  • Preparedness

    • Clients should be asking questions about how a prospective software development team is going to be handling their project’s SDLC. Make sure the answers you get are thought out and well-developed. If you were building a house you wouldn’t want to hear “we’ll just throw together four walls and a roof,” right? Become comfortable with the process that you’re about to engage in.

    • Development teams should have an established process in place that they’ve previously executed successfully. When a possible client asks about a specific phase of the SDLC developers should be able to break down how the team is prepared to handle each of the phases.

  • Preference and Communication

    • As a client, think about how life cycles might work best for you and prepare to have that conversation with your development team. But remember to keep in mind that a software team may have years of experience perfecting a great process–be willing to accept their ideas and consider them as options or alternatives.

    • Development teams should have the flexibility to work with clients to meet their needs in the best possible way. Sometimes this might mean prototyping screens throughout the life cycle or doing a large portion of development targeting a “Beta” release for the application.

    • Clear, open communication about how the SDLC will be executed is key in making the project a success. The client and developers should agree, as soon as they can, as to the path they feel will be best.

  • Evolution

    • Both sides need to remember that if a project will have multiple phases, its life cycle will “restart” as you begin a second phase. This means that using everything you have learned along the way in the initial phase(s) will be important to refine requirements for any additions that will be made to the project.

So now we’ve discussed ways that getting to understand the SDLC, even at a basic level, will help both a client and a development team. We’ve only just scratched the surface but, hopefully, you can begin to shape your thoughts about what it might take to build that great new application that will save your company tons of money. The process can’t just be “we’ll slap some code together and, voila!” And the process doesn’t stop here either–the SDLC has many shapes and forms; whether you’re a client or a developer, increasing your knowledge of the Software Development Life Cycle will benefit your team and your software projects, going forward.

Learning From Your Data – Part 2

In part one of this post I reviewed the details of Data Visualization and how it can help you learn for the data that your systems already collect using a simple example. That bring us to the next point:

What about information that’s more difficult to examine?

In his book The Visual Display of Quantitative Information, Edward Tufte states that the “lack of quantitative skills of professional artists” is what makes creating a truly stunning and convincing data visualization difficult. This is why you don’t often see Data Visualizations as outputs of systems; it’s hard enough to design and create a Data Visualization to illustrate a specific point, let alone one that asks the viewer to draw their own conclusions.

Relationships between the individual data points in your system are everywhere. The simple ones, as we discussed, are easy enough to display. But if you can find ways to show the complex ones, you can make a real difference in a business. As an example, I’ll  reference another Visualization by Lee Byron, available on his site LeeByron.com. This one shows the relationship between words in a poem or limerick:

Image

This Visualization shows the relationships between the phonemes and entire patterns of phonemes.

Byron shows a more complex example using a poem by Shel Silverstein:

Image

These examples probably don’t relate to your business (unless you’re a poet), but they should illustrate how connections between data elements can have a massive effect on your ability to understand how and why something is working.

Where can I find examples?

Here are a few more examples that may show how this sort of Visualization can turn your data into an understandable tool to help you get ahead in your industry:

  • San Francisco – Home Prices
    • Great example of an interactive data visualization. Shows how multiple data visualizations working together can make data even more understandable.
  • Business Statistics 
    • Perfect example of displaying Progress % type KPIs
    • (Note: be sure to try the update button)
  • Cross Filter of Flight delays
    • Interactive example that shows how an data visualization can be used to hone in on the results/data you are looking to find. Think of data mining to determine what set of data fits a specific question that you have.
  • Slope graphs
    • Perfect example of displaying Change % type KPIs
  • Web Server Statistics 
    • Cool example for my industry
    • (Note: you need to use the +new button)
  • Crime in Portland
    • All around good example that shows lots of visualizations that display similar data (i.e. types of crime) by region.

Learning From Your Data – Part 1

Data Visualization is defined as “the study of the visual representation of data, meaning information that has been abstracted in some schematic form, including attributes or variables for the units of information.” But, to boil it down, the term means a graphical representation of data that can make understanding it easier.

I first learned about the concepts behind Data Visualization in the book The Visual Display of Quantitative Information by Edward Tufte. Tufte’s book illustrates (quite literally–there are tons of visual examples) the idea that a picture is worth a thousand words. When I first looked through the work nearly 15 years ago, I was overwhelmed and amazed by how Tufte so easily and simply relayed information using diagrams and I took away from the book a firm grasp on the idea that a graphical representation of data can very clearly articulate a point.

After becoming a software developer I learned about how the theory and practice of Tufte’s concepts can enhance a computer system. David McCandless has a bevy of great visualizations on his site, informationisbeautiful.net. One such visualization, from McCandless and Lee Byron, is a graphic of Facebook post-break-up status messages by month:

Image

As you can see, this simple graph very clearly illustrates some interesting results (February, March, November, and December are tough months for love) even though it displays the inputs of over 10,000 status updates.

So, how does all of this relate to Software Development? 

As a Development Manager at Algonquin Studios, I spend a lot of time meeting with my clients. The objective of these meetings is almost always to determine the final “outputs” of a system. These outputs can include things like reports, ESIs (external system integration), graphs, printable documents, and customer facing data views and can be thought of as the reason we’re building the system in the first place. If we never established the outputs for a given system all of the inputs–usually time-consuming data entry–would be a waste.

The most important outputs for a system are almost always tabular reports that can show information ranging from first quarter financials, a customer list, or employee performance over an extended time period. Basically, these are the types of reports that help run a business and there comes a point in almost any project when I’m asked to create an “Executive Dashboard” using information pulled from these reports. Because these dashboards can contain all types of information, from trends to warnings about productivity, their information can be displayed as general statistics and/or graphics.

So, how can we use the data in a system to dynamically draw a Data Visualization that will let the user draw their own conclusions about information that’s pertinent to the running of their business? Key Performance Indicators.

There are 3 basic types of Key Performance Indicators (KPIs):

  • Raw Numbers
    • Number of new customers
  • Change %
    • Percent increase in sales over last month
  • Progress %
    • Percent of monthly income target

Each of these basic types of KPIs are related to a goal and there are a set of work items that need to occur to move these items forward.

Each of these KPIs will have a few attributes.

  • Frequency
    • How often can this indicator be measured? Daily, weekly, monthly, bi-monthly or anually?
  • Target
    • Especially important for percentage-based KPIs. When have you hit your target?
  • Thresholds
    • When you want to consider this KPI under a lower threshold
    • When you want to consider this KPI in an “Acceptable” state
    • When you want to consider this KPI over an upper reasonable expectation

And all of this information be displayed in graphical form. Simple bar graphs, line graphs and gauges can tackle these Visualizations with effective results.

Check back for my next post in which I’ll continue this look at Data Visualizations with some more complex examples.

Calling QR in Print CSS Only When Needed

This post originally appeared on my blog on March 8, 2013.


For those of us who put together print styles for our sites, we’ve probably tossed around the idea of embedding QR codes so that users can quickly get back to a page they have printed. In the hardcopy version of my article for .net Magazine, “Make your website printable with CSS,” I show how you can embed QR codes in your page (it’s not included in the online version).

In my example I use the Google Charts API to generate the QR code on the fly. The problem in my example is that the QR code image gets called whether or not you print the page. Not only is this an additional HTTP request, it’s also an additional download that immediately gets hidden. This puts a bandwidth burden on users who aren’t printing, but it’s also the only way to support your users on Internet Explorer 8 and below (who may be the ones trapped at the office who want to bring the document home).

If you truly have no IE8 or below users, then the less bandwidth-hoggy approach is rather simple, if a bit inelegant.

Since each call to the Google Charts API to get the QR code must include the full address of the page, I cannot leave this to my linked CSS file (which is static, not run through any server-side processing), nor would I want to push every URL for every page of my site into that file. Initially I wanted to use a data- attribute to hold the URL and then, using the generated content feature of CSS, have it take that value and feed it into the content: CSS declaration to have it generate the image from there. Except that’s not how CSS works. You cannot use CSS to generate an image from a CSS variable.

The easiest solution is to a put a style block at the top of your page (something I hate doing) and feed the current page’s URL into the Google Chart API query string to dynamically draw the image. The rest of the styles that affect placement, spacing, etc. should all be in your print stylesheet already. The example:

@media print {
  header::before
    { content: url(http://chart.apis.google.com/chart?chs=120x120&cht=qr&chl=http%3A%2F%2Falgonquinstudios.com/Engage/Careers); }
}

That’s it. Now when (and only when) you call the print styles, the image will load. As proof, here is a screen shot using HTTPFox showing the page before the print styles were called and after, where you can clearly see the QR code is called only when the print styles are fired.

Screen shots of the list of HTTP requests before and after the print styles were fired. You can click / tap to see the full-size image.
Screen shot of the print preview with the generated QR code in place.

Note: This technique will not work in any version of Internet Explorer that doesn’t support CSS generated content, which includes IE 8 and below. Internet Explorer 9 and above happily include the QR code generated with this method.

Words, Words, Words

So as I sit here, I had a completely different idea for what to write for this, my first Algonquin Studios blog post. Then I took a look around and did a quick inventory; within arms reach I have the following:

  • My trusty tablet (on which I am happily typing this post)
  • My Kindle e-reader
  • My Android phone
  • My wife’s Kindle Fire
  • My daughter’s tablet (yeah, I know)
  • And, of course, the television remote control

And that’s just within arms reach. If you wandered my house, you’d find two additional Kindles, a random mp3 player, laptops, PCs, and more. All of which, aside from the mp3 player (probably only due to lack motivation on my part) can either connect to the internet or can use one of the other devices to do so.

At the risk of sounding like a crotchety old man, when did we become so utterly dependent on technology? But, more importantly, is that dependence really such a bad thing?

Sure, it’s become nearly impossible to disconnect from the digital/mobile world without physically locking your electronic devices in the basement. Even as I write this I’m getting texts, calls, and emails from friends and heaven forbid I don’t respond to those people within minutes, they’ll string me up for being “off the grid.”

And it’s important to fight the good fight–to actually get out of the house and off the devices (especially when you have kids). As someone who takes at least week off every year to go out to the middle of the woods and pretend that technology doesn’t exist, I’d like to give myself credit for making an effort. Kinda.

I say “kinda” because I do make a teeny tiny exception when it comes to my annual trip to Allegany State Park. That exception comes in the form of the one device that causes lots of conversation between the plugged-in and luddite camps–my Kindle. The e-reader debate has its own set of pros and cons, but the one that comes up the most seems to be “Books vs. Words.”

On one side, we have the “book” people. I know you well because I was one of you for a long time. We all love books. They feel great in your hand and there’s nothing like picking up a book and feeling the paper between your fingers. I bet you can even smell a book right now–paper-y goodness. Plus, book stores are a dying breed and that’s certainly not a good thing. I realize a large part of the problem is due to the big box stores forcing them out with lower prices and greater convenience, but I also believe the electronic movement contributes to the steady slide of locally-owned (and chain) book stores.

So what pushed me from the side of the book lovers into the world of the e-reader enthusiasts?

Words. Reading. Stories.

I originally picked up my Kindle as a toy. I purchased it as a gift for myself, quite a few years ago, with some tax return money and it was more of a curiosity than anything else. Then I realized something; this “toy” made it incredibly easy to get my hands on books. And not just books, any book. Any book I could possibly imagine was available to me, anywhere I decided I wanted it. Whether I was in my house, backyard, local park, or office lunch room, if I wanted a new book I could get one.

This realization helped me to rediscover something I hadn’t thought about in a while: I absolutely love to read. I’ve read (insert ridiculously high number for sake of argument) times more books since I bought that first Kindle than I’d read in all the years leading to that point. When you consider that most e-books are much cheaper than their paper versions and that you can borrow from many local library systems for free, it’s even better.

Books no longer need to be the stuff of the elite or well-educated. If technology can put a good book in front of a person who wouldn’t normally read one, this is a good thing. My Kindle did just that and it took my reading to another level. We shouldn’t look down on something just because it may not be what we’re used to and it shouldn’t matter if a book is written on paper, stone, or the sidewalk. The idea is to get books into the hands of people who want to read them. Whatever the most efficient way to do that is, let’s do it!

I guess that’s my point. We’re surrounded by technology every day. We can’t get away from it and when we notice this, our knee-jerk reaction might be to be put off by it. But we need to make sure that when we feel technology is creeping in, we’re not automatically dismissing it as useless, silly, or disruptive. I still believe it’s good to disconnect every so often but that doesn’t mean I’m going to leave my Kindle at home this summer when I go camping. What would I read if I did?

My (Mostly) Unbiased Overview of Android and Apple’s iOS – Part 2

Feel free to check out part one of this post, in which I covered some pros and cons on Apple’s iOS.

On to Android, which now owns the majority of the mobile phone market share in the world due to the many manufacturers who choose this open-source, free operating system for their phones. Much like iOS, there are plenty of pros and cons to cover for this OS; I’ll touch on the ones I’ve found to be most important during my software testing experience.

Pro – The first thing that comes to mind is the customization of the system itself. Many carriers and manufacturers have adapted Android due to the “re-skinning” they can perform on this OS–they can essentially make it their own by adding a unique look and feel and pre-loaded software. Unlike Apple, which has its own developers working on the OS in-house, Android is open-source, allowing any developer to enhance, limit, or customize the software; there are literally millions of Android developers around the globe, allowing the OS to stay ahead of the curve.

Pro – Android allows for different layouts on user homepages. This includes folders, shortcuts, and, most importantly, widgets. Widgets allow a user to directly access a particular program right from the homepage itself, without having to launch the application. There are widgets available for media players, living calendars and task checklists, and live feeds for social networking, email, and current affairs from around the globe.

Pro – Other great features of the Android OS are the keyboard layouts and text prediction. These include “swipe” style keyboards, where the user literally swipes past each letter in a word and the keyboard chooses the word it assumes the user wants to use. This feature can make typing out long messages or emails a breeze and can help keep spelling errors to a minimum. Many keyboards also have voice-to-text options which are amazingly accurate, “learning” how the user talks. Use of features like these is obviously a personal preference, but the options available in Android really can be quite useful in many applications.

Pro –  The final pro on my list is the new implementation of Google Now, included in all newer versions of Android. Google Now gives you the ability to perform instant searches by speaking into the mic of your mobile device. You can search for the definitions of words, facts about well-known people, and a huge variety of other items instantly. Google Now also has the ability to learn information you either look up or have expressed interested in – things like weather, sports updates, popular tourism spots, commuter traffic, and flight reservations and itineraries. It will also reminder users about tasks and pending calendar items, placing all of this information front and center on the device for users to view quickly and easily.

Of course, Android has its setbacks as well.

Con – One of the biggest faults I can think of is Android Fragmentation. Fragmentation is caused by manufacturers and mobile carriers holding back new versions of software and thereby creating many different versions of Android out in the wild. The Fragmentation can causes issues while developing software for use on Android because, unlike Apple, Android developers have to understand that most devices are not updated to the latest version (currently 4.2.2 “Jellybean”) and have to worry about testing their software on different OS versions in order to fulfill the needs of customers. All this extra testing can, in turn, cause delays in software releases.

Con – Another Android con would have to be the lack of security and stability in the OS. Although developers have made great strides to limit the threats of viruses and other malware, the Android App eco-system is still filled with unwanted security holes and issues. Because, as I mentioned in my point above, there’s no guarantee that all Android devices are running the newest version of the operating system (over half of the devices currently running the Android OS globally are running on Version 2.3 “Gingerbread”, which is far inferior to Jellybean), users and their devices are very vulnerable to security issues.

I’ve learned a lot working with these two operating systems–both Android and Apple have their advantages and disadvantages, many of which depend on the goals of the user. Now that I’ve spent time working with both platforms, I have a better appreciation for the good in both and a better understanding about the bad but, when push comes to shove and people ask me why I prefer one over the other, my simple answer is personal preference. What works for me certainly won’t work for everyone; doing your own research will help determine which OS is right for you.

Improving Company Culture or Why You Should Start “Taco Thursday”

If you know anything about Algonquin Studios, you know that we have a deep-rooted love of food.  It seems to be something that really stands out when describing our company culture (heck, even our monthly F.E.A.S.T. was explained to me in my initial job interview).  I’d been thinking we should keep the food ball rolling, and when a local brewery tweeted “Today is Taco Tuesday,” my gears started turning… Why not have our own taco day here at Algonquin?  After all, who doesn’t love tacos?

So, I pulled the trigger and composed an e-mail to my coworkers presenting the idea, and the response was overwhelmingly positive. I proposed a build-your-own taco bar, allowing each person to pick and choose the toppings they want. Everyone who eats chips in for the day’s ingredients and we all seem to agree that $3 for lunch is a relative steal compared to lunch elsewhere downtown.

Our first Taco Thursday was an overall a success. Each person seemed to be happy with the lunch received and I was encouraged by all to do it again. Over the following weeks, we’ve had our ups (shredded pork, with leftovers to boot) and downs (cubed chicken, which we ran out of before everyone was served) but, for the most part, it has been a terrific undertaking and it’s quite easy, not very much work ever goes in to the preparation.  If you’re looking to boost your company culture, and enjoy some fantastic Tex-Mex as well, you should consider hosting your own!

Taco Fixin's

In case you do decide to start making tacos for your beloved coworkers, I’ll share with you some of the things I’ve learned from experience:

  • Collect money BEFORE you get your final count of how many are eating.  Unforeseen circumstances can prevent people from showing up, causing you to eat the cost of their meal.
  • Buy more food than you think you need. My biggest mishap to date was running out of chicken before each person had eaten their first plate – it’s better to have too much (and leftovers!) than too little.
  • Shop at wholesale stores. Ingredients in bulk (cheese, sour cream, taco seasoning, etc.) are ridiculously cheap there compared to grocery stores.
  • Prepare as much as possible at home.  For example, I cook and drain the ground beef at home – the next day, I place it on the stove top with taco seasoning and water and let it slow cook until lunch is served.
  • Rotate ingredients. Try to change things up, whether it’s your protein, salsa, toppings, etc. And additions like rice and black beans help stretch the total number of tacos that can be enjoyed – use them!
  • Don’t be afraid to turn people away if necessary. You can only cook so much food and it’s better to let people know right away if there won’t be enough for latecomers.

As cliche as it sounds, Algonquin Studios is a tight-knit family, and we’re constantly thinking of ways to bring our family together.  If you think your company could benefit by a weekly social gathering, why not try your hand at Taco Thursday as well?  Remember, there’s no such thing as too much employee morale – one of the reasons my co-workers love working here is because it’s flat out a good time, and being able to spend quality time with one another is just one of the many reasons why.

Feel free to leave a comment if you think this may be something you are interested in trying! I’d be more than happy to answer any questions or offer advice. Taco Thursday has been a marvelous experience and has helped further strengthen our company culture – nothing says togetherness like co-workers laughing and stuffing their faces with tacos.  ¡Olé!

My (Mostly) Unbiased Overview of Android and Apple’s iOS – Part 1

People who know me might already be assuming that this blog post will be biased, based on my preference for Android, about which I’m not usually silent. However, while working at Algonquin Studios I’ve had the opportunity to test many new mobile platforms and devices including Windows Mobile, Apple, and Android and I’ve learned some new things that I like about both iOS (Apple’s proprietary operating system), and Android (an open source, Linux-based operating system).

The battle between Apple and Android has been both futile (for the companies) and fun for people who posses an interest in the forward momentum of technology. While testing our new mobile app for SWRemote, I’ve learned both the frustration and pleasures of having the ability to work with both operating systems. Below are my top pros and cons of both systems, given in the most unbiased way I can manage:

SWRemote’s Mobile Technician was coded for, and first applied to, Apple’s iOS platform using the iPad, so that’s where I’ll start my list as there are a lot of benefits to be found testing and navigating around this robust OS.

Pro – While it’s not iOS-specific, I’d be remiss without mentioning the battery life on both the iPad and the iPad Mini. The devices have exceptional battery life both in “stand-by” mode and “screen-on” mode. Coming from a mostly Android background, I’ve become accustomed to poor battery life and have gotten used to always needing to be near a charger. This has changed a bit with newer Android models, depending on hardware, but I haven’t seen anything that comes close to the staying power of Apple’s batteries.

Pro – A second iOS pro that must not be ignored is its ease of use for beginners. iOS takes all of the complicated and aggravating things out of the operating system and goes with the philosophy of “Just Keeping it Simple.” This works out very well for both timid users who don’t like change on a large scale and beginners who are getting ready to dive into the technology arena. And, with all forms of the OS (iPhone/iPad/iTouch), Apple keeps everything the same–from the looks of the screens to the settings options–achieving great consistency across devices and lessening the learning curve for newbies.

Pro – I also have to give credit to Apple for the stability and security of its operating system, including version upgrade releases which are only held back by the personal user based on when they want to actually upgrade their system. The free upgrades always include bug fixes and other significant advancements in the OS.

But, of course, with all the good comes a bit of the bad.

Con – Thanks to the simplicity of iOS, many customization options have been curbed including any options for tweaking things like keyboard layouts, power modes, processor speeds, and memory utilization.

Con – Apple has a closed operating system which essentially means that one cannot “tap-in” to many of the areas that might be necessary for both programming and/or adapting certain hardware into software like printers, third-party drivers, etc. For developers this can be frustrating and time-consuming as we try to find workarounds for these particular applications.

Con – Apple has also limited its iOS to only Apple products. Some may see this as a benefit and say that while Apple only does one thing really well, it does that one thing really well. This might be true but when you’re limiting your customer base to only one device brand/manufacturer it can be difficult to keep up with the “Next Best Thing.” Tech consumers get bored very quickly these days and people tend to want the latest and greatest right away. Apple’s insistence that iOS only run on Apple products automatically limits its market share, regardless of the fact that it has some of the best advertising in today’s marketplace.