Chapter 3
Silverlight: An Enterprise-Ready Technology Platform
In Chapter 2, we developed a desktop application-like Rich Internet Application (RIA) called My Album using Silverlight. Now the key question is, can it be an enterprise application? I believe we are pretty close.
Chapter 1 provided a good exploration of the Web 2.0 concept. This chapter will start with outlining the concepts behind another buzz word, "Enterprise 2.0." The text then redefines the question, "What is an enterprise-ready technology platform?" in terms of Enterprise 2.0. Later, you'll learn why Silverlight is an enterprise-ready technology that enables Enterprise 2.0 and Web 2.0 applications. At the end of the chapter, I'll discuss why we are pretty close to transforming the My Album application developed in Chapter 2 into an enterprise application.
What is an Enterprise-Ready Technology Platform?
The impact of globalization, advancements in technology platforms and components, and increased customer expectations led to Web 2.0 and challenged enterprises to think innovatively. This change ultimately altered the implementation of enterprise systems in comparison to the traditional monolithic enterprise information systems. The changes in implementation models also raised the need for radical structural and behavioral changes within organizations. As a result, the Web 2.0 concept also drove the Enterprise 2.0 concept.
Figure 3-1 shows the "big picture" of the Enterprise 2.0 concept.
The term "Enterprise 2.0" is originally defined as the following by Professor Andrew McAfee of the Harvard Business School:2
Enterprise 2.0 is the use of emergent social software platforms within companies, or between companies and their partners or customers.emergent social software platforms
Social software enables people to rendezvous, connect, or collaborate through computer-mediated communication and to form online communities.
Platforms are digital environments in which contributions and interactions are globally visible and persistent over time.
Emergent means that the software is freeform, and that it contains mechanisms to let the patterns and structure inherent in people's interactions become visible over time.
Freeform means that the software is most or all of the following:
Optional
Free of up-front workflow
Egalitarian, or indifferent to formal organizational identities
Accepting of many types of data
Professor McAfee also defined the terminology SLATES (search, links, authoring, tags, extensions, and signals), demonstrating key elements of Enterprise 2.0 (shown in Figure 3-2).
Further, Dion Hinchcliffe of ZDNet refined the Enterprise 2.0 elements and introduced the term FLATNESSES (Freedom, Links, Authorship, Tagging, Network-oriented, Extensions, Search, Social, Emergence, Signals).Figure 3-3 presents the refined elements of Enterprise 2.0.
Table 3-1 summarizes the key differences between Enterprise 1.0 and Enterprise 2.0.
Enterprise 1.0 | Enterprise 2.0 |
Hierarchy | Flat organization |
Friction | Ease of organization flow |
Bureaucracy | Agility |
Inflexibility | Flexibility |
IT-driven technology/Lack of user control | User-driven technology |
Top down | Bottom up |
Centralized | Distributed |
Teams are in one building/one time zone | Teams are global |
Silos and boundaries | Fuzzy boundaries, open borders |
Need to know | Transparency |
Information systems are structured and dictated | Information systems are emergent |
Taxonomies | Folksonomies |
Overly complex | Simple |
Closed/proprietary standards | Open |
Scheduled | On demand |
Long time-to-market cycles | Short time-to-market cycles |
It is apparent that the Enterprise 2.0 concept is associated not only with IT, but also with people and organizations. Organizations have to implement an optimized, diversified, simplified, agile, and cohesive IT organization model, as well as a workforce that can support the Enterprise 2.0 concept and can develop, deploy, and maintain Web 2.0–based RIAs.
This chapter will cover only the IT capabilities that are required to move the enterprise toward the Enterprise 2.0 concept and develop and deploy RIAs.
Goals for the Enterprise-Ready Technology Platform
In the era of Enterprise 2.0 and Web 2.0, we need to revisit the definition of an enterprise-ready technology platform. I believe that the technology platforms and components that help enterprises to achieve the following three goals supporting Enterprise 2.0 and Web 2.0 concepts can be defined as enterprise ready:
Enabling the development and deployment of collaborative business-enabled applications (BEAs) empowering end users and achieving business values
Supporting seven key principles (flexibility, usability, simplification, reusability, scalability, maintainability, security) for building RIAs as services
Enabling development of platform-independent RIAs as services to support all types of devices and platforms
Let's take a closer look at these three goals.
Enterprise 2.0– and Web 2.0–based technology platforms enable organizations to develop BEAs that drive business value and customer satisfaction. BEAs6 are IT-driven RIAs, which implies a balanced approach for application requirements based on customers' requirements, organization strategies, business value, and quality standards. Development of BEAs usually follows the agile software development life cycle (SDLC) to deliver applications on time and with a controlled cost model meeting customer expectations and the organization's IT budget.
Based on the preceding explanation, a simple formula can be defined for BEAs:
BEAs =
Balanced (requirement implementation + quality standards) + in-time delivery + controlled cost
Today, most organizations look at their IT division as a spending division rather than a profit-making division. Business-enabled RIAs usually strive to deliver maximum customer satisfaction and stakeholder expectations. Due to this reason, in the long term, proper alignment of business-enabled RIAs with an organization's strategies ultimately helps the organization to transform its IT department from a cost center to a profit-making center by returning maximum return on investment (ROI).
BEAs mainly focus on both angles of the business—customers and organization strategies (i.e., stakeholders).Figure 3-4 demonstrates the user-centric and business-driven key features of BEAs.
As shown in Figure 3-4, user-centric features of BEAs are focused on three main factors—users, users, and users. Users are empowered to customize services and features (such as user-based and user role–based customized views and subscription-based services) of BEAs easily based on their needs. The following are key user-centric features of BEAs that improve the overall usability of applications and empower end users:
Richness
Flexibility
Consistency
High performance
High stability
Business-driven features of BEAs are focused on mainly three factors—organization strategies, quality, and cost. The following are key business-driven features of BEAs that enable organizations to support Enterprise 2.0 and Web 2.0 concepts and help organizations gain maximum ROI in the long term.
Proper quality standards and quality control process
Controlled cost
Remodeled IT organization model and strategies
Enhanced team integrity and ethical rules to support globalized cross-cultured virtual teams
Support for global and country-specific regulatory policies
Streamlined and integrated business processes
The balanced approach mentioned previously represents a balancing act among the four dimensions of BEAs (see Figure 3-5) in order to achieve the maximum ROI:
Controlled cost
Adjustment and alignment to requirements and strategies
Quality maintenance of organizations and applications
Time to deliver products and time to handle change management
Seven Key Principles for Building RIAs As a Service
Abstracted, loosely coupled, and collaborative RIAs based on service-oriented architecture (SOA) help enterprises to develop, deploy, and distribute RIAs as software as a service (SaaS) to the end users.
The SOA-based SaaS helps to achieve several critical success factors, the following of which are but a few, for software applications supporting the Enterprise 2.0 and Web 2.0 concepts:
Reducing the overhead of software application development and deployment
Seamless integration among internal and external systems
Rich and collaborative lightweight RIAs
Ability to deliver applications on time
Figure 3-6 shows seven principles—usability, flexibility, simplicity, reusability, scalability, maintainability, and security—for building SOA-based RIAs and deploying them as SaaS. I will explain these seven key principles in detail in the next chapter.
Device- and Platform-Independent RIAs
The last, but not least important, attribute of an enterprise-ready technology platform is the capability of developing worry-free device-and platform-independent RIAs supporting Enterprise 2.0 and Web 2.0 concepts.
Figure 3-7 demonstrates Enterprise 2.0 platform integration. As shown in the figure, the Enterprise 2.0 and Web 2.0 environment cloud is information (content and metadata) and media rich and contains lightweight services, enabling desktop applications like RIAs on the following:
Devices such as computers and mobile devices
Browser platforms such as Internet Explorer, Firefox, and Safari
Operating systems such as Windows, Mac, and mobile operating systems
Is Silverlight an Enterprise-Ready Technology Platform?
It's time to validate that Silverlight is an enterprise-ready technology platform for developing RIAs supporting Enterprise 2.0 and Web 2.0 concepts, and thus are
BEAs
SaaS applications supporting the seven principles
Device and platform independent
Silverlight-Based Applications Are Business-Enabled RIAs
Silverlight has all the potential to empower end users by providing a very rich and personalized user interface. It is also able to drive business with the capability to seamlessly integrate and process all types of digital information (media and nonmedia) in a secure environment, and thus providing a competitive edge in the market.
The powerful integration of Silverlight with key Microsoft development and design platforms such as the .NET Framework, Visual Studio, and Expression Studio enable IT organizations to develop and deliver lightweight, high-quality, Silverlight-based RIAs on time and under budget, returning maximum ROI.
The rich gallery of WPF-based XAML user controls supplied by Microsoft and support from third-party Microsoft partners for enhanced rich XAML user controls provide further opportunities to develop highly usable and loosely coupled Silverlight services and applications. These Silverlight technology features and capabilities will enable enterprises to apply a balanced approach in defining the organization's IT vision and technology roadmap. They allow organizations to develop and deliver simplified, Silverlight-based, business-enabled RIAs that can return maximum ROI.
Silverlight-Based RIAs Follow the Seven Key Principles of Building RIAs As a Service
The main vision of Silverlight is to support all seven key principles—usability, flexibility, simplicity, reusability, scalability, maintainability, and security—for building RIAs as a service. The My Album application that we developed in Chapter 2 followed some of the key principles, such as usability and simplicity. We will prove that Silverlight applications also enable us to implement the remaining key principles in Chapters 4 and 5 when we transform the My Album RIA into the Enterprise Training Portal RIA.
Silverlight Is Platform Independent
One of the key goals of Silverlight is to keep it lightweight and platform independent in terms of compatibility with different operating systems, web browsers, and device types. As described in Chapter 1, Silverlight provides a platform to develop cross-browser, cross-platform, and cross-device RIAs. In addition to this cross-platform approach, Silverlight has enhanced networking support including policy-based cross-domain networking that enables different types of application deployment.
Conclusion: Silverlight Is an Enterprise-Ready Technology Platform
It is crystal clear from the preceding discussion (and from the creation of the My Album application in Chapter 2) that Silverlight is an enterprise-ready technology platform that supports Enterprise 2.0. Using Silverlight, we can develop platform-independent, service-oriented, business-enabled RIAs and deploy them as SaaS.
Design Concepts for Silverlight-Based Enterprise RIAs
Silverlight is clearly an enterprise-ready technology platform that supports the Enterprise 2.0 and Web 2.0 concepts. In this section, we will mainly focus on the design concepts for Silverlight-based Enterprise 2.0 RIAs. We will revisit the My Album application from Chapter 2 so you can understand these design concepts.
Architecture Components for Enterprise RIAs
As shown in Figure 3-8, from the architecture perspective, IT executives, architects, developers, and IT professionals need to focus on the following six key architecture components for enterprise RIAs:
1. System architecture
2. Information architecture
3. Application architecture
5. User interface framework design
6. Deployment and distribution
The system architecture mainly defines the infrastructure environment in which the RIA will be deployed. The system architecture definition supports and aligns with the organization's vision, product landscape, and technology roadmap. During the definition of the system architecture, we should consider and define application environment and deployment-specific aspects such as
Server and network architecture
Network impact analysis
Application software components and their setup and installation process
Fault tolerance, monitoring, and instrumentation
Information architecture including metadata definition and implementation
Database platform definition with high availability, backup, archive, retention, discovery, and digester recovery process implementation
Domain definition and security
User provisioning: authentication, authorization, and subscription services
IT governance and regulatory policy implementation
Services integration and deployment
Standardization of administration and maintenance processes
As you can see from the preceding explanation, more than just defining the infrastructure environment, the system architecture defines the enterprise architecture of the RIA and considers and covers the information architecture, application architecture, services architecture, user interface framework, and deployment and distribution strategies at a high level.
The information architecture of the RIA mainly includes the definition of the data storage environment and the definition of the content.
Data Storage Environment Definition
The data storage environment provides architecture with details and design on how a secured data storage environment is deployed. It will support the implementation of high availability, backup, archive, retention, discovery, and digester recovery processes.
The data storage environment also defines the design and implementation of the data storage platform as a platform for secured collaboration among users. If there is a need for a data warehouse implementation, the information architecture also considers and defines different warehouse implementation approaches (e.g., information data warehouse, operational data warehouse, and data directory warehouse).
The content definition includes logical and physical data models detailing data type definitions, data structures, data relationships, data processing rules, data distribution rules, data security and governance rules, data sharing policies, and data discovery rules. The content definition should clearly define the taxonomy of the metadata related to the content. This metadata is used to identify and categorize different types of data and represent the right data at the right time as information to the end users, reducing the problem of information overload.
It is important to consider the use of industry-standard and open-standard metadata definitions (e.g., Dublin Core Online Metadata Standards—http://dublincore.org) in order to ease and standardize information integration and collaborative information among different interorganization and intraorganization systems. The use of industry-standard and open-standard metadata also helps build and maintain information-rich RIAs.
The application architecture of RIAs mainly provides the application framework definition, determining the technologies and services that will be used in the development of the application. The application architecture also covers the design and definition of the application's services and components.
Application Framework Definition
The application framework defines the integration of different application layers—the presentation (user interface) layer, the services layer, the business components layer, the data access layer, and the data storage platform layer. The proper definition of the framework defining loosely coupled integration of different layers is critical in order to support the lightweight and service-oriented RIA development model and deploy RIAs as SaaS.
The application framework also defines the use of the following:
Patterns and best practices. As an example of the use of Microsoft patterns and best practices, consider the Composite Application Guidance for WPF, which helps you implement service-oriented, loosely coupled, enterprise-level WPF-based applications. (In the future, the Composite Application Guidance for WPF is going to support Silverlight-based applications also. Visit the MSDN web site for more details—http://msdn.microsoft.com/en-us/library/cc707819.aspx.)
An organization's reusable components and services from the components/service library.
Services and interfaces to integrate different internal and external systems and business processes.
Technology Platform and Components Definition
The definition of the use of technologies and technology platform is critical in order to make sure that the developed RIA is aligned with the organization's long-term vision, product landscape, and technology roadmap. The architecture should be flexible for migrating one version of the technology to the other. Along with the definition of which key technologies and technology platform to use, during the definition of the application architecture, one of the key things you will evaluate is the buy vs. build of services and components.
Buy vs. build is one of the critical and strategic decisions you need to consider before choosing to custom-develop all the components and services. There are numerous strategic advantages (including getting maximum ROI) in buying existing components and services rather than building and maintaining them. You should consider building custom components and services that are unique in terms of features.
The SOA concept has brought this additional layer into the architecture definition and is now playing a vital role in any enterprise-level application. The deployment of applications as SaaS brought a revolution in the way enterprise architects design applications, enterprises develop and deploy applications as lightweight services, and end users utilize them in a collaborative way.
It is necessary to understand business requirements, requirements for integration between different internal and external systems, organization's product and technology roadmap, and the available open standards in order to define and architect loosely coupled services.
Application services feature integration between the following:
The abstracted application presentation layer and the business components that perform business logic
The data storage platform to access the data and feed data to business objects and the presentation layer, and to make the application a data platform–independent application
Internal and external systems for seamless business process integration and automation
While defining the application architecture, architects should consider implementing business process execution using services that can in the long term be used as reusable services across different applications. The services interface and contract definitions should be generic enough (not tightly coupled) to allow building a generic services library for the organization. This would help to reduce overall development and maintenance efforts and aid organizations in delivering effective and efficient applications just in time.
Developing and deploying applications as SaaS brings simplification, but also brings a number of different challenges such as these:
The loosely coupled and abstracted SOA approach can bring overhead when integrating different layers of the application to execute business processes. This can have an impact on the overall response time, and thus can degrade the performance of the application. The degraded performance can significantly reduce the usability of the application, making end-user acceptance questionable.
The system infrastructure architecture plays a critical role in the successful execution of service-based applications. Enterprise architects must consider the network latency and network bandwidth during the network impact analysis in order to achieve acceptable performance for end users accessing services from any part of the world and on any type of network (based on the defined enterprise application scope).
Security is one of the major concerns of SaaS. The distributed nature of services, web-based access to services, and XML-based, message-oriented digital information exchange using web-based protocols bring numerous types of vulnerabilities such as identity management, cross-domain information exchange, message integrity and confidentiality, and information hacking.
Architects must consider the preceding challenges during the definition, design, implementation, and deployment of services.
User Interface Framework Design
An efficient, interactive, customizable, and rich user interface is one of the key features for any successful enterprise RIA. As described in earlier chapters, Silverlight and Microsoft's tightly coupled designer and developer tools enable professionals to develop a desktop application–like user interface. However, it is not easy to develop an enterprise RIA that can support a user interface that caters to a very wide, cross-border, diversified, and cross-cultural group of end users.
Before implementing the presentation layer, we should consider finalizing the user interface framework of the application. In order to finalize the user interface framework, designers should identify key objectives of the application and different common navigation patterns; they can then align these patterns with formal navigation patterns. In Chapter 2, we followed the same approach: we identified navigation patterns and defined the user interface framework.
The identification of repeatable navigation patterns will help you to develop reusable user controls/components libraries that can be referenced from multiple applications. As described earlier, you should develop the presentation layer using patterns and best practices such as Microsoft's Composite Application Guidance for WPF to develop loosely coupled user interface.
The SOA and SaaS application development and deployment concepts have led organizations to consider deployment and distribution as key IT strategies. Including package definition and deployment strategies as part of the architecture definition helps organizations to provide secure, high-performing services and improve end-user experience.
For Silverlight-based RIAs, you need to make a decision on what to include within the package and what to include as a reference. The application then downloads the references on demand in order to maintain a minimal package size for distribution. This approach thus reduces download and startup time for the application and improves overall performance and end-user experience.
Silverlight also provides implementation of cross-domain policies in order to supply secured communication and access to cross-domain services and information. It is important to consider and define the cross-domain deployment strategy (if needed) and include the appropriate cross-domain policies as part of your application's system architecture. Chapter 6 will cover in more detail cross-domain policies for Silverlight applications.
Current Design for the My Album RIA
The main focus of Chapter 2 was to develop a fully functional RIA quickly—the My Album RIA—using Silverlight. As a result, from the design point of view, we just concentrated on the application navigation (i.e., user interface).
We were pretty successful in achieving that goal, but the My Album RIA is not flexible and scalable enough to accommodate the dynamic nature of an enterprise-level application and customer requirements. Figure 3-9 presents the application architecture of the Silverlight-based My Album application developed in Chapter 2.
As shown in Figure 3-9, we really did not focus on the enterprise aspects when building the My Album RIA, even though it has a rich desktop application–like user interface and user interactivity functionality.
We used the Silverlight Application project template to create the My Album application project. The presentation layer of the application consists of the XAML-based externalized user interface that we defined based on the user interface framework definition. We provided user interaction by implementing event handlers in the code-behind C#
managed code.
The My Album media content (picture images, thumbnail images, and videos) file names and location information was hard-coded within the managed code and included as part of the package. This is not the best way to reference and deploy the media content.
Using the default Silverlight application package mechanism, we developed the application deployment package, included all images and video files as part of the package, and uploaded the application deployment package to the Microsoft Silverlight Streaming Server using the free Microsoft Silverlight Streaming Service. The uploaded application can be accessed directly from your account on the Microsoft Silverlight Streaming Server or can be attached as a plug-in to your web application.
Designing the My Album Application As an Enterprise RIA
In order to understand the design concepts of SOA-based, enterprise-level RIAs deployed as SaaS, we will take a first shot at revising the architecture of the My Album application. We will transform the application architecture so that My Album can be developed as an enterprise-level RIA. Figure 3-10 demonstrates the revised enterprise-level application architecture for the My Album application that will help to transform it into an enterprise RIA.
During the process of reevaluating the application architecture of the My Album RIA, we will consider all aspects of the Enterprise 2.0 architecture that we discussed in the preceding sections of the chapter.
Defining a Modular Presentation Layer
We will use the same Silverlight Application project template to create the My Album enterprise RIA project, as well as the same user interface framework design we defined in Chapter 2. The presentation layer of the application consists of the XAML-based externalized user interface framework definition.
The key difference between the initial My Album application and the proposed enterprise-level version is the use of a modular user interface design approach. During the definition of the user interface framework, we need to identify repeatable navigation pattern(s) that can be reused across more than one application. We can implement identified reusable navigation patterns (e.g., preview pane, left-side navigation pane, content container) as custom Silverlight XAML user controls using the Silverlight Class Library project and make them part of the Silverlight custom user controls library.
Again, we'll provide user interaction in code-behind event handlers. However, we need to identify possible reusable functionality (e.g., identifying left navigation pane categories and building tabs dynamically) and make it part of the reusable components library using the Silverlight Class Library project type.
In addition to the XAML-based presentation layer definition, the application presentation layer's modular approach will simplify the process of maintaining a consistent look and feel and functionality across enterprise-level, Silverlight-based RIAs.
Defining Loosely Coupled Custom Web Services
Web Services play a vital role in implementing SOA-based enterprise applications and integrating different internal and external systems. Silverlight-based RIAs are capable of integrating with Web Services because of their code-behind managed code. An XAML user control's code-behind or a referenced class library component can call Web Services to integrate with different database components or different systems, or to perform business logic.
As an example, for the My Album application, we can utilize Web Services to retrieve the definition of the left-side navigation from a centralized location to create the categorized tab dynamically.
Using code-behind managed code, Silverlight can also integrate with Windows Communication Foundation (WCF)—a service-oriented programming model incorporating ASP.NET Web Services, .NET Framework remoting, and enterprise services. I will demonstrate the integration of WCF with Silverlight in Chapter 5.
Defining the Business Components Layer
The enterprise-level RIA business components layer is separated from the presentation layer and abstracted from the data storage platform.
As shown earlier in Figure 3-10, the business components layer comprises
Abstracted business components to execute business logic.
A set of data adapters that help us to integrate and access different types of data storage platforms. They allow us to transform data into the standard format required by our business components.
A set of service adapters that help us to transform the information into the format that is required by various Web Service interfaces to integrate with the application presentation layer.
Setting Up the Application Environment
Defining the infrastructure is critical for high performance and secure execution of enterprise applications. For the My Album application, the infrastructure architecture and database server–based user provisioning can provide effective user management and identity management. The database server can also be used for the metadata management. Based on your enterprise strategy, you need to decide the storage platform for image and video media files.
In addition to the database servers and media storage servers, you need application and web servers at minimum to deploy RIAs. Based on your organization's policy, you need to decide where to deploy the application—in the same domain or cross-domain, on the Internet or intranet zone— and whether to use a demilitarized zone (DMZ) to provide additional security to the organization's network.
After discussing the concept of Web 2.0 in Chapter 1 and developing the My Album RIA to demonstrate Silverlight's capabilities and supporting development environment in Chapter 2, this chapter defined the following:
The Enterprise 2.0 concept
The features of a technology that can make it an Enterprise 2.0–ready technology platform
The aspects of Silverlight that make it an Enterprise 2.0–ready technology platform
A new version of the My Album RIA architecture to develop and deploy it as an enterprise-level RIA
The Web 2.0 concept brings revolution to web-based application development and encourages enterprises to reevaluate their organization strategies, organization structure, and information system implementation approach. This new approach to develop and deploy RIAs is what Enterprise 2.0 is all about.
Capabilities to develop and deploy collaborative BEAs, support for the seven key principles (flexibility, usability, simplification, reusability, scalability, maintainability, security) of RIAs, and support for developing RIAs as platform-independent services are key features of Enterprise 2.0 and Web 2.0. Technology platforms and components that support these features are defined as enterprise-ready technology platforms and technology components.
Silverlight is an Enterprise 2.0–ready technology platform that supports all three goals and enables us to develop SOA-based, enterprise-level RIAs and to deploy them as SaaS.
At the end of the chapter, we redefined the My Album application architecture by incorporating SOA-based application development and SaaS deployment principles.
In the next chapter, we will dive into the details of SOA. We will also see details of the seven key principles for building Silverlight-based RIAs as services.
Links from the Microsoft Web Site
ASP .NET Controls for Silverlight, http://quickstarts.asp.net/3-5-extensions/silverlight/default.aspx
Developing Silverlight Library Assembly, http://msdn.microsoft.com/en-us/library/cc296243(VS.95).aspx
1. M. R. Rangaswami, "Enterprise 2.0: The Big Picture," http://sandhill.com/opinion/editorial.php?id=98&page=1, 2006
2. Professor Andrew McAfee, "Enterprise 2.0, version 2.0," http://blog.hbs.edu/faculty/amcafee/index.php/faculty_amcafee_v3/enterprise_20_version_20/, 2006
3. Dion Hinchcliff, "The state of Enterprise 2.0," http://blogs.zdnet.com/Hinchcliffe/?p=143, 2007
4. Ibid.
5. Enterprise 2.0 Conference, "What Is Enterprise 2.0?" http://www.enterprise2conf.com/about/what-is-enterprise2.0.php
6. Ashish Ghoda, "'Business Enabled' Applications—Part One," http://advice.cio.com/ashish_ghoda/business_enabled_applications_part_one
18.222.182.73