The most profound connection between logic and computation is a pun. The doctrine of Propositions as Types asserts that propositions correspond to types, proofs to programs, and simplification of proofs to evaluation of programs. The proof of a conjunction is a pair, the proof of a disjunction is a case expression, and the proof of an implicatio…
The launch of tensorflow.js library in March 2018 has put the power of machine learning into the hands of the javascript developer, and with its specific capability to run machine learning programs entirely on the client-side, into the hands of the front-end dev.
This talk documents Susanna's three month journey into executing machine lea…
How often do you search for “how to do [x] in [language]”? Maybe you’re a Python developer who thinks Go’s dedication to clean syntax feels familiar, or maybe you’re a Ruby dev who thinks Erlang’s pattern matching doesn’t leave enough freedom in your code to deal.
Language differences and similarities both enamor and infuriate us, but muc…
There is a lot of hype around PWAs, especially from Google is who is leading its evolution. But all of the demos are small self-contained examples that don’t include the intricacies of large, real-world applications.
Where does server rendering fit in with the app shell model? What are the pitfalls of service worker caching?
As the…
Unfortunately, we still treat accessibility in the same way we deal with front-end development for older browsers, something to be done at the end. What if I tell you that we can use the latest Web APIs and still offer an inclusive and accessible experience.
In this talk, you'll learn how to combine Web APIs such as Speech Recognition and…As front-end developers, we are tasked with building the *front* end of a Web site or application — in other words, we are building the *user's* end of an interface. This is why it is crucial that we ensure that the front-end foundations that we build are as inclusive of and accessible to as many users as possible. To do that, we must build with…
Modern systems can fail in spectacular ways. Failure isn’t a question of if, but when. Resilient systems can endure and gracefully recover from failures, but ensuring your system has these properties requires thought and some deliberate architectural decisions. Join me in this talk as I attempt to find answers in literature and industry to build…
AI and machine learning introduce complex algorithms which affect our daily life.
Despite all the benefits of machine learning it can be biased, and there are risks that are introduced which can manifest themselves as bias towards customers or users, for example in the form of racism, sexism and other forms of discrimination. This present…
Learn how to building an internal component library & style guide can help your company ship and iterate faster. This talk will cover how we created a scalable & maintainable UI library (http://ux.mulesoft.com) with ES6, React, and PostCSS for consumption across multiple product teams.
Design patterns have been a part of the vocabulary of software design for some time. The patterns community in software development drew inspiration from the work of architect Christopher Alexander, at the UC Berkeley Center for Environmental Design.
Alexander's work throughout the early years of the 21st Century, however, has shifted its …
Andrew, a front-end developer at Harvest, is in his eleventh year of being amazed that his JavaScript functions. He's a former resident of Chicago and Kansas City, but now works from his home in Washington, DC. In his free time, he likes to help out with his local tech communities as an organizer of his local node.js meetup (formerly in Kansas C…
At its heart, React is about describing a living, changing tree. We typically use it to build an HTML DOM tree, and obviously, React is written that in mind.
But what if I told you that the DOM was only the beginning? Your React components can describe not just HTML, but whole WebGL scenes, letting you seamlessly integrate beautiful, GPU-a…
JavaScript Style Sheets (JSSS) was a technology introduced by Netscape in 1996. Chances are, you’ve never heard of JSSS, since it was available in Netscape Communicator 4.0. They allowed you to define custom styling rules for your web pages. You’re probably more familiar with its competitor at the time—Cascading Style Sheets. JavaScript Style Sh…
Earlier this year, we announced WASI, the WebAssembly system interface. With this system interface, WebAssembly can be used outside the browser in a portable and safe way.
As Solomon Hykes, co-founder of Docker, said, "If WASM+WASI existed in 2008, we wouldn't have needed to create Docker. That's how important it is. Webassembly on the ser…
Have you ever wanted to get into blockchain development, but haven’t found a good place to start? In this talk, we will explore a use case of blockchain and show you how it can be applied in a real-world scenario.
First, we will cover the basics of blockchain and Hyperledger Fabric by building a simple blockchain application. We will expl…
The Memex was proposed in 1945 as the ultimate organizational tool. The desk-sized device would store a user’s personal library and allow for information to be searched, organized, connected together with hyperlinks, and shared.
Without a device like this, its creator suggested, our species would drown in information overload and come to …
In this talk Brian will walk you through the ideas, techniques and technologies used to build a SaaS Recommendation Engine. From building an efficient software classifier, to storing the large amounts of data required, to the pipeline of artificial intelligence and machine learning algorithms used. The system is being built with a myriad of tech…
Beaker is a browser for exploring and building the peer-to-peer Web. With Beaker, you can build and host websites directly from your computer — no server required! But what’s the Web without apps? Is it really possible to build an app without managing a server or a database? This talk will explore the world of peer-to-peer apps, and take a look …
CSS Houdini is one of the most exciting and powerful advancements in web styling. It allows developers to access the CSS Object Model for the first time(!) and tell the browser how it should interpret code written in CSS. While yes, it will still be a little while until Houdini is fully implemented and cross-browser ready, this talk examines how…
For years, front-end developers fumbled with hacking floats for layouts, often as part of a grid system. Media queries made these float-based grids more responsive to different screen dimensions, but unfortunately, the behaviors weren't always granular enough to work well with complex layouts. Now with the new Grid specification in CSS4, we can …
How are we supposed to sing along with our favorite TV theme song every week if it doesn’t have lyrics?
At Beth's house, they “meow” along (loudly). They also code, so she built ‘Meowifier’ to convert any song into cat meows. Meowifier is a technical feat. It’s hilarious. It’s beautiful. It’s a new way to waste time on the internet.
Traditional architectures are no longer suitable for the increasing needs of today's applications. The price is often paid in high bandwidth and reduced performance. Demand-driven design enables clients to request arbitrary data on demand. Companies like Facebook and Netflix have switched to demand-driven architectures to better embrace a great …
The first program on a stored-program computer ran on on June 21st, 1948. Since then a lot has happened... This talk will look at the development of hardware and software from the birth of the first stored program computer in 1948 until today. That covers the first 68 years. Then I'll make a few guesses as to what will happen in the next 32 year…
In this talk, we'll explore Elm, the programming language that brings an entirely new approach to front-end development. We'll study the language but, more importantly, the characteristics that make it such a great language to build reliable, robust client-side applications and how we can take these properties and apply them to JavaScript applic…
The next billion people going online live in emerging countries. This is a mobile-first reality, where a feature-phone or a smartphone is the main point of communication, local use of mobile apps and web is different and the infrastructure places strict limits on internet data volume. This subject is getting increased attention, and many project…
The InterPlanetary File System (IPFS) is a new hypermedia distribution protocol, addressed by content and identities. IPFS enables the creation of completely distributed applications. It aims to make the web faster, safer, and more open. IPFS enables completely decentralized and distributed apps. And it now supports fully dynamic apps, like real…
The network is back. But is it useful?
We’ll explore what a service mesh is and what they can do for your microservice web backends. Are the claims of observability, resiliency, and WAF features real? Are they useful during development, production, or both? Using pictures and demos, we’ll find out!
This session will also briefly cov…
Take it from a Sass tool developer and former grid-system author: CSS Variables (custom properties), the calc function, and the grid module are game-changers. These tools may look similar to existing frameworks, but the similarities are only skin deep.
We’re witnessing a fundamental shift in the design of CSS as a language – allowing us to…
Blockchain technologies are showing the world that decentralized systems are the future wonders. Indeed, while being largely validated by BitCoin, the Blockchain enables much more than just money bookkeeping. Imagine all the computers of the planet executing programs in a collaborative way, bringing up the most resilient infrastructure ever, sha…
We read news about horrible data leaks almost every day, but we continue to trust our data to the "cloud" - that's really should be thought of as someone else's computer which is suspectible to the three-letter agencies. What can we do about it? We can return the Web to its roots: a fully decentralized system that belongs to ev…
As we move away from monolithic architectures towards systems comprised of cooperating services, we introduce new opportunities and new failure modes. This is especially true of microservice architectures and even more so for function-as- as-service approaches like AWS Lambda. We achieve simplicity in each component, but at the cost of pushing c…
A Jazz guitarist turned developer, Marc-André is currently working at Shopify, trying to make commerce better for everyone. When he's not hacking on Rails, GraphQL or Relay, he likes lifting heavy barbells above his head.
N/A
Closing talk of Full Stack Fest 2019.
More and more businesses are moving away from monolithic servers and turning to event-driven microservices powered by cloud function providers like AWS Lambda. So, how do we hack in to a server that only exists for 60 milliseconds?
This talk will show novel attack vectors using cloud event sources, exploitabilities in common server-less pa…
gRPC is a popular technology for microservices, leveraging HTTP/2 and Protobufs for efficient service-to-service communication. Did you know you can add http and json support to gRPC for rich client-to-service APIs?
Namely, an HR SaaS company, has adopted gRPC and developed open-source tools to create grpc-gateways and GraphQL endpoints. T…
HTTP/3 is the designated name for the coming next version of the protocol that is currently under development within the QUIC working group in the IETF.
This time TCP is replaced by the new transport protocol QUIC and things are different yet again!
HTTP/3 is designed to improve in areas where HTTP/2 still has some shortcomings, prim…
This talk aims to present the most important ideas behind high availability support in Elixir/Erlang. It is a medium to high-level explanation of tools and approaches that can help developers drastically increase the uptime of their systems.
With so many machine learning frameworks and libraries available, writing a model isn’t a bottleneck anymore while putting your models in production is still a challenge.
In this talk, you will learn how we deploy the python deep learning models in production at Booking.com.
Topics will include:
- Deep Learning model trainin…
Ben is the founder of Ocelot Uproar, a company focused on training and building products loved by users. Ben enjoys looking for the next challenges to solve, usually over an occasional beer. Ocelot Uproar recently launched Katacoda (Katacoda.com), an interactive learning environment for software engineers.
This presentation reviews concepts, data model and architecture. It also talks about the difference between logging, metrics and tracing. The demo will have code in javascript and java (maybe also a surprise language!), but code expertise isn't required. When you leave, you'll at least know something about distributed tracing, and hopefu…
In this talk, we will take apart the serverless architecture for a social network, Yubl, and discuss how we implemented different features using serverless technologies such as Lambda - search, user recommendation, news feed, push notifications, business intelligence and so on.
We will discuss the strategies we employed to migrate an exist…
At not so distant future human race will be able to make a colony on Mars, and we'll need a stable communication between the planets. Interplanetary internet works differenly (ie. 3.5 to 22 mins delay between planets), so what from today's technologies can we use to build an interplanetary web app?
Unison is a new programming language and platform. This talk zooms in on just one aspect of Unison: its support for building large-scale, distributed systems. As a running example, Paul will work up to the code for a simple search engine, written with minimal code, and discuss how it's all done.
One of the greatest challenges of building a rich UI is keeping track of all that is changing: incoming touch and mouse events, new data from your servers, animations, and more. Here we propose a new way to tackle this challenge that is as old as computing itself: don't let anything change in the first place. Come learn about how to build rich a…
What's the difference between a functional team and a failing team? How do we make a failing team functional, and a functional team great? Let's talk about layers of communication, why outcomes are more important than process, and how to figure out where to begin - and whether you should.
What if payments were natively supported in the browser? This is the goal of W3C’s Web Payments Working Group first deliverable: the Payment Request API.
Now implemented in most major browsers and with the Payment Handler API on its way, you’ll never think of payments on the web the same way. We want that by the end of this presentation, …
You probably work on a distributed system. Even if you don’t yet face a serverless microservice architecture using fancy NoSQL databases, you might simply call some remote services via REST or SOAP. This leaves you in charge of dealing with consistency yourself.
ACID transactions are only available locally within components and protocols …
Duretti Hirpa is a senior engineer on the backend engineering team at Slack. Currently, she's working on the growth team, though she's also spent time on the Slack Platform team - making it easier and more intuitive to build applications on top of Slack. She's constantly thinking of ways to humanize engineering - there's strength in the soft ski…
This talk will focus on the working being done by the CSS Houdini Task Force to provide us with the ability to extend the browser's render engine with JavaScript, above and beyond simply running JS on the main thread or a web worker. This talk will focus on the following:
- What is the Houdini Task Force?
- What types of thing…
There's a satisfaction in creating something.
Taking a concept, chat or sketch and being able to implement something that people can interact with is one of the wonderful things about the area that we work in.
I'll talk about what it means to be creative, it's benefits, and how we can optimise our approaches to building software & …
Think about the new tools that are taking over the Javascript ecosystem: Babel, Typescript, Rollup, ESLint, and smarter IDEs. What do they all have in common: they all take Javascript source code as input, and some emit Javascript code as output. This talk will be a deep dive into the basic building block all these tools share: Transforming your…
Microservices are an exciting idea, but it’s hard to see how to put them into practice until you’ve seen them in the real world. In this talk we’ll see a real-world microservice architecture, looking at the content pipeline behind BBC Newsbeat.
At Rovio (the creators of Angry Birds) I worked migrating one of their products to serverless. The product is called ToonsTV and is a video on demand platform. The idea of the talk is to share my experience leading this change. How we trained the team, how we solved some of our problems, some serverless patterns we used, experience on testing an…
All the modern browsers support native JavaScript modules, and it’s a perfect time to start using them, which will change the way we are bundling the JavaScript, and how the code is executed. We will understand the native modules features, performance details and lazy loading JS modules techniques.
Come see a demonstration on how to interact with an open-source brain-computer interface via JavaScript. Alex has been working with the OpenBCI team in order to visualize and interpret brainwaves in the browser with Angular. Find out how your thoughts are captured and how to get involved in the NeuroTech community.
Distributed systems, microservices, containers and schedulers, polyglot persistence ... modern infrastructure is ever more fluid and dynamic, chaotic and transient. Likewise, individual engineering roles can no longer be broken down neatly into software engineers (who write the code) and ops engineers (who deploy the code (and buffer the conseq…
The case for Progressive Web
The mobile web is slow and we've become accustomed to developing large and complex applications with powerful desktop and laptop machines. 73% of mobile internet users say that they’ve encountered a website that was too slow to load. The world of front end development is evolving continuously with more clie…
Tor is an important tool providing privacy and anonymity online. This talk is going to present what Tor is and how it works. We are also going to present new features that have been developed lately. Finally we are going to explain how we can build applications that use Tor.
The Internet is a DISCUSSION. The Internet is MANY-TO- MANY. The Internet is CONTROLLED BY ITS PARTICIPANTS. The Internet is a GREAT DEMOCRATIZER. And if I CAN'T CONTRIBUTE, then it DOESN'T COUNT.
How do we make apps that enable full participation at any edge of the network, whether the developing world, a totalitarian state, a fut…
Internet of Things” (IoT) is a term to describe how physical objects are being connected to the Internet so that they can be monitored, controlled or interacted with. The problem arises when devices only work with respective standard or protocol which limits users choice of using various devices.
The future of connected devices should be …
The modern developer is expected to ship features as fast as possible while maintaining world-class uptime and availability. Often times these two goals can feel challenging even at odds with each other. In this talk I will share the game-changing strategy, tools and disciplines necessary to achieve breakneck innovation velocity without sacrific…
The gap of what the web can do versus what must be done in a native application is really small these days.
I'd like to show that progressive web apps (offline support, push notifications, manifest, etc) are just the beginning. We can leverage newer hardware and networking APIs to build all sorts of Internet of Things types of applicat…
Building User Interfaces is hard. Building them in 3D worlds (virtual reality) is harder. Building them mixing 2D and 3D elements in a web browser is literally a technology frontier project. Doing it maintaining the API and developer friendliness of ReactJS... is what I'll show!
The times we live in have made it necessary to disrupt mainstream social networks. In this talk, Andre will present Scuttlebutt, a decentralized social network protocol from the Node.js hacker community. We will see how it works from a programmer's perspective, and specially how to build social apps using it. With fully offline browsing, new typ…
When the browser puts pixels on to screen, there’s a lot of work happening behind the scenes.
While it’s well known that “GPU accelerated” is good for silky smooth animations and apps, it’s surprisingly hard to figure out what that really entails and means. This talk is a tour of what goes into painting pixels onto the screen and what we c…
A lot of things have been said about WebAssembly inside of the browser; after all, that's why it was originally created. But a new case is emerging as well, and that's WebAssembly on the server. More specifically, we're seeing a rise of support for WebAssembly in serverless application platforms, combining two brand-new technologies together. We…
SVGs, with their potential for high-quality and performant graphics, have myriad uses on the web. By now, a lot of developers are aware of their practical uses, such as small and accessible icons, or illustrations. In this session, though, Sarah will go beyond typical use cases. She’ll cover a few practical things like styling SVG icons like typ…
What if instead of building your own mental model of how data flows through your application, you could actually see the data flowing in real-time? In this talk we will explore functional and reactive streams as a building block in JavaScript applications, with tools like RxJS, Cycle.js, xstream, which enable DevTools from the future.
How do you take the biggest commerce platform in the world, with hundreds of thousands of shops and make it run out of multiple locations? We'll go through how Shopify went from one datacenter, to a passive disaster recovery site all the way to to running shops out of multiple datacenters concurrently. The talk will cover how we move shops betwe…
IoT is too often discussed in the abstract. What does it really mean to build a second internet? What does it mean to create an internet out of distributed, sensing machines which talk to each other?
In this talk, I'll show you how I'm using connected devices and distributed sensor data on the energy grid to fight climate change.
Epistemology is the branch of philosophy concerned with the theory of knowledge. It deals with question such as how we know what we know? How do we justify it? What is the rationality of belief?
A software developer debugging a production bug is asking very similar questions. The tools the philosopher has to answer those questions can ins…
The JAMstack is empowering the Microservice and distributed architectures in ways that have not previously conceived. Leveraging this approach puts time back into the pockets of developers and enables to the things they want to do, which is code. Join Brian in walking through how you can leverage this new tool in creating action packed workflows…
JavaScript decorators were created in 2014 as a collaboration among the JavaScript ecosystem, and you've been able to use them in TypeScript and Babel. But they didn't make it into the JavaScript standard yet: not ES6, or any of the later versions, so far. We're working on standardizing decorators in TC39, the JavaScript standards committee, but…
This talk is intended for all developers, beginner to advanced, and provides gentle explanations to two otherwise confusing (but essential) computer science topics: finite state machines and statecharts. It will focus on using FSMs within any framework (or no framework at all), with an emphasis on statecharts - an extension of FSMs that simplifi…
Client hints are both server headers we can detect on the back end and objects we can reference in JavaScript (e.g., navigator.connection) that application developers can use to tailor application resource delivery to accommodate users’ devices and preferences for reduced data usage.
In this talk, we’ll cover the various client hints avail…
Software deals with complex control flow mechanisms like callbacks, promises, events, and streams. Chosen solution has a deep impact on your code. Things can be simplified to a single abstraction since the underlying problem to all of this is the same, with CSP and the concept of channels.
Do the last step(s) and bring infrastructure management into CI/CD processes. We know what to do with the code (build, test, deploy), but we are not always comfortable putting infrastructure changes inside CI/CD pipelines. Why?
During this talk I will explain what are the most common scenarios of integrating Terraform and Packer into pipel…
Web pages are dead, very dead: long live apps! The web is the land of the paradigm shift and Frontend Developers are mutant ninjas. Today's frontends embody the UI, the View Logic, some Business Logic and some Storage. This is a Full Stack on its own, on the client. Modern, component-oriented UI frameworks, together with state-action paradigms (…
Imagine the future where an intelligent assistant suggests you places you could visit on the weekend. And plans the whole trip for you as well. The bot already knows your preferences and previous experiences, and makes you an offer you cannot refuse. Won’t that be wonderful? This is the near future.
Help! My app bundle is 5MB! My users are angry that my app is so slow! It’s easy to forget that performance matters when we are under pressure to deliver features quickly.
We'll talk about bleeding-edge topics in front-end performance such as dual-bundles for modern browser transpiling.
Come learn how to deliver better user experien…
We talk a lot about how to animate on the web, and what’s possible in browsers today, but where is animation heading? In this talk, we’ll start with some bleeding edge techniques such as native-like page transitions with nuxt, but then we’ll push it further. The intersection of health and animation with biofeedback sensors and Vue, the future of…
The news about DDoS tends to focus on attack size with bigger being scarier. But the reality is different. In this talk I'll look at the vast range of DDoS attacks that Cloudflare sees, explain the trends (including IoT based attacks and when really happened to Dyn) and how to prepare for DDoS.
The Physical Web is a very simple idea: find URLs around you easily. However, this unassuming idea unlocks a whole new open ecosystem. As the web gets better, it makes the Physical Web look brilliant, but honestly, it's the web that's being awesome, the Physical Web is just getting a free ride. This talk will discuss some of the amazing concepts…
The "serverless architecture" has become massively popular this year, and for the right reasons. It’s zero-administration nature and pay-per-execution pricing model have removed the major limitations preventing developers from provisioning infinite amounts of logic. Here we chat about the state of the serverless architecture, the vastly intric…
Passwords are a problem. We reuse them. We forget them. Worst of all, they’re easy to steal.
The Web Authentication API is now available, providing a Javascript API to integrate with strong authenticators like biometric readers, making a password-free future more possible. Let’s learn how!
In this talk Suby will discuss the history a…
Jafar Husain is Netflix's Cross-Team Technical Lead and has 16 years of experience in the industry. He's currently a member of the TC39, the Javascript standards body designing the next version of JS. He specializes in building web servers and clients using functional reactive programming, and was the first user of the Reactive Extensions Framew…
There was a time not long ago when we used relational databases for everything. Even if the data wasn't particularly relational, we shoehorned it into relational tables, often because that was the only database we had. Now many NoSQL databases exits: Document, realtime, graph, column, but that does not solve the problem that the same data is…
N/A
Unikernels, built with library operating systems, reinvent earlier ideas for the modern era, improving the specialisation of apps. In fact, there is a continuum of specialisation, with general purpose OSs at one end, unikernels at the other extreme, & containerised apps in between. All these options give developers more freedom & choice over how…
Learn how to use HTML5 and Unity together to create an isomorphic application for games or or other visualization-intensive applications that can be run in the browser, desktop and even mobile devices without sacrificing the most powerful aspects of native environments.
The Unity Video game engine provides developers and designers with an…
Story of how a small company in Azerbaijan used ClojureScript + React Native to launch iOS/Android apps to its one million website users.
In this talk I will demonstrate, that by using modern tools you don't need to have a large team to rapidly develop high-quality iOS and Android apps. I will provide a criteria that we used to evaluate ou…
2016 has brought the launch of consumer-level desktop virtual reality technologies for the first time, and how we experience data and information is shifting into 3D. Today's web technologies are shaping the future of the VR web and bringing immersive experiences to support cross-platform, device-agnostic virtual reality experiences right in the…
The mental model for building for the web largely hasn’t changed in the last 20 years, but we’ve incorporated complexity, richness, grown our community a thousand fold, and scaled to billions. This year the web turns 30, and we look back at the steady march forward of better abstractions, better syntax, and better mental models that brought us h…
Since 2016 the virtual reality technology has been a rising trend and many headsets are now out in the market with each of them having their own wonderful features. Proprietary tools for creating VR experiences have their own requirements for ecosystems, controllers, software installations etc. And the simplest of applications needs a lot of com…
WebAssembly is a new portable, size- and load-time-efficient format suitable for compilation to the web. It's efficient, fast, portable, and safe—as is the rest of the web—and the devil of how this is done is in the details. Let's walk through the diverse tech stacks which makes this possible, from high-level languages such as C++, to compilers,…
This talk will look at how WebXR can be used to design and test user interactions and interfaces. WebXR has made the creation of XR more accessible to developers and user as it JavaScript can be used to create XR projects which can be viewed across multiple platforms. This accessibility means that designers and artists have a way to easily try o…
This year AlphaGo shocked the world by decisively beating the strongest human Go player, Lee Sedol. An accomplishment that wasn't expected for years to come. How did AlphaGo do this? What algorithms did it use? What advances in AI made it possible? This talk will answer these questions.
Operational success of software is taken for granted while failure is frowned up. As technology gobbles up the world around, it is important for technologists to be able to understand the human element in dealing with major outage and for learning operational techniques in making the experience less painful. The aim of this talk is to explain in…
HTTP2 is already here, but apparently we are not using it. Learn why it's awesome. How we can boost website performance up to 50%. The missing pieces of the puzzle? The glue between the apps and frameworks to the webserver, for features like server push and getting the asset pipeline out of our way!
May of us remember peer-to-peer networking from the days of Napster, file-sharing, and Metallica lawsuits. Was that all that p2p was good for? What if we used it to host Websites instead? In this talk, we'll look at how p2p can be applied to the Web and what benefits we can gain from it: from sharing costs, to data privacy, to open source, and b…
Automation has come a long way in assisting with regression testing efforts. Teams worldwide are successfully running hundreds of functional regression tests at every check-in. While this provides a great source of confidence, critical regression bugs are still missed using this approach. That’s because these tests can only assert on what their …