Skip to content
Matthew Adams - Co-Founder

Brain the size of planet. He has three decades of big thoughts at the intersection of business and technology, with an uncanny knack of getting people to deliver just that bit more than they dreamed of when they started talking to him. Providing you keep him primed with a nice hot cup of tea.

Meet Matthew

Matthew was CTO of a venture-backed technology start-up in the UK & US for 10 years, and is now the co-founder of endjin, which provides technology strategy, experience and development services to its customers who are seeking to take advantage of Microsoft Azure and the Cloud.

View Blogs View Talks
How .NET 9.0 boosted JSON Schema performance by 32%

How .NET 9.0 boosted JSON Schema performance by 32%

Matthew Adams

We benchmarked endjin's JSON Schema library on .NET 9.0 and saw large performance gains. There are even more gains to be had with new System.Text.Json features.
Json Schema Patterns in .NET - Mapping input and output values

Json Schema Patterns in .NET - Mapping input and output values

Matthew Adams

Common patterns with C# and JSON Schema - using conversions to map automatically between arbitrary types.
Json Schema Patterns in .NET - Maps of strings to strongly typed values

Json Schema Patterns in .NET - Maps of strings to strongly typed values

Matthew Adams

Common patterns with C# and JSON Schema - using unevaluatedProperties to create maps of strings to strongly typed values.
Json Schema Patterns in .NET - Numeric enumerations and pattern matching

Json Schema Patterns in .NET - Numeric enumerations and pattern matching

Matthew Adams

Common patterns with C# and JSON Schema - using oneOf to create numeric enumerations and dispatch with pattern matching.
Json Schema Patterns in .NET - Enumerations and pattern matching

Json Schema Patterns in .NET - Enumerations and pattern matching

Matthew Adams

Common patterns with C# and JSON Schema - using enum to create enumerations and dispatch with pattern matching.
Json Schema Patterns in .NET - Polymorphism with discriminator properties

Json Schema Patterns in .NET - Polymorphism with discriminator properties

Matthew Adams

Common patterns with C# and JSON Schema - using const to create discriminator properties for polymorphic types.
Json Schema Patterns in .NET - Pattern matching and discriminated unions

Json Schema Patterns in .NET - Pattern matching and discriminated unions

Matthew Adams

Common patterns with C# and JSON Schema - using oneOf for discriminated unions and pattern matching.
Json Schema Patterns in .NET - Interfaces and mix-in types

Json Schema Patterns in .NET - Interfaces and mix-in types

Matthew Adams

Common patterns with C# and JSON Schema - composing interface-like mix-in types with allOf.
Json Schema Patterns in .NET - Creating tuples

Json Schema Patterns in .NET - Creating tuples

Matthew Adams

Common patterns with C# and JSON Schema - creating tuples with prefixItems and unevaluatedItems.
Json Schema Patterns in .NET - Working with tensors

Json Schema Patterns in .NET - Working with tensors

Matthew Adams

Common patterns with C# and JSON Schema - Working with tensors by converting to and from numeric spans.
Json Schema Patterns in .NET - Creating an array of higher rank

Json Schema Patterns in .NET - Creating an array of higher rank

Matthew Adams

Common patterns with C# and JSON Schema - Creating an array of higher rank using nested items array schema, minItems and maxItems.
Json Schema Patterns in .NET - Creating a strongly typed array

Json Schema Patterns in .NET - Creating a strongly typed array

Matthew Adams

Common patterns with C# and JSON Schema - Creating a strongly typed array with items, minItems and maxItems.
Json Schema Patterns in .NET - Constraining a base type

Json Schema Patterns in .NET - Constraining a base type

Matthew Adams

Common patterns with C# and JSON Schema - constraining a base type.
Json Schema Patterns in .NET - Extending a base type

Json Schema Patterns in .NET - Extending a base type

Matthew Adams

Common patterns with C# and JSON Schema - extending-a-base-type.
Json Schema Patterns in .NET - Open vs. Closed Types

Json Schema Patterns in .NET - Open vs. Closed Types

Matthew Adams

Common patterns with C# and JSON Schema - object extensibility with open versus closed types.
Json Schema Patterns in .NET - Reusing Common Types

Json Schema Patterns in .NET - Reusing Common Types

Matthew Adams

Common patterns with C# and JSON Schema - how to reuse common schema in the definition of a type.
Json Schema Patterns in .NET - Data Object Validation

Json Schema Patterns in .NET - Data Object Validation

Matthew Adams

Common patterns with C# and JSON Schema - constraints on a simple data object.
Json Schema Patterns in .NET - Data Object

Json Schema Patterns in .NET - Data Object

Matthew Adams

Common patterns with C# and JSON Schema - the simple data object.
Data and AI Engineering Maturity - Fix our problems before we hit the buffers

Data and AI Engineering Maturity - Fix our problems before we hit the buffers

Matthew Adams

As data and AI become the engine of business change, we need to learn the lessons of the past to avoid expensive failures.
How .NET 8.0 boosted JSON Schema performance by 20%

How .NET 8.0 boosted JSON Schema performance by 20%

Matthew Adams

We benchmarked endjin's JSON Schema library on .NET 8.0 and saw large performance gains. There are even more gains to be had with new .NET 8 features.
Agile teams often get their planning and priorities wrong

Agile teams often get their planning and priorities wrong

Matthew Adams

Do you struggle to manage conflicting demands from multiple stakeholders, even when they have agreed about the relative priority of their requests? Apply a budgeting methodology to agile projects for better planning and communication with the team and wider stakeholders.
Ask the right questions to get your data insights projects back on track

Ask the right questions to get your data insights projects back on track

Matthew Adams

Learn about the thinking behind endjin's Power BI Maturity assessment by applying Wardley Doctrine, and asking more questions.
How to design APIs for Accessibility

How to design APIs for Accessibility

Matthew Adams

Learn how accessibility-aware API design creates a great experience for all developers, not just those with accessibility needs.
High Performance UriTemplate resolution with low-allocation C#

High Performance UriTemplate resolution with low-allocation C#

Matthew Adams

Learn how to use high-performance code constructs like ReadOnlySpan<T> to parse and create UriTemplates for C# developers.
C# serialization with JsonSchema and System.Text.Json

C# serialization with JsonSchema and System.Text.Json

Matthew Adams

Learn how code generation can build on System.Text.Json and JSON Schema to create a great experience for C# developers.
Help for the new CTO: Getting to know your team

Help for the new CTO: Getting to know your team

Matthew Adams

As part of my series on guidance for CTOs, I discuss using the Office of the CTO (OCTO) approach to management, its strengths and limitations.
Help for the new CTO: Transparent salaries and the gender pay gap

Help for the new CTO: Transparent salaries and the gender pay gap

Matthew Adams

Salaries. What a nightmare! Hardly anyone likes talking about money. Technical people don't like talking about money. Even a lot of sales people don't like talking about money. When a CTO comes into an organization (even a brand new start-up) one of the first things you need to sort out is the salary quagmire. In this article we look at the strategies and pitfalls of introducing open, capability-based pay levels for a product development team.
Help for the new CTO: IR35 and hiring developers

Help for the new CTO: IR35 and hiring developers

Matthew Adams

It has been a staple of IT projects to make liberal use of short-term contract staff. Upcoming changes in IR35 for medium to larger employers is seriously disrupting the IT recruitment market, and you should understand the impact bt
Configuring SpecFlow for XUnit using new-style csproj

Configuring SpecFlow for XUnit using new-style csproj

Matthew Adams

How to choose the right .NET technology or "learn to stop worrying and love NetStandard2.0"

How to choose the right .NET technology or "learn to stop worrying and love NetStandard2.0"

Matthew Adams

The evolution of .NET is a complex one. We've put together a deck to help you understand what you should choose to use when.
Azure Tech Selector - 2017 Edition

Azure Tech Selector - 2017 Edition

Matthew Adams

We've just released an updated version of our Azure Technology Selector poster - helping you to choose the right Azure service, based on your use-case.
Is JavaScript still dead?

Is JavaScript still dead?

Matthew Adams

JavaScript is one of the most popular programming languages, but is it past its sell by date?
How to use Power BI Embedded with AspNetCore

How to use Power BI Embedded with AspNetCore

Matthew Adams

This post shows how to add a Power BI Embedded report to an ASP.NET Core application.
All Bootcamped Out: the 5-day workshop survival guide

All Bootcamped Out: the 5-day workshop survival guide

Matthew Adams

We've been running workshops and training sessions for a long time now, and one thing we've learned from that is that PEOPLE DO WORKSHOPS WRONG. From MBA classes, to design sessions, there seems to be a common problem: burn-out. We give you a survival guide for multi-day bootcamps and workshops, to get the most out of them, and take care of yourself in the process.
What makes a successful FinTech start-up?

What makes a successful FinTech start-up?

Matthew Adams

In this post we discuss the characteristics of a great FinTech startup, and the importance of the API Economy to innovation in Financial Services.
Why is blockchain revolutionising Financial Services?

Why is blockchain revolutionising Financial Services?

Matthew Adams

There is a lot of hype about the blockchain - usually wrapped up with talk about Bitcoin and crypto-currencies. In this article, we look at its impact on trust, and auditability in financial services, and why it may (or may not) be appropriate for your solutions.
Regulatory Compliance and Cloud Adoption

Regulatory Compliance and Cloud Adoption

Matthew Adams

In this post we review the FCA's guidelines for the adoption of cloud services by FinTech businesses, and help you to understand their impact across the value chain.
FinTech Week and the Microsoft Cloud

FinTech Week and the Microsoft Cloud

Matthew Adams

To celebrate FinTech Week, we've released an eBook based our our talk about Disruption in Financial Services at Future Decoded.
SpecFlow 2.0, NUnit3, Visual Studio and TeamCity

SpecFlow 2.0, NUnit3, Visual Studio and TeamCity

Matthew Adams

We recently upgraded our TeamCity based CI/CD environment, but we had to make some adjustments to fix failing tests.
We are in the era of the modern browser - market share analysis January 2016

We are in the era of the modern browser - market share analysis January 2016

Matthew Adams

We get 1000s of page view per day, which means we get an interesting insights into current Web Browser usage statistics. Here are the numbers for January 2016.

CucumberJS Visual Studio Test Runner

Matthew Adams

We've built and open-sourced a Visual Studio Extension that provides basic support for discovering and running CucumberJS tests with Node.JS, in the Visual Studio Test Environment.
Chaos with a rhythm - controlling innovation

Chaos with a rhythm - controlling innovation

Matthew Adams

Running a start-up or bootstrapping a new product within an established business can feel pretty chaotic. We talk about strategies for managing the time of a team, and ensuring that you become predictable.
Stop coding, start developing your product

Stop coding, start developing your product

Matthew Adams

Technologists often get hung up on technology and forget about the customer (and the business!) We talk about a real-world example and some practical advice for getting your idea business-focused.
A Step-by-step guide to setting up CucumberJS in Visual Studio 2015

A Step-by-step guide to setting up CucumberJS in Visual Studio 2015

Matthew Adams

This is a quick guide to setting up cucumber JS in Visual Studio with grunt.
Step-by-step guide to bootstrapping your new product development – Part 10, Organizational Structures

Step-by-step guide to bootstrapping your new product development – Part 10, Organizational Structures

Matthew Adams

In the early days of a start up, the organizational structure is defined rather loosely, and typically by function. The technical founder has her domain, the sales & marketing founder his, and they work closely together to achieve their initial goals. As an organization grows, it is not possible to maintain that level of detailed personal control. How does a growing business structure itself for innovation? Or a larger organization pivot and allow an innovation culture to develop?
March 2015 Browser Share

March 2015 Browser Share

Matthew Adams

We get 1000s of page view per day, which means we get an interesting insights into current Web Browser usage statistics. Here are the numbers for March 2015.
Step-by-step guide to bootstrapping your new product development – Part 9, Iteration

Step-by-step guide to bootstrapping your new product development – Part 9, Iteration

Matthew Adams

Explore our journey refining our MVP, understanding market fit, and enhancing value delivery to clients.
Step-by-step guide to bootstrapping your new product development – Part 8, Validation

Step-by-step guide to bootstrapping your new product development – Part 8, Validation

Matthew Adams

In this article, we look at how we're going to tidy up our assumptions list, conduct some more low-cost experiments to satisfy ourselves we know exactly what we're getting into, then take the leap and build something that satisfies some core part of the value proposition, and persuade some customers to buy it.
10 ways to get hired by an amazing start up

10 ways to get hired by an amazing start up

Matthew Adams

Do you really want to be a founder? Or do you want to get some start-up experience on the inside, but at lower risk. We look at what it means to be involved in start-up and how to get hired as employee #1 (or #2, or #3)
Step-by-step guide to bootstrapping your new product development – Part 7, Business model design

Step-by-step guide to bootstrapping your new product development – Part 7, Business model design

Matthew Adams

Business model design is all about sharing the value from the product. How do we ensure all the stakeholders get what they need out of it?
You're hiring the wrong people: 10 tips to find great developers

You're hiring the wrong people: 10 tips to find great developers

Matthew Adams

Hiring developers is hard. Really hard. Here are some tips on how to make it easier on yourself.
Step-by-step guide to bootstrapping your new product development – Part 6, Follow on markets

Step-by-step guide to bootstrapping your new product development – Part 6, Follow on markets

Matthew Adams

Although you do not want to lose focus on the beachhead market, it is always good to consider the TAM for follow-on markets. If we do this thing, where might we take it next?
Which programming language should I learn in 2015?

Which programming language should I learn in 2015?

Matthew Adams

If you were learning to programme today, which language should you choose, and why?
Step-by-step guide to bootstrapping your new product development – Part 5, Getting to paying customers

Step-by-step guide to bootstrapping your new product development – Part 5, Getting to paying customers

Matthew Adams

Ultimately (however long you can put it off for by taking investment), you don't have a business if people aren't paying you more money than it costs to develop, acquire the customer, deliver it to them, and support them for their whole lifetime with the product. We look at how you can get to paying customers.
Step-by-step guide to bootstrapping your new product development – Part 4, Competitive Positioning

Step-by-step guide to bootstrapping your new product development – Part 4, Competitive Positioning

Matthew Adams

What does "competitive positioning" actually mean? Are your competitors all solving the same problems as you, or are they the people competing for the same kind of attention, or pool of resources? We take a look at the challenges of "competition".
Step-by-step guide to bootstrapping your new product development – Part 3, Understanding the Beachhead Market

Step-by-step guide to bootstrapping your new product development – Part 3, Understanding the Beachhead Market

Matthew Adams

Having got a very rough sketch of our product and its fit to the beachhead market, we now want to focus right in on that market, and better understand the size of the market, the customers, and our proposition to them. In this article we are going to explore techniques we can use to define our value proposition for the beachhead market.
Step-by-step guide to bootstrapping your new product development - Part 2, Inception

Step-by-step guide to bootstrapping your new product development - Part 2, Inception

Matthew Adams

The article is all about the very start of new product development: determining whether there is a market, and how the offering will fit that market's needs. We're trying to get a very quick, but comprehensive sketch of the whole product, and the market it is intended to address.
Hedy, Not Peck

Hedy, Not Peck

Matthew Adams

Evolving a proposition or product by increasing the fidelity is a better approach than incrementing feature by feature.
Step-by-step guide to bootstrapping your new product development - Part 1, Principles

Step-by-step guide to bootstrapping your new product development - Part 1, Principles

Matthew Adams

Kickstart product development with our series on bootstrapping. Learn tools and principles for all lifecycle stages.
February 2015 Browser Share

February 2015 Browser Share

Matthew Adams

We get 1000s of page view per day, which means we get an interesting insights into current Web Browser usage statistics. Here are the numbers for February 2015.
A step by step guide to choosing the right Azure technology for your solution

A step by step guide to choosing the right Azure technology for your solution

Matthew Adams

To help guide the client through the selection process (and to act as an aide memoire when we come to try and remember why particular choices were made), we created a handy flow-chart to take you through the technology landscape, and suggest some recommended-practice solutions.
A step-by-step guide to technology startups, valuation and the VC market

A step-by-step guide to technology startups, valuation and the VC market

Matthew Adams

In this article we look at how technology startups are valued, how investors calculate their return, how you can position your business in that landscape, and whether you should!
January 2015 Browser Share

January 2015 Browser Share

Matthew Adams

We get 1000s of page view per day, which means we get an interesting insights into current Web Browser usage statistics. Here are the numbers for January 2015.
Avoid circular dependencies with AngularJS Directives

Avoid circular dependencies with AngularJS Directives

Matthew Adams

How to use an $injector service to avoid a circular dependency error dynamically resolving templates in a templateRepository.
Using AngularJS decorators to resolve view templates by resource content type

Using AngularJS decorators to resolve view templates by resource content type

Matthew Adams

In this post we show how you can render a container based on content-type
Azure Weekly Newsletter

Azure Weekly Newsletter

Matthew Adams

We have started to publish a FREE weekly newsletter covering all the latest news about the Microsoft Azure ecosystem
Bootstrap 3 At A Glance - Part One - Motivations

Bootstrap 3 At A Glance - Part One - Motivations

Matthew Adams

In this post we look at the history and motivations behind the Bootstrap CSS library, and the goals of the project.
Learning to Program – A Beginners Guide – Part Twelve – Dealing with Repetitive Tasks - Recursion in F#

Learning to Program – A Beginners Guide – Part Twelve – Dealing with Repetitive Tasks - Recursion in F#

Matthew Adams

In this post we'll look at recursion in F#...In this post we'll look at recursion in F#...
Learning to Program – A Beginners Guide – Part Eleven – More With Functions and Logic in F#: Minimizing Boolean Expressions

Learning to Program – A Beginners Guide – Part Eleven – More With Functions and Logic in F#: Minimizing Boolean Expressions

Matthew Adams

In this post we delve deeper into Function and Logic and look at minimizing Boolean Expressions with F#
Learning to Program – A Beginners Guide – Part Ten – Getting Started With Operators in F#

Learning to Program – A Beginners Guide – Part Ten – Getting Started With Operators in F#

Matthew Adams

In this post, we'll look at how our function can work more like the other logical F# operators we've already used.
Learning to Program – A Beginners Guide – Part Nine – Introducing Functions in F#

Learning to Program – A Beginners Guide – Part Nine – Introducing Functions in F#

Matthew Adams

In this post, we'll learn how to use F# to ease the pain for us.
Example of a full-width bleed using Bootstrap 3

Example of a full-width bleed using Bootstrap 3

Matthew Adams

See how to use Bootstrap 3 to create a full-page bleed.
Learning to Program - A Beginners Guide - Part Eight - Working With Logic

Learning to Program - A Beginners Guide - Part Eight - Working With Logic

Matthew Adams

In this post, we'll look at how we can bring logic to bear on our problems.
Learning to Program - A Beginners Guide - Part Seven - Representing Numbers

Learning to Program - A Beginners Guide - Part Seven - Representing Numbers

Matthew Adams

In post, we're going to look at the data memory in more detail, and learn how we can represent numbers in a computer.
Angular.JS ngRepeat and Bootstrap layout bug on IE7

Angular.JS ngRepeat and Bootstrap layout bug on IE7

Matthew Adams

In this post we delve into a bug we discovered with Angular.JS and Bootstrap that appears in IE 7.
Learning to Program - A Beginners Guide - Part Six - A First Look at Algorithms

Learning to Program - A Beginners Guide - Part Six - A First Look at Algorithms

Matthew Adams

In this post we're going to take a look at algorithms.
Learning to Program – A Beginners Guide – Part Five – Running a program

Learning to Program – A Beginners Guide – Part Five – Running a program

Matthew Adams

Let's start our exploration of this architecture by looking at the Program Instructions memory.
Learning to Program - A Beginners Guide - Part Four - A Simple Model of a Computer

Learning to Program - A Beginners Guide - Part Four - A Simple Model of a Computer

Matthew Adams

In this post, we're going to be taking a look at one representation of the hardware box - from a programmer's perspective.
Learning To Program - A Beginners Guide - Part Three - How Does a Computer Work?

Learning To Program - A Beginners Guide - Part Three - How Does a Computer Work?

Matthew Adams

Retrying tasks with TPL, async and synchronous code

Retrying tasks with TPL, async and synchronous code

Matthew Adams

Dealing with Transient Faults is absolutely essential when working in The Cloud. We delve into the library we've created for dealing with this situation.
Learning To Program - A Beginners Guide - Part Two

Learning To Program - A Beginners Guide - Part Two

Matthew Adams

In this post, we're going to set up the tools that we're going to use in the rest of this course on Windows or Linux.
A step by step guide to installing an F# REPL environment on Windows

A step by step guide to installing an F# REPL environment on Windows

Matthew Adams

In this step-by-step guide, we'll take you through the process of setting up an F# REPL environment on Windows.
A step by step guide to installing an F# REPL environment on Linux

A step by step guide to installing an F# REPL environment on Linux

Matthew Adams

In this step-by-step guide, we'll take you through the process of setting up an F# REPL environment on Linux.
Learning To Program - A Beginners Guide - Part One

Learning To Program - A Beginners Guide - Part One

Matthew Adams

Evidence-based Decision Making: Adding validation to your value chain

Evidence-based Decision Making: Adding validation to your value chain

Matthew Adams

Start using evidence-based decision making to add some rigour to decision making process.

Azure Cloud Migration Poster

Matthew Adams

We've just released a free Cloud Migration Process poster to help you understand the complexities of evaluating & executing different cloud migration strategies.
Prototyping and Proof of Concept: Charting and Data Visualization on the Microsoft Platforms

Prototyping and Proof of Concept: Charting and Data Visualization on the Microsoft Platforms

Matthew Adams

A proof of concept is not a quick and dirty hack, it's not a demo, or a technical spike.
Example Responsive Layout Using Bootstrap

Example Responsive Layout Using Bootstrap

Matthew Adams

See how to create a responsive website layout using Bootstrap.
Tips for implementing responsive designs using Bootstrap 3

Tips for implementing responsive designs using Bootstrap 3

Matthew Adams

We ran a retrospective of our first few Bootstrap-based HTML5/Javascript projects a few weeks back, and distilled some of the output into these top tips
Which programming languages should I learn: Beginners Edition

Which programming languages should I learn: Beginners Edition

Matthew Adams

If you were learning to programme today, which language should you choose, and why?
Which programming languages should I learn?

Which programming languages should I learn?

Matthew Adams

If you were learning to programme today, which language should you choose, and why?
Metrics & Reporting in Strategy Development

Metrics & Reporting in Strategy Development

Matthew Adams

Having a strategy is one thing, being able to measure your progress towards implementing is, and its impact is another.
Phased Thinking: Tactics for strategy

Phased Thinking: Tactics for strategy

Matthew Adams

Thinking strategically is incredibly difficult, especially if all your cognitive bandwidth is absorbed by business as ususal operational activities.
Thinking About Strategy & Tactics: Some Practical Tips

Thinking About Strategy & Tactics: Some Practical Tips

Matthew Adams

Thinking strategically is difficult, especially if all your bandwidth is consumed by operational needs. Here are our top 5 tips for thinking strategically.

Back to the Future: HTML and Javascript in 2013

Matthew Adams

We take a look at the state of HTML and JavaScript in 2013; the good, the bad and the ugly.

RavenDB in the Cloud

Matthew Adams

Some thoughts on RavenDB after using it to build a content-managed website.
Quiet day on Monday

Quiet day on Monday

Matthew Adams

Volunteering as a chef for the Kai We Care pop-up restaurant for the Red Cross earthquake fund for Christchurch, New Zealand.
Where do my Visual States come from in Blend?

Where do my Visual States come from in Blend?

Matthew Adams

How does Expression Blend managed to find the Visual States exposed by the standard controls? How could you do the same with your own code?

Endjin–Looking back on 2010

Matthew Adams

Component Discovery and Composition II - Abstracting the container implementation

Component Discovery and Composition II - Abstracting the container implementation

Matthew Adams

Layering your API

Layering your API

Matthew Adams

Layering your APIs can increase readability and discoverability
RX and INotifyPropertyChanged

RX and INotifyPropertyChanged

Matthew Adams

In this post we evolve an implementation of Rx over INotifyPropertyChanged.
Silverlight CommandManager

Silverlight CommandManager

Matthew Adams

A deep dive into command binding in Silverlight.
Component discovery and composition Part 1f: Fundamentals – Generalizing Registration

Component discovery and composition Part 1f: Fundamentals – Generalizing Registration

Matthew Adams

Component discovery and composition Part 1e: Fundamentals – Componentizing Registration

Component discovery and composition Part 1e: Fundamentals – Componentizing Registration

Matthew Adams

Component discovery and composition Part 1d: Fundamentals – Introducing Conventions

Component discovery and composition Part 1d: Fundamentals – Introducing Conventions

Matthew Adams

Component discovery and composition Part 1c: Fundamentals – Castle.Windsor

Component discovery and composition Part 1c: Fundamentals – Castle.Windsor

Matthew Adams

Component discovery and composition Part 1b: Fundamentals - MEF

Component discovery and composition Part 1b: Fundamentals - MEF

Matthew Adams

Component discovery and composition Part 1: Fundamentals

Component discovery and composition Part 1: Fundamentals

Matthew Adams