0% found this document useful (0 votes)
265 views17 pages

A Practical Approach To Application Modernization: Presented By: Vmware

This document provides guidance on modernizing applications through a practical approach. It emphasizes starting small by focusing on a single application to build skills and momentum. It also stresses the importance of culture change through internal buy-in, clear expectations, and restructuring teams. The document then discusses portfolio prioritization, technology choices, and provides a checklist for application modernization.

Uploaded by

Monika
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
265 views17 pages

A Practical Approach To Application Modernization: Presented By: Vmware

This document provides guidance on modernizing applications through a practical approach. It emphasizes starting small by focusing on a single application to build skills and momentum. It also stresses the importance of culture change through internal buy-in, clear expectations, and restructuring teams. The document then discusses portfolio prioritization, technology choices, and provides a checklist for application modernization.

Uploaded by

Monika
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 17

A Practical Approach to

Application Modernization
Presented by: VMware
A PRACTICAL APPROACH TO APPLICATION MODERNIZATION

Table of Contents
Who Should Read This Book? 3
Introduction 3
App Modernization: A Practical Approach 5
Principles of Practical Application Modernization 5
Essentials for App Modernization Success 6
Culture is Key 7
Get Internal Buy-In 7
Set Expectations Appropriately 8
Restructure Teams as Necessary to Support Your Modernization Efforts 9
Creating Modernization Champions 9
Portfolio 10
Making Sense of Your Portfolio 10
Choosing the Right Starting Point 11
Technology Choices 12
Making Technology Decisions 13
Breaking Down Monolithic Applications 14
Do I Need Kubernetes? 15
Should I Move My Application to Kubernetes? 15
Your App Modernization Checklist 16
What Should I Do Next? 17

2
A PRACTICAL APPROACH TO APPLICATION MODERNIZATION

Introduction
For many enterprises, digital transformation is taking on new urgency we will refer to real-world examples like this one that demonstrate how
as a greater percentage of the world’s economic activity shifts online companies have tackled their application modernization challenges to
in response to the COVID-19 pandemic. This means getting better at help illustrate what’s possible.
developing software and doing it quickly. While creating new applications
is relatively straightforward, not all existing applications are built to keep
pace with changing business needs, nor do they integrate easily with new
apps. Modernizing your existing app portfolio has therefore become a
critical part of transformation success.

For example, many companies depend on massive, monolithic


applications to support e-commerce. Built on outdated frameworks and
the result of organic growth over time, these applications struggle to
cope with the new reality. Adding functionality in one part of the app
creates regressions in other areas. Testing is complicated, maintenance
is difficult, and scaling beyond a certain limit, all but impossible. Just
finding people who have the expertise and interest in maintaining these Who Should Read This Book?
apps can be difficult. This book is targeted to anyone spearheading an application
modernization project.
Dick’s Sporting Goods was struggling with a number of legacy
applications that were slow, fragile and expensive to maintain. Perhaps you’ve been assigned modernization tasks and are just
These apps required heroics on the part of the IT team to operate and looking for an entry point to get started, or maybe you are part
often failed to deliver the desired user experience—for internal users of an organization that’s struggling to deliver software features
and customers. Recognizing these limitations, the company initiated and services faster but constantly coming up short.
a significant modernization effort in 2017, resulting in faster time to Either way, this book is intended to provide pragmatic, high-
market and meaningful outcomes for its business. Throughout this eBook, level guidelines to put you on a path to success. It also includes
pointers to more in-depth information as you plan next steps.

P R O P R I E TA R Y A N D C O N F I D E N T I A L T O V M W A R E , I N C . 3
A PRACTICAL APPROACH TO APPLICATION MODERNIZATION

Whether your target application is an e-commerce monolith, a critical


financial application, or some other application specific to your business,
the process of application modernization encompasses the whole range
of things you can do to an application, in order to:

• Simplify management and maintenance


• Test the app more efficiently
• Ship new versions more quickly
• Scale the app more easily
• Utilize modern infrastructure
• Decrease costs What Is Cloud Native?
Cloud native is an approach to building and running applications
The goal of application modernization should be to deliver the specific that leverages the cloud computing delivery model. Cloud native
set of benefits you need, not all possible benefits. This book describes is about how applications are created and deployed, not where.
some practical guidelines for modernization based on cloud native It’s appropriate for both public and private clouds. Most important
principles and explores important considerations surrounding culture, is the ability to offer nearly limitless computing power on-demand,
portfolio prioritization, and technology. along with modern data and application services for developers.
When companies build and operate applications in a cloud native
fashion, they bring new ideas to market faster and respond
sooner to customer demands.

Learn More

P R O P R I E TA R Y A N D C O N F I D E N T I A L T O V M W A R E , I N C . 4
A PRACTICAL APPROACH TO APPLICATION MODERNIZATION

start to recognize other parts of your organization and processes that


need to be modernized.

This enables you to test your assumptions, understand the limits and
constraints of your existing software development processes, and get
a better idea of what modernization is going to require. Once you have
something running, the lessons learned build confidence in your team.
Being able to show tangible results in days or weeks (versus months)
creates momentum for future work, and an expanded roadmap of projects.

For example, Travelers Insurance decided to focus on just one small—


but critical—piece of its application portfolio. Focusing on a single
element helped the Travelers team build skills and confidence while
App Modernization: demonstrating they could deliver significant value.

A Practical Approach
Principles of Practical Application Modernization
Many enterprises start the modernization process by hiring a consulting
company to evaluate their portfolio of existing applications, casting a
• Start from where you are today
big net over everything. This approach works for convincing executives
• Start small
of the seriousness of the company’s situation, but it doesn’t provide a
• Think agile and iterative
level of analysis that enables you to actually get to work.
• Learn by doing
• Build confidence
VMware recommends a practical approach to application modernization
• Demonstrate results quickly
that is agile and iterative. We often suggest starting with a single
• Forget about perfection
business unit or a sampling of applications that represent archetypes
across your overall portfolio. Then, dig into these applications using
code analysis to find an initial set of applications that are technically
easy to modernize. Once you have at least one project going, you will

P R O P R I E TA R Y A N D C O N F I D E N T I A L T O V M W A R E , I N C . 5
A PRACTICAL APPROACH TO APPLICATION MODERNIZATION

Essentials for App Modernization Success


Regardless of your industry or the specifics of your application portfolio, there are a few guidelines that—based on experience working on
thousands of engagements—we believe are essential for success. In the sections that follow, we’ll explore some important guidelines in three areas:

Culture Portfolio Technology


Culture is critical to the success of app You may have hundreds of applications that There is no single technology stack or set of
modernization and cloud native development. need attention. How you set priorities and tools that ensures success. Keeping an open
Technology is great, but you won’t get very where you start has a big impact on where mind and choosing technologies pragmatically
far if your people aren’t bought in or your you end up. will get you further than trying to pass
organization isn’t structured to deliver. arbitrary purity tests.

P R O P R I E TA R Y A N D C O N F I D E N T I A L T O V M W A R E , I N C . 6
A PRACTICAL APPROACH TO APPLICATION MODERNIZATION

Executives
The most successful modernization efforts have strong
executive support, and the executives that actively support
modernization reap the largest rewards. Active support means
empowering people to challenge existing norms and patterns—
and making sure modernization efforts don’t get entangled in
“that’s the way it’s always been done” thinking.

Executives almost always think about the bottom line, so it’s


important to help them understand how modernization will
make the company more successful and more profitable. Most
executives in established companies are now tuned into the
idea of digital transformation and the importance of a rapid
Culture Is Key cadence of new software features and digital services. If you
can convince a CIO that the average development time for new
Much has been written about the critical importance of culture to features can be reduced from two months to two weeks, you’ll
software development success. This section focuses on three critical probably get their attention.
elements: buy-in, setting expectations, and organizational structure.
Developers
Get Internal Buy-In Application developers are motivated by shipping features
and making software more viable; their applications are
Before you start on any serious app modernization effort it’s essential to often on the critical path for profit generation. It’s asking a
make sure that you have internal buy-in for the effort—both from the top lot to tell developers to stop what they are currently doing
down and the bottom up. Application modernization necessarily distracts and learn a whole new approach to software. Developers
from other work, and that can mean decreased productivity in the near have to be convinced that modernization will be worth the
term. Both executives and developers may have strong feelings about effort. Yet, most developers want to develop modern
that. When it comes to convincing people, there’s no replacement for applications and ship faster; they struggle to do that with
understanding the leverage points within your company. legacy software. The desire is there but the tools and
techniques are lacking.

P R O P R I E TA R Y A N D C O N F I D E N T I A L T O V M W A R E , I N C . 7
A PRACTICAL APPROACH TO APPLICATION MODERNIZATION

Developers (continued) If you have a massive portfolio, you simply won’t be able to do
The most important thing is to understand the pain points associated with everything overnight. For example, Air France–KLM relies on a large
the way developers currently operate. That means spending some time to portfolio of apps to run its daily business. The company identified over
understand what’s going on. For example, perhaps it takes a developer 2,000 applications that could benefit from being modernized. Putting
four hours to test a simple code change in a valid environment because together a strategy to do this is, understandably, an undertaking that
they have to open a ticket to spin up a virtual machine to do the testing. can take years. And, as you get further along, it’s common for the very
Developers by and large don’t like wasting time. hard tasks to be the ones that remain.

By understanding their pain points, you can sell developers on the aspects
of modernization that will benefit them or make them more successful. In
the process, you may be able to prioritize changes that deliver the biggest
returns for the least effort.

Set Expectations Appropriately


It’s important to set expectations appropriately with all stakeholders
about the expected rate of progress. Making meaningful progress Consider a Tiger Team or Center of Excellence
modernizing hundreds or thousands of existing applications will take
significant time and effort. Many organizations create a team dedicated to spearheading
app modernization across the company and evangelizing and
Changes happen incrementally; modernization often starts small and teaching new software methods. Dick’s Sporting Goods created
grows rapidly. It’s important to realize this, set expectations appropriately an in-house application transformation team to spread tools and
and take a systematic approach. It can be helpful to establish visible best practices across the company, helping product teams build
intermediate milestones to maintain momentum. For instance, you might and deploy more quickly.
want to set a goal to modernize ten things and make sure the list
Modern software methods, built-in monitoring, and blue/green
includes different items to benefit various stakeholders, so everyone
deployments make it easy for teams to identify and fix issues in
sees some benefit right away.
minutes, without downtime.

P R O P R I E TA R Y A N D C O N F I D E N T I A L T O V M W A R E , I N C . 8
A PRACTICAL APPROACH TO APPLICATION MODERNIZATION

Restructure Teams as Necessary to Support Your


Modernization Efforts
If your teams are currently developing and running monolithic apps
using traditional infrastructure and manual methods, the way things are
structured today may not make sense as you progress. Unfortunately,
there’s no single one-size-fits-all team structure that will satisfy your
needs as you modernize, and just because an organizational structure
worked for Netflix or Target, you can’t assume that the exact same Creating Modernization Champions
structure will work for you. In many cases, the best approach is not to
VMware Pivotal Labs helps clients motivate team members and
start with too many preconceived notions about organization. As the
create modernization champions by encouraging organizations
needs of your organization reveal themselves, decisively adapt your
to create a team, choose a logo and foster engagement. Finding
team structure to support those needs. The best organizational
meaningful ways to rally the troops can turn many fence sitters
structure for you often reveals itself over time. Well run software
into advocates.
organizations know this and are always looking for new ways to
operate, rather than sticking to one operating model.

One thing that helps as you start your app modernization efforts is to Culture: Where to Learn More
have champions across all the relevant teams, from your development
teams to infrastructure teams to operations (assuming you have • So, you want to build a “Silicon Valley-like” software
separate operations teams) and extending into business units as well. developer culture? Focus on the people.
A few well-placed people—with the ability to recognize problems, • How organizational culture can drive digital success
empathy to work with people with diverging views and passion for
• How Liberty Mutual made a culture of constant education
your modernization vision—can help ensure that everyone is bought in
central to its digital transformation
and that things move forward.

P R O P R I E TA R Y A N D C O N F I D E N T I A L T O V M W A R E , I N C . 9
A PRACTICAL APPROACH TO APPLICATION MODERNIZATION

Portfolio Modernize
If you’ve got hundreds of applications, it’s critical to spend your Just 15–20% of applications will likely receive extensive
modernization effort wisely. That means analyzing your portfolio and modernization. This is most often the set of applications
thinking critically about where and how to start. with the greatest potential to move the needle when they
are modernized.

Making Sense of Your Portfolio

Better
When you begin to consider your portfolio of applications, it’s Tolerate Invest
important to recognize that every application isn’t going to receive the
same treatment. Consider evaluating each application in terms of its
business value and the technical feasibility of modernizing it, then focus
most of your effort on the set of applications that have high business
value and are feasible to modernize.

Technical Debt
If you consider a portfolio of 100 apps, they typically fall into three buckets:

No Change
Roughly 15% stay as they are with no changes. This may
include apps that are scheduled for retirement and apps that
are so locked into proprietary hardware and software that

Worse
they can’t be migrated. Eliminate Migrate

Lift and Shift (Replatform) Worse Technical Debt Better

Perhaps 40–50% of applications can be lifted and shifted into


Focus here. These custom apps are in
containers. The goal with these is often to gain automation
active use, are updated frequently and
and time-savings benefits by incorporating continuous considered important to business. They
integration and automating the path to production. also use tech supported by your cloud.

P R O P R I E TA R Y A N D C O N F I D E N T I A L T O V M W A R E , I N C . 10
A PRACTICAL APPROACH TO APPLICATION MODERNIZATION

Choosing the Right Starting Point


Modernizing Your Portfolio:
Even with a good understanding of your application portfolio, it can still Where to Learn More
be difficult to decide where to start. There’s no single strategy that
works for every organization. It’s helpful to start as small as possible, • App Modernization 101: An Executive’s Guide to Shipping
while working on real projects that you can learn from. For retail Better Software
businesses, the ubiquitous store finder application can be a good place • App Modernization Recipes
to start. It’s useful and self-contained, so the impact is low if initial
iterations don’t work as expected and it doesn’t require customer data • Application Modernization Should Be Business-Centric,
(other than location) so compliance isn’t an issue. Continuous and Multiplatform
• 5 Tips for Modernizing Your Legacy Application: Lessons
Many companies prefer to start with changes that have immediate Learned at Discover
visible impact. Travelers Insurance chose to modernize its ratings engine
because it is essential for quoting competitive insurance rates. The
decades old rating engine was part of a monolith running on a
mainframe. This made it difficult to scale, expensive to run and reliant
on a shrinking pool of engineers. However, the rating engine came with
significant constraints. Performance—starting from the first production
release—had to be at least as good as the existing system to avoid
breaking other dependencies, and the output of the new engine had to
be identical for the same reason. Having many points of integration
created challenges for a team just learning the ropes, but in a short
period of time, they overcame the technical challenges and successfully
modernized key functionality that the business depends on.

Dick’s Sporting Goods started its modernization efforts by focusing on


just two product teams, creating a catalyst to disseminate knowledge
and skills across more teams and more of the company’s portfolio.

P R O P R I E TA R Y A N D C O N F I D E N T I A L T O V M W A R E , I N C . 11
A PRACTICAL APPROACH TO APPLICATION MODERNIZATION

get decomposed into microservices. Some app components may run


on a public cloud while others stay on premises due to data gravity.

Important Modernization Technologies


Containers encapsulate an application in a form that’s
portable and easy to deploy. Containers can run on
any compatible system in any cloud. Containers
consume resources efficiently, enabling high density
and utilization.

Technology Choices Kubernetes makes it possible to deploy and run


complex applications requiring multiple containers by
This guide discusses technology after cultural and portfolio clustering physical or virtual resources for application
considerations, not because technology is not important, but because hosting. Kubernetes is extensible, self-healing, scales
it’s critical to have the nontechnical underpinnings in place first. When it applications automatically and is inherently multi-cloud.
comes to technology, there are proven patterns at all levels of the stack. Microservices architecture breaks down an application
Implementing them isn’t necessarily easy, but it’s mostly a matter of into multiple component services, enabling greater
learning and executing. Choosing good tools enables you to do the parallelism during both development and execution.
work but doesn’t do the work for you.

It’s not our intention here to evangelize any particular technological


orthodoxies, practices or tools. Keep in mind: when it comes to
modernizing established applications, your future state is likely to be a
combination of old and new technologies for the foreseeable future.
Some backend systems may not get touched for a long time to come.
You may simply lift and shift some application modules, while others

P R O P R I E TA R Y A N D C O N F I D E N T I A L T O V M W A R E , I N C . 12
A PRACTICAL APPROACH TO APPLICATION MODERNIZATION

Making Technology Decisions


Important Modernization Technologies (cont.)
When choosing development and deployment tools, you should
consider your application modernization needs holistically across CI/CD (Continuous Integration and Continuous Delivery)
multiple projects. Where possible, choose frameworks and CI/CD tools software creates an automated pipeline to integrate, test
that work with the other tools you have and that are as compatible as and deploy code changes.
possible with the existing capabilities and skillsets of your team. This
will allow you to maximize the benefits of learning and build expertise Messaging technologies provide methods for passing
more quickly. requests between microservices, with the ability to
handle large amounts of data at large scale.
Individual applications will typically require some specific architectural
decisions. Choose the architectural elements that make sense for your An API Gateway can provide a single entry point
application and your organization rather than worrying about into a software system for all requests, making the
conforming to the full list of cloud native precepts. environment more structured and predictable. As long
as the API stays the same, underlying services can be
Travelers Insurance decided to develop its rating engine using .NET
changed and enhanced.
Core 2.x and Steeltoe, an open source project for cloud native .NET
microservice applications; the company built out a CI/CD pipeline for
Observability allows developers and operators a better
deployment from day one. The chosen application architecture used a
look into modernized applications and helps pinpoint
choreography pattern and the team also implemented a new API to
issues if something goes wrong. Metrics, logging and
make it easier for future applications to interact with the rating engine.
tracing help teams make sure an application is running as
it should.

P R O P R I E TA R Y A N D C O N F I D E N T I A L T O V M W A R E , I N C . 13
A PRACTICAL APPROACH TO APPLICATION MODERNIZATION

Breaking Down Monolithic Applications


Breaking down monolithic applications into separate microservices
is often an important part of modernization. Having separate
microservices allows you to parallelize continuing development and
also provides more clearly defined areas of responsibility. Breaking
down monoliths with microservices also enables you to incrementally
make changes while not interrupting business as usual.
Swift Methodology
Don’t Overdo It
Be careful not to go too far when decomposing an VMware Pivotal Labs uses the Swift methodology, a set of
application. At one point, Travelers decomposed its rating lightweight techniques based on agile and Domain Driven Design
engine into 13 separate microservices before ultimately (DDD) principles, to help teams get started with incremental
settling on five services as the optimum for delivering the modernization of monolithic apps.
right combination of modularity and performance.
Swift aligns business leaders and technical practitioners, resulting
in an architectural plan that maps future goals. Information gained
It’s common to get into the mindset of “we need to make this
through the use of Swift informs decisions on how to organize
application cloud native.” But, if you look at the full set of
development teams and prioritize work (from both a business and
cloud native principles, a lot of them may not benefit your
technical perspective). It’s also helpful as a catch-all way to define
application. Focus on the ones that will.
a path between the status quo and the desired state.
Deciding Where to Divide Learn More
Every application is different, and only you can decide
where the dividing lines should be drawn. One guideline is
to consider the network as the new application interface.
Anytime an application transfers large, complete data
structures, that’s a possible break point.

P R O P R I E TA R Y A N D C O N F I D E N T I A L T O V M W A R E , I N C . 14
A PRACTICAL APPROACH TO APPLICATION MODERNIZATION

Sometimes Monoliths are Okay


If you’re having trouble deciding how to break up a monolith, it Should I Move My Application to Kubernetes?
could also be a sign that you should leave it more or less as is.
The decision to move an application comes down to three factors:
Many monoliths can be containerized and run just fine, and you
value, risk and time.
can still take advantage of the CI/CD pipeline to streamline
development and deployment. That may be all the It’s up to you to evaluate each application to understand the
modernization you need. potential value of Kubernetes for that application.

Backend Databases Migrating an application to a new platform always entails technical


If your application relies on a backend database, such as SQL risk and cost. Kubernetes is young as IT technologies go, as are
Server or Oracle running in a VM or on bare metal, it’s perfectly the associated tools.
acceptable to leave it running as is. If it ends up creating an The migration effort can take significant time on the part of
operational problem down the road, these databases can be developers and operators.
containerized, and there are a variety of open source alternatives.
Before you jump in, look for ways to concretely measure the
gained value, understand the amount of risk and determine how
Do I Need Kubernetes? much time you can afford to spend.

It’s become common to consider Kubernetes as essential for cloud native


development and application modernization, but that’s not always the
case. Although VMs don’t have the same set of orchestration and scaling Choosing Technology for App Modernization:
features, microservices can run inside VMs rather than containers. Where to Learn More
If you’re an application developer, the platform choice may not be up to • Kubernetes for Executives
you or you may not care that much. If you do have a choice, pick your
platform based on the needs of your application and the skills of your • Kubernetes for Operators
organization. If the application can run equally well in containers and • Kubernetes for Developers
VMs—but your organization doesn’t have expertise with containers and
Kubernetes—it should be a pretty clear choice.

P R O P R I E TA R Y A N D C O N F I D E N T I A L T O V M W A R E , I N C . 15
A PRACTICAL APPROACH TO APPLICATION MODERNIZATION

Make Smart Technology Decisions.


Your App Modernization Checklist 6 Don’t choose a set of technologies simply because it’s what
“the cool kids” are doing. Make sure your choices are right for
Get Buy-in. your organization.
1 Make sure all the stakeholders for an application are brought
into the modernization effort. Break Down Monoliths.
7 Plan carefully to decompose monolithic applications into more
Set Expectations. manageable pieces without worrying about satisfying any
2 Provide as much visibility as possible into the time and effort cloud native purity tests.
a modernization project will require. Avoid over-promising and
under-delivering. Pick Platforms Pragmatically.
8 Base cloud and platform choices on the needs and
Restructure When Needed. capabilities of your organization.
3 Prepare for your organizational structure to evolve as
modernization efforts advance. Pay attention to how other
companies have organized, but don’t just assume the same Application Transformation with VMware
approach will work for you.
Pivotal Labs
Prioritize Your Portfolio. Migrating existing apps can be daunting—but it doesn’t have to
4 Analyze your applications and divide them into three buckets: be. VMware can help you develop a tailored app modernization
no change, lift-and-shift (less effort), modernize (more effort). strategy that builds on many of the principles described in this
eBook. Improve agility while reducing costs and tech debt with
Choose The Right Starting Point. our proven Cloud Native Readiness techniques.
5 Pick one or a few small(ish) projects that will help you start on
the right foot in terms of skill-building or momentum-building, • Application modernization
or both.
• Modernization recipes

P R O P R I E TA R Y A N D C O N F I D E N T I A L T O V M W A R E , I N C . 16
A PRACTICAL APPROACH TO APPLICATION MODERNIZATION

teams as we work collaboratively and align new delivery methods with


your existing apps in a way that results in lasting improvements.

Schedule a free, virtual consultation with the VMware Pivotal Labs


team today. Each session is tailored to your unique business or
technical challenge. We’ll make sure you leave with actionable items
that will make a difference.

Reserve Your Free Consultation Today

And be sure and follow @VMwareTanzu on Twitter to keep up with all


the latest cloud native developments.

Where to Learn More


What Should I Do Next? • Tackle App Modernization in Days and Weeks, Not
Months and Years
If you’re just getting started on your app modernization journey, the
most important thing is to take a practical approach to improvement. • VMware Tanzu Blog. Read our regular blog to find out
Focus on the areas that you believe will yield the biggest benefits as the latest. Posts cover diverse topics and new blogs are
you make cultural, portfolio and technology decisions, and don’t be added regularly.
afraid to try things that may not succeed. Even seemingly small
improvements sometimes relieve bottlenecks and yield bigger-than- Customers Mentioned in This eBook
expected benefits. Use the resource links in this eBook to learn more • Travelers Insurance: Customer story and webinar
about areas where you need more guidance.
• Dick’s Sporting Goods: Customer story and webinar
Many enterprises seek outside assistance to help kickstart app • Air France–KLM: Customer story and webinar
modernization efforts. VMware Pivotal Labs helps organizations around
the world modernize business critical applications and large systems Additional Customer Modernization Stories
across entire portfolios. We’ll help you develop a sustainable roadmap • Steelcase: Customer story
for your modernization initiative. Our consulting services upskill your

P R O P R I E TA R Y A N D C O N F I D E N T I A L T O V M W A R E , I N C . 17

You might also like