Enterprise Content Management

Armedia Blog

Archive for the ‘Solutions’ Category

The Unseen Side of IT Projects

February 2nd, 2012 by Allison Cotney

In the IT project world, conversations are technically based.  In the business world, focus is on applications and business needs. This can (and often does) lead to the true personal value of these systems being overlooked.

Armedia had been awarded a contract with FederalConference.com (FedCon) who was in need of a system to aid them in event management after a sudden increase in their workload. This increase came after FedCon was selected for the Army Strong Bonds program, which orchestrates 3,000 events every year. This increase to FedCon’s events meant that they needed a system that must:

  • Drive increased efficiencies throughout the Event Management Process
  • Enhance Office Automation
  • Provide real-time 24/7 access
  • Standardize records keeping and centralization of event files

These requirements were all met by Armedia’s distinguished staff of professionals who implemented Armedia Case Management (ACM) as a solution to increase efficiency across the board.

So far, this project was sounding a lot like the others the team had completed since I had come on board.

Army Strong Bonds is a unit-based, chaplain-led program which assists commanders in building individual resiliency by strengthening the Army Family.

The core mission of the Strong Bonds program is to increase individual Soldier and Family member readiness through relationship education and skills training. These training sessions are held in an offsite location in order to maximize the training effect. These retreats are orchestrated through FederalConference.com and aim to build the strength of families who have to endure the stresses of military life.

The true value of this project became clear to me the more I learned about Army Strong Bonds that not only are our systems improving business processes, but also helping improve the quality of life of our Armed Forces and their families through better organization of these events.

This project illustrates that there is more than “improving efficiency and increase office automation.” It shows how valuable these systems can really be in the context of improving the way we work, but also in the way we live.

Is Your EMR Holding You Hostage?

January 31st, 2012 by dbock

Let’s take a look at “Nirvana Health System,” a hypothetical 1000 bed system in the City of Nirvana. The system has 7000 employees, 7 hospitals, more than 200 doctors on staff, with another 800 or so who independently perform services in the area.

Historically they and have done what all hospitals do, that is, they have purchased “commercial off the shelf systems” (also known as COTS) to run their business, manage patient care, and even market their services on-line. This approach largely met their needs for years, but now after a series of acquisitions, recent and looming changes to their reimbursement model, and myriad technology challenges that result from the shift from “hospital” to “Health System” they are now at a crossroads.  These systems may have performed fairly well independently, but they were never designed or intended to function as one. Meanwhile, the vendors who originally supplied the systems have run out of answers, and Nirvana is suffering the consequences.

Nirvana has successfully standardized on Epic, one of the tier one vendors, as the primary electronic medical records (EMR) vendor at the main hospital, but what they desire is a single view across the entire patient experience. Patients in Nirvana receive services without consideration for Nirvana Health’s desire for a comprehensive patient record. Most will likely receive some health services beyond the reach of EPIC, often simply by receiving care at a nearby doctor’s office which is a different medical records platform.

So why doesn’t Nirvana just demand that EPIC integrate with other EMR systems? No doubt Nirvana and countless others have. But for EPIC to do so would in essence counter act their own commercial interest. To do so effectively makes the patient record portable, and by extension the EMR system as well. Machiavellian principles of self-interest have proven themselves in healthcare information technology (HIT). The only way out for today’s Health Care Systems is to for them to wean themselves from reliance on any one software vendor for any critically required systems.

One way we recommend that Nirvana and others who face similar challenges introduce effective portability and reduce vendor lock-in is through adoption of standards across an array of disciplines, one specific recommendation would likely be for them to adopt a Service Oriented Architecture (SOA).  Still, SOA is largely a foreign concept to them, not to mention the notion of web services (WS) and enterprise services buses (ESB). It is important to note that SOA is not a product, but a philosophy. As described in OASIS SOA Reference Model’s definition, SOA is a model for “organizing and utilizing distributed capabilities”, and especially “capabilities that may be under the control of different ownership domains”. Nirvana will likely never fully control all the patient access points, certainly not soon enough to reach their stated timelines, and the SOA approach places a layer between the applications they rely on and the user experience they desire.

Success with a SOA initiative will require strong support by executive leaders at Nirvana, but will put in place the foundation upon which Nirvana and others like them will be able to address the requirements of today and the unforeseen challenges of tomorrow.  When Nirvana and others like them realize the cure they seek does not come from a pill they can buy, but rather from a new approach that removes their reliance on any vendor, they will prevail.

The Spaces Between

January 26th, 2012 by dbock

As system integrators, our greatest value comes from understanding the ins and outs of “the spaces between” our clients existing systems, but we expect stares as blank as a freshly cleaned whiteboard when offering such an explanation. Our challenge then becomes “How then do we describe our craft?”

Engagements generally start with an implied question from our prospects, such as “How can you possibly help us when we know so much more about our business and systems than you?” Telling a new client who has spent years (or even decades) grappling with their very specialized workflows and unique data that, “data is data to us”, comes off as either ignorant, insulting, or both. How many times have you ended a conversation with a client and thought to yourself, “they simply don’t know what they don’t know.” More importantly, how many times do you think they were thinking the same thing about you?

It is much easier to explain [and bill for] boxes, cylinders, screens, circles, and even clouds, than it is the lines and arrows that connect, or at least should connect them. It is within theses “shapes” that our clients live and work, but in the spaces between that they need us most. In their eyes lines depict connections, but therein also reside workflows, dependencies, and logic, or more often than not, the lack thereof. It is also often in these spaces that the most important, and often unstated and hidden customer requirements lurk. We win customers when we see, understand, and have solutions we can articulate for these hidden problems.

This brings to mind recent interactions with a few new Armedia prospective clients. What they share is one-of-a-kind technology ecosystems that evolved over many years but that have become increasingly dysfunctional, while at the same time their user experience expectations have risen dramatically. Consider these examples:

  • A Health Sciences company developed systems to manage a speakers’ bureau, and solutions to help pharmaceutical and medical device manufacturers manage clinical trials. In the process, they also created a software maintenance nightmare
  • An international program that manages independent educators, and uses systems that require no fewer than 13 separate user names and passwords to access. They maintain several web based systems, each built “in a vacuum” by different providers, and each created without coordination under a common architecture .
  • A Health System that provides care for a patient population of nearly one million people, they are suffering under authentication, interoperability, duplication, and maintenance issues that together manifest in cascading user experience shortcomings for patients, practitioners, and staff alike.

We will never fully appreciate the history, evolution or the politics that contributed to their current state, and we will never know these businesses like they do, but with the right approach we should be able to gain their trust and help them as they strive to answer the increasing loud chorus from their constituents, “please make your systems work together, now!”

We as integrators are confident we can help them, but how do we gain their confidence? The buying pattern they are comfortable with is to purchase software directly from independent software vendors (ISV’s) and then attempt to hold them accountable. The challenge is that one cannot “buy” the interoperability they need from an ISV. What they seek is “not available in pill form”. One must adopt an approach that fosters interoperability and then must build a system to support it, and for that, integrators like us are the only way. If the answers resided internally or via ISV’s, then the issues would already have been addressed.

Armedia Case Management – Content.gov Presentation

January 24th, 2012 by Allison Cotney

Did you miss Alfresco’s Content.gov event today in Washington, DC? Dont worry!! Here are the slides from Armedia’s presentation.

 

 

For more information about Armedia Case Management, CLICK HERE

An Insider's Perspective: The CPSC Project

August 30th, 2011 by mseth

It was in the fall of 2010 when I got a call that began my engagement on one of the most interesting projects that I have worked on in recent times.

The situation, the project was with one of the leading product safety regulators in the world.  The international arm of the organization was leading an initiative to create a global information pool for product safety recall information in an effort to make product safety efforts across the world more coordinated and effective.  This would be a one stop, one shop view to “any recall – any where – any time” product safety recall information.

Armedia was asked to perform an initial assessment of what it would take a build a global recall information pool, build a roadmap for the process and structure the approach for the global consortium.  This was a pure play Information Technology (IT) strategy project where the focus was on creating an IT approach to meet a complex business situation.

What I loved about the project was the challenge of a highly unstructured business situation where the project sponsors understood the pain and knew the desirable outcome, but they had little understanding of what needed to be done.

Building an approach for an IT system in the area of product safety was a challenge, as I soon discovered.   Several factors contributed to the challenge, they included,  (a) plethora of legacy IT deployments, (b) changing data structures and data definitions over time, (c) different data structures and definitions across countries, and (d) project execution headwinds (Note: Our team ran into a situation of competing for attention amongst different priorities both within the organization and with 3rd parties outside, in this case the consortium of product safety organizations from other countries).

Sound familiar?

So we walk into the situation not knowing all the pieces of the puzzle and the Armedia team immediately began an assessment of the situation.  Quickly the team structured the analysis into the following topical areas:

  1. Strategic
  2. Governance and Oversight
  3. Functional Scope Definition
  4. Usability, Data Search, and Discovery
  5. Architecture
  6. Deployment and Execution
  7. Operations

Next came a deep dive into each area to develop specific recommendations and a roadmap at a granular level. Data categorizations, normalization and data definitions were all important areas of focus given the complexity of handling these items across different jurisdictions. I believe that our team’s recommendations around this area were excellent and well received by the international community, especially because our approach required minimal impact to current product safety operations, which was a key requirement by the sponsors.

We brought value in terms of providing structure and simplification for execution to what seemed at the outset to be a complex problem.  The Armedia report on “Considerations for Pursuing Global IT Interoperability for Publicly Available Product Recalls ” was published by the OECD (Organization of Economic Development) and has been accepted as the strategic guidance document by the international product safety working party set-up for the purpose of creating the global recall pool. The execution work on report recommendations has started and is currently underway.

This complex business issue was in need of a technology execution plan that was intentionally kept simple, and yet met the unique requirements of the customer. My team and myself guided our efforts in order to meet these criteria, and in the end the Armedia team successfully developed recommendations that provided both strategic and efficient solutions to this international IT challenge.

 

 

Using SP Designer 2010 to Add Custom Buttons

June 21st, 2011 by Tim Lisko

Sharepoint Designer  2010 provides a great quick way to add simple actions to your SharePoint application.

I have a project that I wanted to add a couple buttons that would allow the user to navigate away from a “Drop-Off” library to the libraries where files are directed by my content organizer rules. So, without thought to SP Designer I opened my VS 2010 and commenced to coding. The great thing about building your buttons in VS is the flexibility you have – but being so flexible means you have to build a lot even if you only want a little!

In this instance I only wanted my buttons in one library. Using VS2010 you start with an elements.xml file. Unfortunately the elements file can only point to a “type,” not a specific library or list. So, even though I only wanted to see my buttons in my “Drop Off” document library, all the document libraries would also display the buttons. You can certainly get around that by omitting the type and buttons and code them in or setting visibility, but I haven’t done that myself so I was less interested in getting the coding right and figuring out where to insert the coding.

Enter SharePoint Designer 2010. It provides an easy nterface for creating custom actions that aren’t complex. You can create buttons that will navigate to a form, initiate a workflow, or navigate to a URL. Even better, it only applies to the document library or list where you are adding the custom action – exactly what I wanted!

You can certainly add an image to your button – this was something I overlooked initially and was driving me crazy that I “couldn’t” add a button image! Well, of course you can add an image. Just move that scrollbar down on the side of the “Create Custom Action” screen to get to the “Advanced custome action options” – duh!

So, a couple limitations right off:

  • You can’t create tabs, groups, or context groups with SP Designer so far as I can see
  • SP Designer placed my buttons in the “Manage” group of the “Documents” tab. There does not appear to be anyway to direct your buttons to a specific ribbon group or tab that you might prefer.

In this case the SP Designer provided all the functionality I needed and saved me time I would have spent coding, testing, and deploying!

SharePoint 2010 – REST Atom Service and JAVA, part 2

May 26th, 2011 by Tim Lisko

This is the second of two blogs where I demonstrate how to use the openCMIS library from a JAVA client to connect to a CMIS enabled SharePoint site through the REST Atom service of SharePoint.

My previous blog “SharePoint 2010 – REST Atom Service.” provided information on how to connect to a SharePoint site and examined some of the SharePoint site’s capabilities. In this blog I will show how to use the openCMIS library and REST Atom Service to: 1) Access and Create Folders; 2) Iterate over SharePoint folders; and 3) Add documents to a SharePoint folder. This blog builds on the previous one, so reference it if you aren’t able to follow the code in this one.

Accessing and Creating SharePoint Folders

The following exmple will show you how to get and create folder objects. An additional class library is imported for accessing folders and another for getting a CMIS object by path.

 
import org.apache.chemistry.opencmis.client.api.Folder;
import org.apache.chemistry.opencmis.client.api.CmisObject;

Folder folder = session.getRootFolder();
String folderprops=twolines + “ROOT FOLDER:” + newline +
tab + “ID: ” + folder.getId().toString() + newline +
tab + “name: ” + folder.getName() + newline +
tab + “path: ” + folder.getPath();//create new folder in the root folder
Map properties = new HashMap();
properties.put(PropertyIds.OBJECT_TYPE_ID, “cmis:folder”);
properties.put(PropertyIds.NAME, “mynewfolder”);
Folder newFolder = folder.createFolder(properties);//Check properties
String folderprops=twolines + “NEW FOLDER:” + newline +
tab + “ID: ” + newFolder.getId().toString() + newline +
tab + “name: ” + newFolder.getName() + newline +
tab + “path: ” + newFolder.getPath();

//Get another folder by path that already exists; CmisObject does not have a “getPath” method,
//so convert it to a CMIS folder
CmisObject cmisObj = session.getObjectByPath(“/2011″);
Folder fo = (Folder) cmisObj;

//Check properties
folderprops=twolines + “2011 FOLDER:” + newline +
tab + “ID: ” + fo.getId().toString() + newline +
tab + “name: ” + fo.getName() + newline +
tab + “path: ” + fo.getPath();

 

 

Results:

  ROOT FOLDER:
ID: -1
name: Shared Documents
path: /NEW FOLDER:
ID: 87
name: mynewfolder
path: /mynewfolder2011 FOLDER:
ID: 83
name: 2011
path: /2011

Things to note:

1) The path is relative to the Repository, so the “Shared Documents” library could be accessed at its top level with the path “/”.

Iterating over SharePoint Folders

The following exmple will show you how to iterate over the folder objects. An additional class library is imported iterating over CMIS objects.
 

 
import org.apache.chemistry.opencmis.client.api.ItemIterable;

FileList.setText(“FOLDER (Name; ID)” + newline + tab + “CHILDREN (Name; ID)”);folder = session.getRootFolder();
FileList.append(twolines+folder.getName()+”; ” + folder.getId());
tabs = tab;
this.getKids(folder);
}

private void getKids(Folder folder) {
//recursive method to go through library

ItemIterable children = folder.getChildren();
for ( CmisObject obj : children )
{
if(obj.getBaseTypeId().toString()!=”CMIS_FOLDER”)
{
FileList.append(newline+tabs+obj.getName()+”; ” + obj.getId());
}
}
children = folder.getChildren();
for ( CmisObject obj : children )
{
if(obj.getBaseTypeId().toString()==”CMIS_FOLDER”)
{
folder = (Folder) obj;
FileList.append(newline+tabs+”/” + folder.getName()+”; ” + folder.getId());
tabs = tabs + tab;
this.getKids(folder);
}
}
}

Results:

  FOLDER (Name; ID)
CHILDREN (Name; ID)Shared Documents; -1
/2011; 83
/05; 84
/03; 85
 

Things to note:

1) The root ID of SharePoint libraries is always “-1”
2) You can detect and display properties of files within the folders by using the base type “CMIS_DOCUMENT”.
3) The document ID produced from CMIS_DOCUMENT is not the one you see exposed in the SharePoint GUI, but it is the one you use to access a document in CMIS.

Adding a Document to a Folder

Putting documents into a SharePoint folder is typical operation you would need to do. I’ve shown how you get and create a folder, so now you have a place to put your file. A number of additional libraries are needed for this operation.
 

 
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.File;
import java.io.IOException;
import java.math.BigInteger;
import java.io.ByteArrayInputStream;
import org.apache.chemistry.opencmis.commons.data.ContentStream;
import org.apache.chemistry.opencmis.commons.impl.dataobjects.ContentStreamImpl;
import org.apache.chemistry.opencmis.client.api.Document;

//details of the fileChooser not shown here. The goal is to get an InputStream
File file = fileChooser.getSelectedFile();
InputStream is = new FileInputStream(file);
long length = file.length();
BigInteger bi = BigInteger.valueOf(length);
ContentStream contentStream = new ContentStreamImpl(file.getName(), bi, “text/plain”, is);
Map properties = new HashMap();
properties.put(PropertyIds.OBJECT_TYPE_ID, “cmis:document”);
properties.put(PropertyIds.NAME, file.getName());folder = session.getRootFolder();
Document doc = folder.createDocument(properties, contentStream, VersioningState.MINOR);

Things to note:

1) This code shows the essentials, but actual implementation should provide for the various exceptions that could arise, CmisConstraintException and IOException for example.
2) New ContentStreamImpl requires a BigInteger, hence the conversion of the file length from long.
3) VersioningState can be MAJOR, MINOR, NONE, or CHECKEDOUT. Whichever you use must match the versioning enabled in the SharePoint library.

I have shown how you can use the Chemistry openCMIS library and REST Atom Service to:
1) Access and Create Folders; 2) Iterate over SharePoint folders; and 3) Add documents to a SharePoint folder.

I hope this will “de-mystify” how to perform common DM operations in SharePoint using the CMIS standard!


Armedia Case Management (ACM) vs. NIEM

July 29th, 2010 by rrana

Is there any doubt that ACM wins this battle?

But how so? Read on…

Part 1 – The challenge

NIEM is an important cog in a government case management solution. At some point in a case’s lifecycle, you may need to share the case-related information with other agencies or individuals, perhaps to get assistance in completing the case or maybe to give more information to another agency for a similar case that they’re working on. Whatever the reason, this information must be easily passed from one system to the next without being ‘lost in translation’.

NIEM (National Information Exchange Model) is a framework for sharing enterprise-wide information across all levels of government. It has a core set of elements that are standard across all the agencies and has more specific ones for the various entities and stakeholders. Agencies can now speak a common language, allowing one agency to publish data from its case management system to the XML standard, which can then be picked up and parsed by another agency that requires this information.

Now all you need is a case management system that lets you export data into the NIEM standard and then a parser to put it back in.

Pretty neat and simple, n’est-ce pas?

Almost. (Let’s face it, if it really were that simple, I’d have nothing to write about and I’d just put up some comics to keep you entertained.)

There are a few problems to watch out for:

  • Before importing or exporting, the system must check the data’s security classification. A document requiring a classification level of Top Secret cannot be sent to an agency (or individual) with only Confidential level access. Perhaps only certain parts of the document are deemed to be Top  Secret, in which case, the publishing tool should be able to extract only those parts that are at the required access level.
  • Large amounts of data may need to be continuously exported to, or imported from, an external system. Every time an update is made to case data, it may be necessary to push this information out to other agencies. So it may be better to export/import only the changed data and update the existing data. This reduces the time and cost of transfer and would help to reduce duplicated data.
  • Data may be imported that already exists in the case management system. Checks need to be in place to handle matching data during import. When duplicate data is found, is it better to replace the data or create a new version of the existing data?

Armedia Case Management comes with a tool specifically to import from and export to NIEM that tackles these problems. Stay tuned for Part Two… The Solution, which discusses how ACM implements the NIEM publishing process.

Until then, here’s a comic strip to keep you entertained (don’t we all just love Dilbert)…

Think Alfresco from Documentum perspective –Take 1

July 14th, 2010 by bsampath

Open Source ...</ins>

When you work for a while in the software you get numbed to “technologies have come and gone…” occasionally though some become commodities and others trend setters. We have seen that with many products like Apache, Tomcat, Lucene, Drupal …etc that have stabilized and matured over the past years with the help of increased development from the open source realm. Wait! Did I mention the word “Open Source” and going to talk about the enterprise content management?

So without any more ado, we have Alfresco- catering to a rapidly increasing demand of the enterprise content management solutions which is built over the open source technologies such as Spring, Hibernate, and Lucene platforms. Having done years of Documentum development and several Alfresco projects of late, I think there are some interesting overlaps and differences of approach that I feel would make the developers get adapted quicker.

With the wiki site overwhelmed with Introduction, API’s, Development, Deployment and the Forums to answer all the questions regarding the issues faced during the project phase, I am here to talk purely from the developers perspective on what’s the key areas that I happen to witness the difference from the Documentum space.

The road map for my next series of blog is going to cover each of the areas mentioned below in more detailed, code abundant and developer centric approach which will answer the questions:

  • Does this feature exist in Documentum or Alfresco or both?
  • If yes, how different is the approach?

So with that preamble, and in no particular order, I give you my list of the key areas I got hands on and learnt how different Alfresco is:

Custom data model is the core for any enterprise content management solution. The use of “Aspects” as its core is the fundamental concept for content modeling in Alfresco. Although in the form D6, aspects was introduced, how different is the use and approach in Alfresco is something I will take a deep dive in my next blog.

Alfresco Web Scripts brings together the world of content repository and the web. Being a Documentum developer earlier ways of interaction with the repository have been either using DFC API’s or DQL. In Alfresco, Web Scripts provide RESTful access to content within the repository and we can build our own interface using java script. A custom move operation is implemented using the Web Scripts and the comparison of the implementation with the Documentum would be a something to be noted.

On my last project, we had requirements for the customers to be able to permanently redact Personally Identifiable Information (PII) from existing documents stored in the repository and version the original document upon save. For various reasons, we decided to integrate the 3rd party tool Daeja ViewOne module to provide this capability. I will discuss the topic as part of this blog series.

I started this series based on my experience implementing Alfresco projects and I invite you to share any of your experiences with any part of the road map wherein you run into interesting twists and turns? Did you drive off the road to get some help? I welcome your feedback as the blog takes its shape. See you all soon in Take 2.

Software design is in crisis

July 12th, 2010 by A.J. McClary

In the 90’s, when ECM solutions were rare, we could get away with designing solely toward requirements, but there is too much at stake nowadays. A recent study sampling various IT projects reported that:

  • 62% percent of projects fail to meet their schedules
  • 49% are over budget
  • 47% have higher than expected maintenance costs
  • And get this—25% are canceled before they are ever deployed!

If you’ve been in the software industry long enough, you’ve probably seen all of these things happen. The funny thing is, it doesn’t really come down schedule, cost, or requirements—it comes from bad design. When software companies think design, they’re thinking about contractual obligations and meeting commitments with their stakeholders. Here is a typical scenario:

Company wins contract. Client provides requirements. Company builds a solution, meeting the requirements. Testers validate requirements and application is deployed to a set of users. The users hate it and the client makes new requirements, company builds to those requirements, and the users hate the next iteration…and so on.

This can be resolved by utilizing user-centered design principles in your system development life-cycle. Software is not about code, it’s about people. Instead of our clients telling us what they want, we should be telling them what they need. As engineers, we can do a much better job building solutions then they can—that’s what they hire us for. To be successful, we need to incorporate user research, information architecture, interaction design, and usability testing into our process.

“Iteration 0” – 10 Tasks to Guarantee a Slammin’ User Experience

Let’s start with “Iteration 0”. This sprint is completely devoted to user experience. The point is to get out of habit of thinking of Java Beans and database schemas and start thinking about people. Here are tasks that need to be accomplished:

  1. Gather assumptions and requirements. Take some time to get acquainted with the requirements and begin to make assumptions based on your experience with the technology.
  2. Analyze competition. Familiarize yourself with the way your competition handles things. This is not necessarily the solution you should be striving for, but is excellent to have in your back pocket to show how your solution is better or to compare solutions to initiate change.
  3. Understand goals & tasks. Comprehensive user research, interviews, card sorting exercises, and contextual inquiries help identify user needs
  4. Develop personas and scenarios. Evangelize these with everyone on your team. They can be in the form of user stories, posters, work-flow diagrams, and profiles.
  5. Build a content strategy. Find out what content you have, what needs to be developed, what needs to be expanded, and what can be cut. Also create a schedule for delivering those missing gaps.
  6. Information architecture. It’s more than figuring out what content goes where. It’s also what information is most important to your users. Identify those needs and incorporate them into your design.
  7. Prioritize features. One of the greatest advantages of user centered design is that you often find some requirements barely impact your users. Those requirements can be re-prioritized so you can focus on what’s really important.
  8. Build wireframes and interaction designs. Setting expectations on functionality, how it should look, and how it should behave reduces future UI defects.  
  9. Design a prototype. Build something you can take with you to road shows that incorporates both visual and functional design. Update the prototype during future iterations so you always have an accurate portrayal of what the product will look like at launch.
  10. Validate usability. There are hundreds of techniques, including a usability inspection, paper prototyping, and eye tracking, but put something in front of your users frequently.

Points 8, 9, and 10 should be repeated throughout all future iterations until the project’s completion. When user experience drives design, you build products people love to use.

Copyright © 2002–2011, Armedia. All Rights Reserved.