MyUW in 2016 - by the numbers

This post considers MyUW in 2016 as framed by metrics.

Unless otherwise stated, all numbers are about calendar 2016. Point in time numbers are about December 31, 2016.

(See also minimalist slide deck. One use for this post is as notes to support presenting or consuming that deck.)

MyUW as production service

10 million sessions

Per Google Analytics, MyUW served around ten million user sessions. MyUW serves a lot of traffic.

Users followed a link in MyUW out to something outside MyUW more than 8,000,000 times, including four million launches of Office365 and two million launches of the course dashboard. MyUW eases navigation to other systems.

100,000 notifications displays

Users viewed their full notification page around 100,000 times. Besides helping users navigate to other applications, MyUW helps users understand what they need to do and where they might need to navigate.

100,000 searches and app directory browses

MyUW presented the directory of applications around 100,000 times and provided search results in around 100,000 user sessions. Not all MyUW content relevant to all users can fit on default home pages, so MyUW supports users searching and browsing the available content.

100,000 home page modifications

Once you’ve searched or browsed to something interesting, you can add it to your home page. Users modified their home pages almost 100,000 times, including adding the new Wiscard Balance widget almost 6,000 times.

Releases every 7 days

MyUW releases to production every 7 days, in our 5am to 7am Tuesday morning release window. We rarely incur downtime even during this service window. We aspire to release more often, with better automation and evolving local culture to support and sustain this. Still, we’re already releasing relatively frequently. Releasing frequently allows us to ship less change more often to get feedback sooner and to incur less release risk.

We occasionally add additional release windows to ship urgent change. Our blue-green deployment practices allow us to do so without incurring service downtime – mostly no one notices.

5 tiers

We have 5 tiers:

  • predev: Infrastructure and framework development. Content is relatively stable.
  • test: Content development. Infrastructure is relatively stable.
  • qa: Stable, tagged, versioned releases of all components. The purpose of this tier is to demonstrate specific, promotable versions working correctly together.
  • stage : Production in all ways except it runs the latest production build (the build “staged” for release) and no traffic is routed to it. Exactly the Docker image that’s running in stage is promoted to prod in the release process.
  • prod : Production. Runs a specific, deliberately-released version of the whole bundle. Typically a bundle precisely as it was validated in stage.

Five tiers mean more opportunity for various development efforts to not step on one another’s toes, more opportunity for quality assurance and testing, and more opportunity to co-opt an environment to test e.g. a major upgrade of an external dependency.

Five tiers also helps make breaking changes and complicated upgrade paths painful enough that we look for ways to avoid breaking change, to simplify upgrade paths, and to change gracefully. Components coping better with more versions of dependencies yields a more stable solution, gives us better options in the rare case where we do need to drop back to an older version of a module, and yields more adoptable and supportable software products.

4 production VMs

We have 4 production VMs running 8 virtual MyUW nodes of which 4 are typically in service at any time. This provides sufficient capacity to handle peak load, allows one or typically even two nodes to fail without significant adverse effect to service experience, and allows blue-green deployments with zero service downtime.

160 apps

We had ~160 “real” items in the app directory, including

  • ~50 apps for Madison students or applicants
  • ~25 administrative tools (both portal administration and some business function administration)
  • ~20 apps for Madison staff
  • ~20 apps for Madison constituents in general
  • ~5 apps supporting advising
  • ~5 apps supporting research

We update this content frequently, with 261 changes to app directory content in 2016.

( git log --since=2016-01-01 --before=2017-01-01 --oneline | wc -l ).

MyUW as complex system

MyuW has ~50 items eligible to appear by default on the user’s home screen. (No real user sees 50 items by default. Group matching pares this down to items that may be relevant.)

There are ~90 groups available for targeting in MyUW, including 13 managed in Manifest, UW-Madison’s Grouper instance.

MyUW as growing and evolving

5 new notifications in 2016. Lots of potential in this feature, as yet un-realized.

MyUW as designed

MyUW implements responsive design, flexing across browser window sizes. This improves the experience across the breadth of devices using MyUW, including the 20% tablet or mobile phone form-factor traffic.

MyUW budgets for 0.75 FTE UX design from DoIT Communications.

~40 apps had interesting widgets, namely

MyUW as teams

Infrastructure team

5 dedicated staff

  • 3 full stack developers
  • 1 front end developer via ADI
  • 1 strategist

and a wider cast, including

  • .75 User Experience consultant
  • partial Site Reliability Engineer
  • 0.25 Tier ~2 Help Desk
  • and a wider cast

Dedicated, focused, invested staff in for the long term is key to MyUW success, to being a team, to delivering our quality, confident service.

0.25 FTE focused on escalated support cases, documenting known issues, digesting support into actionable product intelligence: working great, key to MyUW’s success.

Development teams

4 teams active developing MyUW frame-based apps

  • MyUW Infrastructure
  • MyUW Academic Applications
  • ADI - Integrated Applications
  • UW-Extension - Continuing Education, Outreach & E-Learning

Service team

Infrastructure Scrum team, plus

  • Service team lead
  • Cybersecurity liaison
  • MyUW Academic Applications liaison
  • ADI - Integration Applications liaison
  • DoIT Communications liaison
  • UX
  • Help Desk
  • Site reliability engineer

MyUW as serving the entire UW System

16 themes

System-targeted 25 app directory entries

  • ~15 apps for System staff
  • ~10 apps for UW Extension CEOEL students

MyUW and open source

Return on investment

The World Bank found a 200% return-on-investment in participating in open source. This is our strategy: build and collaborate on open source products in the hope of a positive return on this investment via collaboration, shared maintenance, and benefiting from the work of others. We develop more thoughtfully and more sustainably when we approach our work as building open source software products that are configured and adopted locally.

50 releases of 7 products

MyUW posted 50 releases of 7 MyUW-led open source products in 2016.

1 Apereo board member

MyUW team member Jim Helwig has long served on the Apereo Board of Directors. Taking a hand in the governance of Apereo is part of how we contribute to its sustainability and thus to the sustainability of the context in which we can realize a return on our open source investment.

2 uPortal steering committee members

MyUW team members Jim Helwig and Andrew Petro serve on the Apereo uPortal steering committee. Taking a hand in the governance of uPortal is part of how MyUW contributes to its sustainability and thus to the sustainability of a context in which we can realize a return on our open source investment.

425 commits by others

There were 425 commits in 2016 to Jasig/uPortal not by University of Wisconsin employees.

In summary

MyUW is

  • a high-usage production service
  • a complex system
  • growing and with not-yet-fully-realized potential
  • designed
  • a team
  • serving the entire University of Wisconsin system
  • practicing open source

Andrew Petro

Related Posts

CAS 6.0.0 RC4 Feature Release which I present an overview of CAS 6.0.0 RC4 release.

Apereo CAS 6.0.x - Building CAS Feature Modules

An overview of how various CAS features modules today can be changed and tested from the perspective of a CAS contributor working on the codebase itself to handle a feature request, bug fix, etc.

CAS 6.0.x Deployment - WAR Overlays

Learn how to configure and build your own CAS deployment via the WAR overlay method, get rich quickly, stay healthy indefinitely and respect family and friends in a few very easy steps.

Apereo CAS - Jib at CAS Docker Images

Learn how you may use Jib, an open-source Java containerizer from Google, and its Gradle plugin to build CAS docker images seamlessly without stepping too deep into scripting Dockerfile commands.

Apereo CAS 6 - Administrative Endpoints & Monitoring

Gain insight into your running Apereo CAS 6 deployment in production. Learn how to monitor and manage the server by using HTTP endpoints and gather metrics to diagnose issues and improve performance.

Apereo CAS - SAML2 Metadata with MongoDb

CAS distributed SAML2 metadata management using MongoDB, where you learn how to store metadata documents inside MongoDB for CAS as a SAML2 identity provider and all other registered SAML2 service providers.

Apereo CAS - Slurp Configuration with Groovy

Learn how CAS configuration may be consumed via Groovy to simplify and consolidate settings for multiple deployment environments and profiles.

Apereo CAS - Configuration Management with MongoDb

CAS distributed configuration management using MongoDb, where you learn how to store and secure CAS configuration settings and properties inside MongoDb.

Apereo CAS - Integration with HashiCorp Vault

CAS distributed configuration management using HashCorp Vault, where you learn how to store and secure CAS configuration settings and properties inside Vault.

CAS 6.0.0 RC3 Feature Release which I present an overview of CAS 6.0.0 RC3 release.