Finding the Path: The Principles of Effec7ve API Design Ronnie Mitra @mitraman [email protected] Director of Design CA API Academy
Aug 13, 2015
Finding the Path: The Principles of Effec7ve API Design
Ronnie Mitra @mitraman [email protected] Director of Design CA API Academy
Three Principles of Success
Align with your business model
Design with empathy
Manage complexity
1
2
3
Persona Driven Design
BenjaminAfina
C++ Developer Server Software
Internal Developer Project-led development
Cordova Developer Mobile Apps
Third Party Developer Freelance Development
What is Complexity?
• Composed of many parts • Intricate, elaborate, interconnected • Difficult to process, resource intensive
Systems Complexity: Emergence
The action of the whole is more than the sum of the actions of the
parts
Emergent and Adaptive Behaviour
• Agents become specialized • Behaviour is de-centralized • The system can adapt to change
Adaptive system
Increased reliability
System Complexity as a Feature
Performance Credit-Assignment Rule-Discovery
Cognitive Complexity: Norman
“Complexity by itself is neither good nor bad: it is confusion that is bad.”
Reduce Organize Time Learn Differences Context Emotion Trust The One
Cognitive Complexity: Maeda
“Simplicity is about subtrac7ng the obvious and adding the meaningful”
Making Interfaces Simpler
The designer’s job is to manage complexity: • improve learnability • improve usability • reduce confusion
Fred Brooks
The complexity of software is an essential property not an accidental one. Hence descriptions of a software entity that abstract away its complexity often abstract away its essence.
No Silver Bullet – Essence and Accident in Software Engineering
Larry Tesler
Tesler’s Law of the Conservation of Complexity
Every application has an inherent amount of irreducible complexity. The only question is: who will have to deal with it […]?
“
”
Managing OAuth 2.0 Complexity: Who Pays the Price?
OAuth 2 Client Implementa7on
OAuth 2 Server Implementa7on
!!!
Managing Complexity: Microservices
Monolith Application Microservices Application
μService
API
μService
μService
μService
μService
μService
API API
API API API
API
Managing Complexity: The Monolith
Monolith Application
API
Who pays the complexity price?
Code Maintainer System Maintainer
Managing Complexity: Microservices
Who pays the complexity price?
Code Maintainer System Maintainer
Microservices Application
μService
μService
μService
μService
API API
API API
Managing Complexity: Microservices
• Service becomes less confusing, but system complexity increases
• Complexity cost is worthwhile
• Tools are introduced to hide (shift) complexity
containerization
discovery
deployment
…
Managing Complexity: Microservices boundaries
μService
μService
μService
μService
μService
μService
client application
API API
API API API
API
Managing Complexity: Microservices
Who pays the complexity price?
Code Maintainer
System Maintainer
Microservices Application
μService
μService
μService
μService
API API
API API
Client App Developer
Managing Complexity: Client Applications
μService
μService
μService
μService
μService
μService
client application
API API
API API API
API SDK
API
Managing Complexity: Client Applications
μService
μService
μService
μService
μService
μService
client application
API API
API API API
API
API
• Why Good API Design MaRers
API Program Goals
1. Get more developers using the interface
2. Get applications to market quickly
The Benefits of a Usability and Experience Focus
1. A better experience (increased adoption)
2. Ease of use (shorter dev cycle)
Why Good API Design Matters
Why?
revenue reach innovation
growth compliance intel
1 Determine Goals
2 Identify Users
3 Design Interface
4 Evaluate
5 Implement
platform
language
organization
distance
knowledge
risk profile
investment
For Whom?
1 Determine Goals
2 Identify Users
3 Design Interface
4 Evaluate
5 Implement
Ideate, Experiment, Sketch & Prototype
1 Determine Goals
2 Identify Users
3 Design Interface
4 Evaluate
5 Implement
• Start with design-focused
sketches
• Built low-fidelity prototypes
• Increase fidelity and incorporate actual implementation concerns
Test Assumptions
Lab Evaluation
Peer Evaluation
User Observation
Write Client Code
Participatory Design
1 Determine Goals
2 Identify Users
3 Design Interface
4 Evaluate
5 Implement
• Include implementation concerns in evaluation
• Ensure that design is practical
• Articulate the implementation cost
Implementation
1 Determine Goals
2 Identify Users
3 Design Interface
4 Evaluate
5 Implement
…Analyze Real Usage
Embrace and Manage Complexity
Iterate and Evolve
Three Principles of Success
Align with your business model
Design with empathy
Manage complexity
1
2
3
Finding the Path: The Principles of Effec7ve API Design
Ronnie Mitra @mitraman [email protected] Director of Design CA API Academy