FLURPS is an acronym for six components of
well-rounded big data designs: Functionality, Localizability, Usability,
Reliability, Performance, Supportability. Here's the case for using
this template.
I've
been advocating for customer-centric design as long as I've been
designing solutions for customers. I still do this, because I have to.
It's remarkable to me that after decades of building high-tech solutions
for customers, technologists still seem to build solutions in an IT
vacuum and then get upset when customers don't find them very
functional.
Gold plating is a term used to describe developers who
infer customer requirements and subsequently build features that the
end users never requested -- because the developers know better.
Unfortunately, data scientists are carrying this tradition forward with
analytic solutions. That said, I wouldn't categorically dismiss any
requirement that doesn't come from a customer or end user. It may seem
odd coming from such a strong advocate of customer-centric design, but
there are aspects of a well-built solution that customers don't know or
appreciate.
When designing a big data analytic solution, make sure
it includes a well-rounded set of requirements, including ones that the
end user won't directly know about or care about.
What's FLURPS?
FLURPS
is a great acronym that I learned as a young computer Big Data Training in Jaipur, and
it works great as a template for building well-rounded analytic
solutions. FLURPS stands for: Functionality, Localizability, Usability,
Reliability, Performance, Supportability. It seems like a lost acronym
that I'd like to resurrect to help us design and build better solutions.
This funny-sounding acronym reminds me of a big, hairy puppet like Mr. Snuffleupagus
-- that's why it has stuck in my mind for so many years. Let's go
through the different elements of FLURPS and how they can enhance your
design.
Functionality
Functionality remains the key
component of design; it represents all the features the customer knows
and wants. When building a requirements document, most analysts separate
functional from non-functional requirements, which is a good practice.
Furthermore, functional requirements should always take precedence over
non-functional requirements. Never sacrifice functional requirements for
non-functional requirements -- you should satisfy non-functional
requirements in addition to functional requirements.
Localizability
Localizability
handles geographical concerns such as language. Internationalization
(or i18n, for those in the know) is closely related to localizability in
that it architecturally provides the technical infrastructure to
localize a solution. Knowing that your recommendation engine will be
used globally, you may internationalize it by automatically sensing
where your user is located, and then localize it by providing, for
example, German-, Russian-, or Chinese-specific content. Bear in mind
that good localizability extends beyond language translation and caters
to cultural differences in functionality.
Usability
Usability
deals with the customer experience. This is a pet peeve of mine -- I'm
tired of seeing analytic solutions that force the user into the mind of
the developer. For instance, it's very common to see use cases where a
batch operation seems obvious, but the solution only allows single
transaction processing. If I could possibly have hundreds of input
variables to my predictive analytics engine, why should I have to create
them one by one?
Although usability seems like it should fall
into the functional category, it does not. Most customers don't know how
to design a usable solution; however, they know when it's not usable.
Putting a user experience expert on your team is a fantastic idea.
Reliability
Reliability
handles the stability of your application. Reliability is not something
end users contemplate because they assume your solution will be stable;
when it's not, frustration can quickly escalate to extreme
dissatisfaction.
You must build reliable solutions. How many times
have you lost work because your system crashed? And by the way, a cute
little icon telling you that the system crashed doesn't help. Build
requirements into your solution to recover from exceptional situations
and gracefully exit only when all possible routes of recovery are lost. I
once designed a web application that went through four or five levels
of exception before it finally, gracefully quit -- after saving all of
the user's work. The users never knew the application was going into its
third and fourth level of exception, and that's the way it should be.
Performance
Performance
is a bigger deal than you might think. I recently trained a group of
users on a new web-based system that would on occasion take several
minutes for a submenu to appear -- the industry standard is between two
and three seconds. The performance of the system broadcasted the quality of the rest of the system, and it wasn't positive.
I know performance issues can be difficult to track down, but that's
your problem, not the users. Make sure reasonable response times are
documented in your requirements and thoroughly tested when the system is
built.
Supportability
Supportability is the last, but not
the least important, component of a robust design. Whether you're
designing a product that will be used by customers or an internal system
that will be used by employees, it's vitally important that the
operations group is in a good position to support the solution.
For
analytic solutions, supportability often extends beyond requirements
into organizational design. The instrumentation on an analytic solution
is often sophisticated, so it's important to staff the operations
function with very knowledgeable technicians -- maybe even other data
scientists. When I'm putting together a development team, I often
include at least one person from the support team; this way, they can
influence the solution's design from the perspective of someone who's
going to support it.