Wednesday, September 30, 2015

Custom Software (Part 2): Custom Software = Custom Problems

INTRO- This post is the second of three about custom software. You can read the opening post here.

Custom software is built to meet your exact needs! How can you go wrong?!?

But before I go too far, I do want to say there is a right time for custom software, but with new choices available today I think those times are minimal.  To help you think through if custom software is right, I would read this post on when to build your own solution. I would also like to add that when I talk about custom software in this post, I am talking about true software development from scratch, not configuring or personalizing an existing platform. Anyway....

Question #1 - who will support it when it breaks?

If you build something no one else has, who will you ask for help? It is like buying a custom built car that runs on garbage and flies, then expecting any mechanic to fix it. How will they know what parts to use? You will either need to hunt down the person that built it, good luck finding them McFly. Or you will need to find someone who understands garbage powered flying cars and then let them take the time to learn how your car is setup... every time it needs repairs, not to mention improvements.

A custom software will have custom problems no one has seen before. There won't be a user group to turn to, documentation on how other's solved it or FAQs. You will be the first to ask.

Question #2 - how will you keep it fresh?

How many movies start with someone finding an ancient, super powerful technology, but no one knows how it works? Often custom software is awesome when it is launched.  But then process changes, technology changes, users change, leadership changes and time passes. No one remembers why it was built the way it was, no one remembers what the key development decisions were or what the purpose was. So a new team comes in, finds the custom software and looks at it like the apes in 2000 a Space Odyssey.

Question #3 - who will support the users?

If you build custom software, there should be a plan to have experts on hand to support it, plus a back up plan if that expert resource disappears.  Because people who like to build new, cool software are typically not the same people who like to stick around to help users. They will often move on to the next cool project. So you will need a couple types of experts, people to fix it, expand it, support it, document it, train users, support users, etc.... You might get lucky to find the one person that can do it all, but we all know where that ends in burnout (not to mention what happens when you replace the custom software).

Question #4 - how will you course correct?

Custom software relies on someone understanding the processes to be built, data to be collected, problems to be solved, reporting needs, user needs and so much more.  There is bound to be something built, implemented and later found to not meet the intended purpose.  Often this is where work-arounds built with spreadsheets start to grow. But as this happens people rely on the data in the work-arounds more than the system because they control it and know how it works.

So once the custom software is built but isn't working, you will have a new custom problem to address. Who is watching for these issues, does the analysis, creates the process map, designs the solution, implements it and then trains the staff (plus supports it).  These course corrections will not stop, things change and developers don't always get it right (especially if the original request wasn't clear).

Custom software is built to meet your exact needs! How can you go wrong?!?

Things will go wrong or change with software. With custom software is your custom problem. But hey, if you really are solving a new problem

Addendum: Custom Software vs Configured Software
I know this post seems very negative on Custom Software, which frankly it is (sorry if it was snarky). I will restate that I do think there are situations which demand innovation and outweigh the risks of custom software. But I would stress exploring new cloud platforms which allow configuration (click not code) to meet your needs, plus allow for code. This allows personalizing to meet your orgs needs, but keeps you in a sustainable environment. You will have flexibility within limits but still get updates, support, enhancements and be in a community. Today's solutions provide you the tools to customize many parts of the system as an administrator through wizards and user interfaces to make changes without code.

Side thought...
This post really could apply to custom websites or any custom code really.

The next post will focus on Custom Process vs Best Practice.

This post is a part of a series of posts, to get more context read the first post.

Tuesday, September 15, 2015

Custom Software (Part 1): Complicated or Complex?

INTRO- This post is the first of three about custom software. You can read the opening post here.
"Our needs are very unique, most systems won't work for us."
"We have a complicated model and process, it is hard to explain."
If you have worked for a nonprofit, you have heard (and probably said) these statements. But before dig into what I think lies behind these statements, lets agree on my definitions of Complex versus Complicated.

Complicated - difficult to analyze, understand, explain, etc. (from I interpret this to mean the methods are not clear, defined or purposeful enough to be explained. 
Complex - so complicated or intricate as to be hard to understand or deal with (from I interpret this to mean there are many defined, intricate parts aligned to meet a need requiring multiple solutions to address.

Not sure I have expressed my thoughts on the distinction clearly. Basically, I think we over complicate many things as nonprofits (and companies and personally, not unique to nonprofits).  We build our process over time, tailored to staff, tied to grant\funder requirements and to meet our immediate needs. We react. This creates complicated process. Difficult to explain, because it is cobbled together. Difficult to understand, because it was designed to meet a range of needs instead of focusing on the process. Difficult to analyze, because there is no purposeful pattern or outcome.

Some things are simply complex. Solving big problems like homelessness, poverty, education, etc is complex. My last organization, The Cara Program, had a complex program model, not complicated.  The program to return people to work had a number of elements including admissions, transformation training, professional training, personal coaching, placement, retention and advancement. Each element was intricately designed to support the overall outcome of lasting change, but each element requires unique skills, steps, metrics and management.  Trying to explain the structure in general is easy for the staff, not complicated, because everyone gets how it all works together.  But if you tried to dig in and understand how The Cara Program operates, it is complex.

Is the distinction more clear? (or at least my thoughts on the distinction-I know people will nit-pick this apart!)

What does this have to do with Custom Software?

All of this complicated process translates into a messy software selection process.  Often one of the things immediately cut or never even considered during software selection is process mapping. We jump straight to the needs assessment. We get everyone together and start listing out everything the software has to do, without even understanding why we do it or how it could be done differently. We do it now, so the software has to do it.  Therefore, our needs are complicated and none of the solutions out there will meet our needs. We must need custom software....   oy,

I would ask yourself, if there are no solutions out there which do it exactly how you do it, are you doing it wrong? Do you need to keep doing it that way? If you changed, would your outcomes change? There are times when innovation and custom software is required, but those times are limited especially with the new platforms available today.

What I would suggest you do before simply stating your needs are complicated.
Documenting your processes before selecting new software gives you a chance to figure out how you work. But it also gives you a chance to ask why and to look for what is important versus what can change.  It is easier to simplify a process when you understand it, along with how it all works together.

Understanding your process and goals helps you understand what you should simplify and what is necessitates complexity can help avoid complications. This is not about software, it is about finding the most effective way to meet your mission.

The next post will focus on Custom Software = Custom Problems.

This post is a part of a series of posts, to get more context read the first post.