Submit Search
Upload
More Best Practices for Large-Scale Websites -- Lessons from eBay
•
Download as PPT, PDF
•
25 likes
•
4,612 views
Randy Shoup
Follow
10 Best Practices for scalability from eBay, as presented at JavaOne 2010.
Read less
Read more
Technology
Report
Share
Report
Share
1 of 16
Download now
Recommended
eBay architects Randy Shoup and Dan Pritchett give a guided tour of the eBay architecture. They cover the evolution of the technology stack from Perl to C++ to Java. And they discuss scaling strategies for the data tier, application tier, search, and operations.
The eBay Architecture: Striking a Balance between Site Stability, Feature Ve...
The eBay Architecture: Striking a Balance between Site Stability, Feature Ve...
Randy Shoup
These are the slides I gave from my recent talk at Javazone. It's an update of my 'Practical Considerations For Microservices' talk. You can see the accompanying video here: http://vimeo.com/105751281
Practical microservices - javazone 2014
Practical microservices - javazone 2014
Sam Newman
As a maker of real-time strategy games for web and mobile, KIXEYE's business depends on deep insights into how players play our games. By analyzing player behavior in a rich and flexible way, we are able to better target our efforts around user acquisition, game balance, player retention, and game monetization. By storing and analyzing data in standard ways, our data scientists are better able to take learnings from one game and apply them to another. This presentation describes KIXEYE's newly-minted modern analytics infrastructure soup-to-nuts, from Kafka queues through Hadoop 2 to Hive and Redshift. It outlines our efforts around queryability, extensibility, scalability, standardization, and stability and outage recovery. It further shares our lessons learned in building, testing, operating, and enhancing this mission-critical piece of our infrastructure.
QCon New York 2014 - Scalable, Reliable Analytics Infrastructure at KIXEYE
QCon New York 2014 - Scalable, Reliable Analytics Infrastructure at KIXEYE
Randy Shoup
Learn how to build applications for a platform that can reach 330M+ worldwide users! This session gives a technical overview of the Yahoo! Application Platform (YAP), which enables third-party applications to be embedded within popular Yahoo! destinations such as My Yahoo! and the Yahoo! home page. The session will cover key features of YAP, including Yahoo Markup Language (YML), Caja, Open Social, image cache and application editor. Next the talk will explain how to build an application for this platform as well as best practices to deliver great user experience from your application.
Yahoo! Application Platform Technical Deep Dive
Yahoo! Application Platform Technical Deep Dive
Tony Ng
eBay Architecture
eBay Architecture
Tony Ng
Most large-scale web companies have evolved their system architecture from a monolithic application and monolithic database to a set of loosely coupled microservices. Using examples from Google, eBay, and other large-scale sites, this talk outlines the pros and cons of these different stages of evolution, and makes practical suggestions about when and how other organizations should consider migrating to microservices. It continues with some more advanced implications of a microservices architecture, including SLAs, cost-allocation, and vendor-customer relationships within the organization. It concludes by exploring a set of common service anti-patterns.
From the Monolith to Microservices - CraftConf 2015
From the Monolith to Microservices - CraftConf 2015
Randy Shoup
This is the longer, 90 min version of my Microservices talk, as presented at Velocity 2016 in Santa Clara. Security is everyone’s job, even if you’re not a specialist. Microservices offer many options for securing your systems. Done right, microservices can increase the security of your vital data and processes. Done wrong, and they can increase the surface area of attack. Sam Newman explores the importance of defense in depth, discussing the many different ways in which you can secure your fine-grained, distributed architectures and outlining a model to show how developers can think about application security and how they can play their part. From there, Sam dives into the specific challenges in microservice architectures and explains how application security principles can be applied to these often much more complex application architectures. You’ll leave with a high-level framework for thinking about application security and tools that help with prevention, detection, response, and recovery, as well as the knowledge of what not to do when breaches happen.
AppSec & Microservices - Velocity 2016
AppSec & Microservices - Velocity 2016
Sam Newman
Data Center Migration to the AWS Cloud
Data Center Migration to the AWS Cloud
Tom Laszewski
Recommended
eBay architects Randy Shoup and Dan Pritchett give a guided tour of the eBay architecture. They cover the evolution of the technology stack from Perl to C++ to Java. And they discuss scaling strategies for the data tier, application tier, search, and operations.
The eBay Architecture: Striking a Balance between Site Stability, Feature Ve...
The eBay Architecture: Striking a Balance between Site Stability, Feature Ve...
Randy Shoup
These are the slides I gave from my recent talk at Javazone. It's an update of my 'Practical Considerations For Microservices' talk. You can see the accompanying video here: http://vimeo.com/105751281
Practical microservices - javazone 2014
Practical microservices - javazone 2014
Sam Newman
As a maker of real-time strategy games for web and mobile, KIXEYE's business depends on deep insights into how players play our games. By analyzing player behavior in a rich and flexible way, we are able to better target our efforts around user acquisition, game balance, player retention, and game monetization. By storing and analyzing data in standard ways, our data scientists are better able to take learnings from one game and apply them to another. This presentation describes KIXEYE's newly-minted modern analytics infrastructure soup-to-nuts, from Kafka queues through Hadoop 2 to Hive and Redshift. It outlines our efforts around queryability, extensibility, scalability, standardization, and stability and outage recovery. It further shares our lessons learned in building, testing, operating, and enhancing this mission-critical piece of our infrastructure.
QCon New York 2014 - Scalable, Reliable Analytics Infrastructure at KIXEYE
QCon New York 2014 - Scalable, Reliable Analytics Infrastructure at KIXEYE
Randy Shoup
Learn how to build applications for a platform that can reach 330M+ worldwide users! This session gives a technical overview of the Yahoo! Application Platform (YAP), which enables third-party applications to be embedded within popular Yahoo! destinations such as My Yahoo! and the Yahoo! home page. The session will cover key features of YAP, including Yahoo Markup Language (YML), Caja, Open Social, image cache and application editor. Next the talk will explain how to build an application for this platform as well as best practices to deliver great user experience from your application.
Yahoo! Application Platform Technical Deep Dive
Yahoo! Application Platform Technical Deep Dive
Tony Ng
eBay Architecture
eBay Architecture
Tony Ng
Most large-scale web companies have evolved their system architecture from a monolithic application and monolithic database to a set of loosely coupled microservices. Using examples from Google, eBay, and other large-scale sites, this talk outlines the pros and cons of these different stages of evolution, and makes practical suggestions about when and how other organizations should consider migrating to microservices. It continues with some more advanced implications of a microservices architecture, including SLAs, cost-allocation, and vendor-customer relationships within the organization. It concludes by exploring a set of common service anti-patterns.
From the Monolith to Microservices - CraftConf 2015
From the Monolith to Microservices - CraftConf 2015
Randy Shoup
This is the longer, 90 min version of my Microservices talk, as presented at Velocity 2016 in Santa Clara. Security is everyone’s job, even if you’re not a specialist. Microservices offer many options for securing your systems. Done right, microservices can increase the security of your vital data and processes. Done wrong, and they can increase the surface area of attack. Sam Newman explores the importance of defense in depth, discussing the many different ways in which you can secure your fine-grained, distributed architectures and outlining a model to show how developers can think about application security and how they can play their part. From there, Sam dives into the specific challenges in microservice architectures and explains how application security principles can be applied to these often much more complex application architectures. You’ll leave with a high-level framework for thinking about application security and tools that help with prevention, detection, response, and recovery, as well as the knowledge of what not to do when breaches happen.
AppSec & Microservices - Velocity 2016
AppSec & Microservices - Velocity 2016
Sam Newman
Data Center Migration to the AWS Cloud
Data Center Migration to the AWS Cloud
Tom Laszewski
Building distributed systems that work is hard. And scaling those systems by multiple orders of magnitude is even harder. Using examples from internet-scale consumer properties like Google, Amazon, and eBay, this talk deep-dives into the counterintuitive idea that the key to success in large-scale architecture is simplicity. We first discuss simple components like modular services, orthogonal domain logic, and service layering. Next we discuss simple interactions between components, leveraging event-driven models, immutable logs, and asynchronous dataflow. Then we explore techniques that simplify making changes the system, including incremental changes, continuous testing, canary deployments, and feature flags. In the final part of the talk, we show how all these ideas work together with specific architectural examples from Amazon, Netflix, and Walmart. You will take away actionable insights you can immediately put into practice in your own systems.
Large Scale Architecture -- The Unreasonable Effectiveness of Simplicity
Large Scale Architecture -- The Unreasonable Effectiveness of Simplicity
Randy Shoup
The best response to a system outage is not "What did you do?", but "What did we learn?" This session will walk through three system-wide outages at Google, at Stitch Fix, and at WeWork—their incidents, aftermaths, and recoveries. In all cases, many things went right and a few went wrong; also in all cases, because of blameless cultures, we buckled down, learned a lot, and made substantial improvements in the systems for the future. Looking back with the perspective of 20-20 hindsight, all of these incidents were seminal events that changed the focus and trajectory of engineering at each organization. You will leave with a set of actionable suggestions in dealing with customers, engineering teams, and upper management. You will also enjoy a few war stories from the trenches.
Anatomy of Three Incidents -- Commonalities and Lessons
Anatomy of Three Incidents -- Commonalities and Lessons
Randy Shoup
In October 2012, Google App Engine had an 8-hour global outage. This session walks through the incident and the "Reliability Fixit" it inspired in its aftermath. Learn how the team came together, and over the next 6 months, reduced reliability issues by 10x. Also take away broader insights around engineering tradeoffs, managing an incident, and driving improvement.
One Terrible Day at Google, and How It Made Us Better
One Terrible Day at Google, and How It Made Us Better
Randy Shoup
This talk from the virtual 2020 CTO Summit (https://www.ctoconnection.com/summits) covers several architecture lessons to help you survive and thrive through the scaling phase of your company: * Modular Architecture * Event-Driven Communication * Quality and Reliability * Continuous Delivery
Scaling Your Architecture for the Long Term
Scaling Your Architecture for the Long Term
Randy Shoup
This presentation introduces the idea of a "Minimal Viable Architecture". As a company and product evolves, its architecture should evolve as well. We talk about the different phases of a product -- from the idea phase, to the starting phase, scaling phase, and optimizing phase. For each phase, we discuss the goals and constraints on the business, and we suggest an appropriate software architecture to match. Throughout the presentation, we use examples from eBay, Google, StitchFix, and others.
Minimal Viable Architecture - Silicon Slopes 2020
Minimal Viable Architecture - Silicon Slopes 2020
Randy Shoup
Machine learning has become an important tool in the modern software toolbox, and high-performing organizations are increasingly coming to rely on data science and machine learning as a core part of their business. eBay introduced machine learning to its commerce search ranking and drove double-digit increases in revenue. Stitch Fix built a multibillion dollar clothing retail business in the US by combining the best of machines with the best of humans. And WeWork is bringing machine-learned approaches to the physical office environment all around the world. In all cases, algorithmic techniques started simple and slowly became more sophisticated over time. This talk will use these examples to derive an agile approach to machine learning, and will explore that approach across several different dimensions. We will set the stage by outlining the kinds of problems that are most amenable to machine-learned approaches as well as describing some important prerequisites, including investments in data quality, a robust data pipeline, and experimental discipline. Next, we will choose the right (algorithmic) tool for the right job, and suggest how to incrementally evolve the algorithmic approaches we bring to bear. Most fancy cutting-edge recommender systems in the real world, for example, started out with simple rules-based techniques or basic regression. Finally, we will integrate machine learning into the broader product development process, and see how it can help us to accelerate business results
An Agile Approach to Machine Learning
An Agile Approach to Machine Learning
Randy Shoup
As the research in Accelerate and in the DevOps Handbook shows, high-performing organizations deliver more rapidly, more repeatably, and more reliably. And as an organization scales, it becomes more and more important to get the product development process right. Drawing on the speaker's experiences leading high-performing organizations at Google and eBay, this session discusses the upstream parts of that process, focusing on organization, problem definition, and prioritization. We will discuss forming small, cross-functional teams with clear areas of responsibility. Then we will discuss the importance of clearly defining the problem we are trying to solve as a team. Finally, we will cover focus and prioritization -- how we decide what to do when. You will take away actionable techniques you can apply in your own organization.
Moving Fast at Scale
Moving Fast at Scale
Randy Shoup
Throughout engineering history, focused and empowered teams have consistently achieved the near-impossible. Alan Turing, Tommy Flowers, and their teams at Bletchley Park broke Nazi codes, saved their country, and brought down the Third Reich. Kelly Johnson and the Lockheed Skunk Works designed and built the XP-80 in 143 days, and later produced the U-2, the SR-71, and the F-22. Xerox PARC invented Smalltalk, graphical user interfaces, Ethernet, and the laser printer. What can this history teach us? Well, basically everything. Effective teams have a purpose - a clearly defined problem which the entire team focuses on and owns end-to-end. Effective teams have an organizational culture that prioritizes collaboration and learning. And most importantly, effective teams are made up of people from diverse backgrounds and experiences. If this sounds a lot like DevOps, or true little-a agile, that's no coincidence. But too few organizations actually practice these three-quarter-century-old ideas despite the overwhelming evidence that they work. So let's relearn those history lessons.
Breaking Codes, Designing Jets, and Building Teams
Breaking Codes, Designing Jets, and Building Teams
Randy Shoup
This session is a deep dive into the modern best practices around asynchronous decoupling, resilience, and scalability that allow us to implement a large-scale software system from the building blocks of events and services, based on the speaker's experiences implementing such systems at Google, eBay, and other high-performing technology organizations. We will outline the various options for handling event delivery and event ordering in a distributed system. We will cover data and persistence in an event-driven architecture. Finally, we will describe how to combine events, services, and so-called 'serverless' functions into a powerful overall architecture. You will leave with practical suggestions to help you accelerate your development velocity and drive business results.
Scaling Your Architecture with Services and Events
Scaling Your Architecture with Services and Events
Randy Shoup
The best response to a system outage is not "What did you do?", but "What did we learn?" This session will walk through three system-wide outages at Google, at Stitch Fix, and at WeWork—their incidents, aftermaths, and recoveries. In all cases, many things went right and a few went wrong; also in all cases, because of blameless cultures, we buckled down, learned a lot, and made substantial improvements in the systems for the future. Looking back with the perspective of 20-20 hindsight, all of these incidents were seminal events that changed the focus and trajectory of engineering at each organization. You will leave with a set of actionable suggestions in dealing with customers, engineering teams, and upper management. You will also enjoy a few war stories from the trenches.
Learning from Learnings: Anatomy of Three Incidents
Learning from Learnings: Anatomy of Three Incidents
Randy Shoup
The “right” architecture and organization depends on the size and scale of your company. The only constant is change, and what works for 5 engineers does not work for 5000. Based upon lessons from Google and eBay, learn how to evolve both technology and organization together successfully. This presentation is based on many hard-won lessons by the speaker, who led large-scale engineering teams at Google and eBay, but also co-founded a tiny startup and tried (unsuccessfully) to apply the same techniques. This session hopes to help others from making the same mistakes by introducing the concept of “Minimal Viable Architecture”. It outlines the common architectural evolution of a company or project through the search, execution, and scaling phases, and discusses the appropriate technologies, disciplines, and organizational structures at each phase. You'll start with a monolith, and end up with microservices, and that's completely and entirely appropriate.
Minimum Viable Architecture - Good Enough is Good Enough
Minimum Viable Architecture - Good Enough is Good Enough
Randy Shoup
An ambitious attempt at BuildStuff España 2018 to cover, in 50 minutes: * Migrating to Microservices * Challenges of Data in Microservices (including shared data, joins, and transactions) * Challenges of Event-Driven Systems (including event duplication and event ordering)
Managing Data at Scale - Microservices and Events
Managing Data at Scale - Microservices and Events
Randy Shoup
How do effective large-scale service ecosystems work? Keynote Presentation at Istanbul Tech Talks 2018 How to Design Services * Systems of record * Interface specification * Interface backward / forward compatibility Service Ecosystems * Layered services * "Standardization" through encouragement * Vendor-customer relationships between teams Operating and Deploying Services * Data Migration * Automated Pipelines * Incremental Deployment * Feature Flags
Service Architectures at Scale
Service Architectures at Scale
Randy Shoup
This talk describes several common challenges of software systems at scale: * How to break up a monolithic application or a monolithic database into microservices. * How to approach shared data, joins, and transactions in a microservices ecosystem
Monoliths, Migrations, and Microservices
Monoliths, Migrations, and Microservices
Randy Shoup
Keynote at DevOpsDays Cuba Successful Internet companies are built on a foundation of excellent culture, efficient organization, and solid technology. As a company needs to scale, all of these parts of the foundation need to grow and scale with it. This session covers modern best practices at innovative companies in Silicon Valley for scaling culture, organization, and technology. Driven primarily by the presenter's experience ranging from small Valley startups to Google and eBay, it discusses: * Organizing small, fast-moving engineering teams * Building a scalable system out of smaller microservices * Maintaining a culture of ownership and collaboration * Developing effective engineering processes of continuous integration and continuous delivery
Evolving Architecture and Organization - Lessons from Google and eBay
Evolving Architecture and Organization - Lessons from Google and eBay
Randy Shoup
Faster is Better. High-performing organizations deploy both substantially faster and substantially more reliably, and thus are 2.5x more likely to achieve business goals. This keynote covers how to move fast at large scale: * Organizing for Speed * What to Build and What NOT to Build * When to Build * How to Build * Delivering and Operating Keynote at Reversim Summit 2017 in Tel Aviv, Israel.
Moving Fast At Scale
Moving Fast At Scale
Randy Shoup
DevOps is far more about culture and organization than it is about technology and tooling. This talk will discuss the speaker's experiences leading high-performing engineering teams at Google, eBay, and Stitch Fix, and will offer suggestions for other organizations to level up their DevOps game. https://www.meetup.com/SV-ELC/events/240087808/ Modern software-service models take advantage of the great benefits in having the same team both build the software as well as operate it in production -- "You Build It; You Run It" is the Amazon mantra. What does this mean in practice? Organizationally, it means small teams with well-defined areas of responsibility, directly aligned with the business. The teams are cross-functional, meaning that each team has all the skill sets it requires to do its job, while at the same time relying on other teams for supporting services, tools, and libraries. Process-wise, it means doubling down on practices like test-driven development and continuous delivery. Using continuous delivery practices, high-performing teams can and do release their applications and services multiple times a day. This enables them to iterate rapidly, experiment courageously, and fail more quickly. Culturally, it means end-to-end ownership. Each team owns its software end-to-end, from design to development to deployment to retirement. The same engineers who are responsible for the features are responsible for quality, performance, operations, and maintenance. This ownership puts incentives in the right place to encourage building maintainable, observable, and operable systems from the start. All these techniques and approaches are available to everyone, and practical examples in this talk will help other organizations on their journey.
DevOps - It's About How We Work
DevOps - It's About How We Work
Randy Shoup
From the DevOps Enterprise Summit 2015, this presentation covers hard-won lessons of transitioning an engineering organization to DevOps. See video at https://www.youtube.com/watch?v=6tREbJl8e_Y. Lessons: 1. Reorganize around Ownership 2. Lose the Ticket Culture 3. Replace Approvals with Code 4. Enforce a Service Mentality 5. Charge for Usage 6. Prioritize Quality 7. Start Investing in Testing 8. Actively Manage Technical Debt 9. Share On-Call Duties 10. Make Post-Mortems Truly Blameless DevOps is no longer just for Internet unicorns any more. Today many large enterprises are transitioning from the slow and siloed traditional IT approach to modern DevOps practices, and getting substantial improvements in agility, velocity, scalability, and efficiency. But this transition is not without its challenges and pitfalls, and those of us who have led this journey have the scar tissue to prove it. A successful transition to DevOps practices ultimately involves changes to organization, to culture, and to architecture. Organizationally, we want to create multi-skilled teams with end-to-end ownership and shared on-call responsibilities. Culturally, we want to prioritize solving problems and improving the product over closing tickets. Architecturally, we want to move to an infrastructure with independently testable and deployable components. The ten practical lessons outlined in this session synthesize the speaker’s experiences leading teams at eBay, Google, and KIXEYE, as well as from his former consulting practice.
Ten Lessons of the DevOps Transition
Ten Lessons of the DevOps Transition
Randy Shoup
From a talk at the SF CTO Summit 2017 (https://www.ctoconnection.com/summits/sf2017), these slides cover the speaker's experience at Stitch Fix with managing data in a microservices environment. Areas include: * Breaking up a monolithic database into services * Using events as a first-class part of your architecture * Sharing data among microservices * Handling "joins" among microservices * Simulating "transactions" among microservices using the Saga pattern
Managing Data in Microservices
Managing Data in Microservices
Randy Shoup
From a talk at GOTOChicago 2017, these slides discuss the speaker's experiences at Stitch Fix with * Organizational, Process, and Cultural prerequisites for being successful with Microservices: small teams, TDD / CD, DevOps * How to handle shared data when your data is split among microservices * How to handle "joins" across microservices * How to simulate "transactions" across microservices Slides link: https://gotochgo.com/3/sessions/79/slides Video link: https://gotochgo.com/3/sessions/79/video
Effective Microservices In a Data-centric World
Effective Microservices In a Data-centric World
Randy Shoup
Tech Trends Report 2024 Future Today Institute
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
hans926745
In this session, we will delve into strategic approaches for optimizing knowledge management within Microsoft 365, amidst the evolving landscape of Copilot. From leveraging automatic metadata classification and permission governance with SharePoint Premium, to unlocking Viva Engage for the cultivation of knowledge and communities, you will gain actionable insights to bolster your organization's knowledge-sharing initiatives. In this session, we will also explore how to facilitate solutions to enable your employees to find answers and expertise within Microsoft 365. You will leave equipped with practical techniques and a deeper understanding of how there is more to effective knowledge management than just enabling Copilot, but building actual solutions to prepare the knowledge that Copilot and your employees can use.
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Drew Madelung
More Related Content
More from Randy Shoup
Building distributed systems that work is hard. And scaling those systems by multiple orders of magnitude is even harder. Using examples from internet-scale consumer properties like Google, Amazon, and eBay, this talk deep-dives into the counterintuitive idea that the key to success in large-scale architecture is simplicity. We first discuss simple components like modular services, orthogonal domain logic, and service layering. Next we discuss simple interactions between components, leveraging event-driven models, immutable logs, and asynchronous dataflow. Then we explore techniques that simplify making changes the system, including incremental changes, continuous testing, canary deployments, and feature flags. In the final part of the talk, we show how all these ideas work together with specific architectural examples from Amazon, Netflix, and Walmart. You will take away actionable insights you can immediately put into practice in your own systems.
Large Scale Architecture -- The Unreasonable Effectiveness of Simplicity
Large Scale Architecture -- The Unreasonable Effectiveness of Simplicity
Randy Shoup
The best response to a system outage is not "What did you do?", but "What did we learn?" This session will walk through three system-wide outages at Google, at Stitch Fix, and at WeWork—their incidents, aftermaths, and recoveries. In all cases, many things went right and a few went wrong; also in all cases, because of blameless cultures, we buckled down, learned a lot, and made substantial improvements in the systems for the future. Looking back with the perspective of 20-20 hindsight, all of these incidents were seminal events that changed the focus and trajectory of engineering at each organization. You will leave with a set of actionable suggestions in dealing with customers, engineering teams, and upper management. You will also enjoy a few war stories from the trenches.
Anatomy of Three Incidents -- Commonalities and Lessons
Anatomy of Three Incidents -- Commonalities and Lessons
Randy Shoup
In October 2012, Google App Engine had an 8-hour global outage. This session walks through the incident and the "Reliability Fixit" it inspired in its aftermath. Learn how the team came together, and over the next 6 months, reduced reliability issues by 10x. Also take away broader insights around engineering tradeoffs, managing an incident, and driving improvement.
One Terrible Day at Google, and How It Made Us Better
One Terrible Day at Google, and How It Made Us Better
Randy Shoup
This talk from the virtual 2020 CTO Summit (https://www.ctoconnection.com/summits) covers several architecture lessons to help you survive and thrive through the scaling phase of your company: * Modular Architecture * Event-Driven Communication * Quality and Reliability * Continuous Delivery
Scaling Your Architecture for the Long Term
Scaling Your Architecture for the Long Term
Randy Shoup
This presentation introduces the idea of a "Minimal Viable Architecture". As a company and product evolves, its architecture should evolve as well. We talk about the different phases of a product -- from the idea phase, to the starting phase, scaling phase, and optimizing phase. For each phase, we discuss the goals and constraints on the business, and we suggest an appropriate software architecture to match. Throughout the presentation, we use examples from eBay, Google, StitchFix, and others.
Minimal Viable Architecture - Silicon Slopes 2020
Minimal Viable Architecture - Silicon Slopes 2020
Randy Shoup
Machine learning has become an important tool in the modern software toolbox, and high-performing organizations are increasingly coming to rely on data science and machine learning as a core part of their business. eBay introduced machine learning to its commerce search ranking and drove double-digit increases in revenue. Stitch Fix built a multibillion dollar clothing retail business in the US by combining the best of machines with the best of humans. And WeWork is bringing machine-learned approaches to the physical office environment all around the world. In all cases, algorithmic techniques started simple and slowly became more sophisticated over time. This talk will use these examples to derive an agile approach to machine learning, and will explore that approach across several different dimensions. We will set the stage by outlining the kinds of problems that are most amenable to machine-learned approaches as well as describing some important prerequisites, including investments in data quality, a robust data pipeline, and experimental discipline. Next, we will choose the right (algorithmic) tool for the right job, and suggest how to incrementally evolve the algorithmic approaches we bring to bear. Most fancy cutting-edge recommender systems in the real world, for example, started out with simple rules-based techniques or basic regression. Finally, we will integrate machine learning into the broader product development process, and see how it can help us to accelerate business results
An Agile Approach to Machine Learning
An Agile Approach to Machine Learning
Randy Shoup
As the research in Accelerate and in the DevOps Handbook shows, high-performing organizations deliver more rapidly, more repeatably, and more reliably. And as an organization scales, it becomes more and more important to get the product development process right. Drawing on the speaker's experiences leading high-performing organizations at Google and eBay, this session discusses the upstream parts of that process, focusing on organization, problem definition, and prioritization. We will discuss forming small, cross-functional teams with clear areas of responsibility. Then we will discuss the importance of clearly defining the problem we are trying to solve as a team. Finally, we will cover focus and prioritization -- how we decide what to do when. You will take away actionable techniques you can apply in your own organization.
Moving Fast at Scale
Moving Fast at Scale
Randy Shoup
Throughout engineering history, focused and empowered teams have consistently achieved the near-impossible. Alan Turing, Tommy Flowers, and their teams at Bletchley Park broke Nazi codes, saved their country, and brought down the Third Reich. Kelly Johnson and the Lockheed Skunk Works designed and built the XP-80 in 143 days, and later produced the U-2, the SR-71, and the F-22. Xerox PARC invented Smalltalk, graphical user interfaces, Ethernet, and the laser printer. What can this history teach us? Well, basically everything. Effective teams have a purpose - a clearly defined problem which the entire team focuses on and owns end-to-end. Effective teams have an organizational culture that prioritizes collaboration and learning. And most importantly, effective teams are made up of people from diverse backgrounds and experiences. If this sounds a lot like DevOps, or true little-a agile, that's no coincidence. But too few organizations actually practice these three-quarter-century-old ideas despite the overwhelming evidence that they work. So let's relearn those history lessons.
Breaking Codes, Designing Jets, and Building Teams
Breaking Codes, Designing Jets, and Building Teams
Randy Shoup
This session is a deep dive into the modern best practices around asynchronous decoupling, resilience, and scalability that allow us to implement a large-scale software system from the building blocks of events and services, based on the speaker's experiences implementing such systems at Google, eBay, and other high-performing technology organizations. We will outline the various options for handling event delivery and event ordering in a distributed system. We will cover data and persistence in an event-driven architecture. Finally, we will describe how to combine events, services, and so-called 'serverless' functions into a powerful overall architecture. You will leave with practical suggestions to help you accelerate your development velocity and drive business results.
Scaling Your Architecture with Services and Events
Scaling Your Architecture with Services and Events
Randy Shoup
The best response to a system outage is not "What did you do?", but "What did we learn?" This session will walk through three system-wide outages at Google, at Stitch Fix, and at WeWork—their incidents, aftermaths, and recoveries. In all cases, many things went right and a few went wrong; also in all cases, because of blameless cultures, we buckled down, learned a lot, and made substantial improvements in the systems for the future. Looking back with the perspective of 20-20 hindsight, all of these incidents were seminal events that changed the focus and trajectory of engineering at each organization. You will leave with a set of actionable suggestions in dealing with customers, engineering teams, and upper management. You will also enjoy a few war stories from the trenches.
Learning from Learnings: Anatomy of Three Incidents
Learning from Learnings: Anatomy of Three Incidents
Randy Shoup
The “right” architecture and organization depends on the size and scale of your company. The only constant is change, and what works for 5 engineers does not work for 5000. Based upon lessons from Google and eBay, learn how to evolve both technology and organization together successfully. This presentation is based on many hard-won lessons by the speaker, who led large-scale engineering teams at Google and eBay, but also co-founded a tiny startup and tried (unsuccessfully) to apply the same techniques. This session hopes to help others from making the same mistakes by introducing the concept of “Minimal Viable Architecture”. It outlines the common architectural evolution of a company or project through the search, execution, and scaling phases, and discusses the appropriate technologies, disciplines, and organizational structures at each phase. You'll start with a monolith, and end up with microservices, and that's completely and entirely appropriate.
Minimum Viable Architecture - Good Enough is Good Enough
Minimum Viable Architecture - Good Enough is Good Enough
Randy Shoup
An ambitious attempt at BuildStuff España 2018 to cover, in 50 minutes: * Migrating to Microservices * Challenges of Data in Microservices (including shared data, joins, and transactions) * Challenges of Event-Driven Systems (including event duplication and event ordering)
Managing Data at Scale - Microservices and Events
Managing Data at Scale - Microservices and Events
Randy Shoup
How do effective large-scale service ecosystems work? Keynote Presentation at Istanbul Tech Talks 2018 How to Design Services * Systems of record * Interface specification * Interface backward / forward compatibility Service Ecosystems * Layered services * "Standardization" through encouragement * Vendor-customer relationships between teams Operating and Deploying Services * Data Migration * Automated Pipelines * Incremental Deployment * Feature Flags
Service Architectures at Scale
Service Architectures at Scale
Randy Shoup
This talk describes several common challenges of software systems at scale: * How to break up a monolithic application or a monolithic database into microservices. * How to approach shared data, joins, and transactions in a microservices ecosystem
Monoliths, Migrations, and Microservices
Monoliths, Migrations, and Microservices
Randy Shoup
Keynote at DevOpsDays Cuba Successful Internet companies are built on a foundation of excellent culture, efficient organization, and solid technology. As a company needs to scale, all of these parts of the foundation need to grow and scale with it. This session covers modern best practices at innovative companies in Silicon Valley for scaling culture, organization, and technology. Driven primarily by the presenter's experience ranging from small Valley startups to Google and eBay, it discusses: * Organizing small, fast-moving engineering teams * Building a scalable system out of smaller microservices * Maintaining a culture of ownership and collaboration * Developing effective engineering processes of continuous integration and continuous delivery
Evolving Architecture and Organization - Lessons from Google and eBay
Evolving Architecture and Organization - Lessons from Google and eBay
Randy Shoup
Faster is Better. High-performing organizations deploy both substantially faster and substantially more reliably, and thus are 2.5x more likely to achieve business goals. This keynote covers how to move fast at large scale: * Organizing for Speed * What to Build and What NOT to Build * When to Build * How to Build * Delivering and Operating Keynote at Reversim Summit 2017 in Tel Aviv, Israel.
Moving Fast At Scale
Moving Fast At Scale
Randy Shoup
DevOps is far more about culture and organization than it is about technology and tooling. This talk will discuss the speaker's experiences leading high-performing engineering teams at Google, eBay, and Stitch Fix, and will offer suggestions for other organizations to level up their DevOps game. https://www.meetup.com/SV-ELC/events/240087808/ Modern software-service models take advantage of the great benefits in having the same team both build the software as well as operate it in production -- "You Build It; You Run It" is the Amazon mantra. What does this mean in practice? Organizationally, it means small teams with well-defined areas of responsibility, directly aligned with the business. The teams are cross-functional, meaning that each team has all the skill sets it requires to do its job, while at the same time relying on other teams for supporting services, tools, and libraries. Process-wise, it means doubling down on practices like test-driven development and continuous delivery. Using continuous delivery practices, high-performing teams can and do release their applications and services multiple times a day. This enables them to iterate rapidly, experiment courageously, and fail more quickly. Culturally, it means end-to-end ownership. Each team owns its software end-to-end, from design to development to deployment to retirement. The same engineers who are responsible for the features are responsible for quality, performance, operations, and maintenance. This ownership puts incentives in the right place to encourage building maintainable, observable, and operable systems from the start. All these techniques and approaches are available to everyone, and practical examples in this talk will help other organizations on their journey.
DevOps - It's About How We Work
DevOps - It's About How We Work
Randy Shoup
From the DevOps Enterprise Summit 2015, this presentation covers hard-won lessons of transitioning an engineering organization to DevOps. See video at https://www.youtube.com/watch?v=6tREbJl8e_Y. Lessons: 1. Reorganize around Ownership 2. Lose the Ticket Culture 3. Replace Approvals with Code 4. Enforce a Service Mentality 5. Charge for Usage 6. Prioritize Quality 7. Start Investing in Testing 8. Actively Manage Technical Debt 9. Share On-Call Duties 10. Make Post-Mortems Truly Blameless DevOps is no longer just for Internet unicorns any more. Today many large enterprises are transitioning from the slow and siloed traditional IT approach to modern DevOps practices, and getting substantial improvements in agility, velocity, scalability, and efficiency. But this transition is not without its challenges and pitfalls, and those of us who have led this journey have the scar tissue to prove it. A successful transition to DevOps practices ultimately involves changes to organization, to culture, and to architecture. Organizationally, we want to create multi-skilled teams with end-to-end ownership and shared on-call responsibilities. Culturally, we want to prioritize solving problems and improving the product over closing tickets. Architecturally, we want to move to an infrastructure with independently testable and deployable components. The ten practical lessons outlined in this session synthesize the speaker’s experiences leading teams at eBay, Google, and KIXEYE, as well as from his former consulting practice.
Ten Lessons of the DevOps Transition
Ten Lessons of the DevOps Transition
Randy Shoup
From a talk at the SF CTO Summit 2017 (https://www.ctoconnection.com/summits/sf2017), these slides cover the speaker's experience at Stitch Fix with managing data in a microservices environment. Areas include: * Breaking up a monolithic database into services * Using events as a first-class part of your architecture * Sharing data among microservices * Handling "joins" among microservices * Simulating "transactions" among microservices using the Saga pattern
Managing Data in Microservices
Managing Data in Microservices
Randy Shoup
From a talk at GOTOChicago 2017, these slides discuss the speaker's experiences at Stitch Fix with * Organizational, Process, and Cultural prerequisites for being successful with Microservices: small teams, TDD / CD, DevOps * How to handle shared data when your data is split among microservices * How to handle "joins" across microservices * How to simulate "transactions" across microservices Slides link: https://gotochgo.com/3/sessions/79/slides Video link: https://gotochgo.com/3/sessions/79/video
Effective Microservices In a Data-centric World
Effective Microservices In a Data-centric World
Randy Shoup
More from Randy Shoup
(20)
Large Scale Architecture -- The Unreasonable Effectiveness of Simplicity
Large Scale Architecture -- The Unreasonable Effectiveness of Simplicity
Anatomy of Three Incidents -- Commonalities and Lessons
Anatomy of Three Incidents -- Commonalities and Lessons
One Terrible Day at Google, and How It Made Us Better
One Terrible Day at Google, and How It Made Us Better
Scaling Your Architecture for the Long Term
Scaling Your Architecture for the Long Term
Minimal Viable Architecture - Silicon Slopes 2020
Minimal Viable Architecture - Silicon Slopes 2020
An Agile Approach to Machine Learning
An Agile Approach to Machine Learning
Moving Fast at Scale
Moving Fast at Scale
Breaking Codes, Designing Jets, and Building Teams
Breaking Codes, Designing Jets, and Building Teams
Scaling Your Architecture with Services and Events
Scaling Your Architecture with Services and Events
Learning from Learnings: Anatomy of Three Incidents
Learning from Learnings: Anatomy of Three Incidents
Minimum Viable Architecture - Good Enough is Good Enough
Minimum Viable Architecture - Good Enough is Good Enough
Managing Data at Scale - Microservices and Events
Managing Data at Scale - Microservices and Events
Service Architectures at Scale
Service Architectures at Scale
Monoliths, Migrations, and Microservices
Monoliths, Migrations, and Microservices
Evolving Architecture and Organization - Lessons from Google and eBay
Evolving Architecture and Organization - Lessons from Google and eBay
Moving Fast At Scale
Moving Fast At Scale
DevOps - It's About How We Work
DevOps - It's About How We Work
Ten Lessons of the DevOps Transition
Ten Lessons of the DevOps Transition
Managing Data in Microservices
Managing Data in Microservices
Effective Microservices In a Data-centric World
Effective Microservices In a Data-centric World
Recently uploaded
Tech Trends Report 2024 Future Today Institute
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
hans926745
In this session, we will delve into strategic approaches for optimizing knowledge management within Microsoft 365, amidst the evolving landscape of Copilot. From leveraging automatic metadata classification and permission governance with SharePoint Premium, to unlocking Viva Engage for the cultivation of knowledge and communities, you will gain actionable insights to bolster your organization's knowledge-sharing initiatives. In this session, we will also explore how to facilitate solutions to enable your employees to find answers and expertise within Microsoft 365. You will leave equipped with practical techniques and a deeper understanding of how there is more to effective knowledge management than just enabling Copilot, but building actual solutions to prepare the knowledge that Copilot and your employees can use.
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Drew Madelung
Slides from the presentation on Machine Learning for the Arts & Humanities seminar at the University of Bologna (Digital Humanities and Digital Knowledge program)
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
Maria Levchenko
This project focuses on implementing real-time object detection using Raspberry Pi and OpenCV. Real-time object detection is a critical aspect of computer vision applications, allowing systems to identify and locate objects within a live video stream instantly.
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
Khem
Three things you will take away from the session: • How to run an effective tenant-to-tenant migration • Best practices for before, during, and after migration • Tips for using migration as a springboard to prepare for Copilot in Microsoft 365 Main ideas: Migration Overview: The presentation covers the current reality of cross-tenant migrations, the triggers, phases, best practices, and benefits of a successful tenant migration Considerations: When considering a migration, it is important to consider the migration scope, performance, customization, flexibility, user-friendly interface, automation, monitoring, support, training, scalability, data integrity, data security, cost, and licensing structure Next Wave: The next wave of change includes the launch of Copilot, which requires businesses to be prepared for upcoming changes related to Copilot and the cloud, and to consolidate data and tighten governance ShareGate: ShareGate can help with pre-migration analysis, configurable migration tool, and automated, end-user driven collaborative governance
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
sammart93
These are the slides delivered in a workshop at Data Innovation Summit Stockholm April 2024, by Kristof Neys and Jonas El Reweny.
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Neo4j
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
The Digital Insurer
With real-time traffic, hazard alerts, and voice instructions, among others, launching an intuitive taxi app in Brazil is your golden ticket to entrepreneurial success. For more info visit our website : https://www.v3cube.com/uber-clone-portuguese-brazil/
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
V3cube
The value of a flexible API Management solution for Open Banking Steve Melan, Manager for IT Innovation and Architecture - State's and Saving's Bank of Luxembourg Apidays New York 2024: The API Economy in the AI Era (April 30 & May 1, 2024) ------ Check out our conferences at https://www.apidays.global/ Do you want to sponsor or talk at one of our conferences? https://apidays.typeform.com/to/ILJeAaV8 Learn more on APIscene, the global media made by the community for the community: https://www.apiscene.io Explore the API ecosystem with the API Landscape: https://apilandscape.apiscene.io/
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
apidays
What is a good lead in your organisation? Which leads are priority? What happens to leads? When sales and marketing give different answers to these questions, or perhaps aren't sure of the answers at all, frustrations build and opportunities are left on the table. Join us for an illuminating session with Cian McLoughlin, HubSpot Principal Customer Success Manager, as we look at that crucial piece of the customer journey in which leads are transferred from marketing to sales.
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
HampshireHUG
This presentation explores the impact of HTML injection attacks on web applications, detailing how attackers exploit vulnerabilities to inject malicious code into web pages. Learn about the potential consequences of such attacks and discover effective mitigation strategies to protect your web applications from HTML injection vulnerabilities. for more information visit https://bostoninstituteofanalytics.org/category/cyber-security-ethical-hacking/
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
Boston Institute of Analytics
Breathing New Life into MySQL Apps With Advanced Postgres Capabilities
🐬 The future of MySQL is Postgres 🐘
🐬 The future of MySQL is Postgres 🐘
RTylerCroy
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
The Digital Insurer
As privacy and data protection regulations evolve rapidly, organizations operating in multiple jurisdictions face mounting challenges to ensure compliance and safeguard customer data. With state-specific privacy laws coming up in multiple states this year, it is essential to understand what their unique data protection regulations will require clearly. How will data privacy evolve in the US in 2024? How to stay compliant? Our panellists will guide you through the intricacies of these states' specific data privacy laws, clarifying complex legal frameworks and compliance requirements. This webinar will review: - The essential aspects of each state's privacy landscape and the latest updates - Common compliance challenges faced by organizations operating in multiple states and best practices to achieve regulatory adherence - Valuable insights into potential changes to existing regulations and prepare your organization for the evolving landscape
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc
I've been in the field of "Cyber Security" in its many incarnations for about 25 years. In that time I've learned some lessons, some the hard way. Here are my slides presented at BSides New Orleans in April 2024.
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
Rafal Los
This presentations targets students or working professionals. You may know Google for search, YouTube, Android, Chrome, and Gmail, but did you know Google has many developer tools, platforms & APIs? This comprehensive yet still high-level overview outlines the most impactful tools for where to run your code, store & analyze your data. It will also inspire you as to what's possible. This talk is 50 minutes in length.
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
wesley chun
Discord is a free app offering voice, video, and text chat functionalities, primarily catering to the gaming community. It serves as a hub for users to create and join servers tailored to their interests. Discord’s ecosystem comprises servers, each functioning as a distinct online community with its own channels dedicated to specific topics or activities. Users can engage in text-based discussions, voice calls, or video chats within these channels. Understanding Discord Servers Discord servers are virtual spaces where users congregate to interact, share content, and build communities. Servers may revolve around gaming, hobbies, interests, or fandoms, providing a platform for like-minded individuals to connect. Communication Features Discord offers a range of communication tools, including text channels for messaging, voice channels for real-time audio conversations, and video channels for face-to-face interactions. These features facilitate seamless communication and collaboration. What Does NSFW Mean? The acronym NSFW stands for “Not Safe For Work,” indicating content that may be inappropriate for professional or public settings. NSFW Content NSFW content encompasses material that is sexually explicit, violent, or otherwise graphic in nature. It often includes nudity, profanity, or depictions of sensitive topics.
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
UK Journal
Read about the journey the Adobe Experience Manager team has gone through in order to become and scale API-first throughout the organisation.
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
Radu Cotescu
Stay safe, grab a drink and join us virtually for our upcoming "GenAI Risks & Security" Meetup to hear about how to uncover critical GenAI risks and vulnerabilities, AI security considerations in every company, and how a CISO should navigate through GenAI Risks.
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
lior mazor
Abhishek Deb(1), Mr Abdul Kalam(2) M. Des (UX) , School of Design, DIT University , Dehradun. This paper explores the future potential of AI-enabled smartphone processors, aiming to investigate the advancements, capabilities, and implications of integrating artificial intelligence (AI) into smartphone technology. The research study goals consist of evaluating the development of AI in mobile phone processors, analyzing the existing state as well as abilities of AI-enabled cpus determining future patterns as well as chances together with reviewing obstacles as well as factors to consider for more growth.
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
debabhi2
Recently uploaded
(20)
Tech Trends Report 2024 Future Today Institute.pdf
Tech Trends Report 2024 Future Today Institute.pdf
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Handwritten Text Recognition for manuscripts and early printed texts
Handwritten Text Recognition for manuscripts and early printed texts
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
Developing An App To Navigate The Roads of Brazil
Developing An App To Navigate The Roads of Brazil
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
HTML Injection Attacks: Impact and Mitigation Strategies
HTML Injection Attacks: Impact and Mitigation Strategies
🐬 The future of MySQL is Postgres 🐘
🐬 The future of MySQL is Postgres 🐘
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
Powerful Google developer tools for immediate impact! (2023-24 C)
Powerful Google developer tools for immediate impact! (2023-24 C)
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
More Best Practices for Large-Scale Websites -- Lessons from eBay
1.
More Best Practices
for Large-Scale Websites Lessons from eBay Randy Shoup eBay Chief Engineer Java One September 20, 2010
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
Thank you! Randy
Shoup [email_address]
Download now