 Good afternoon. My name is Ryan Hillard and I work for the U.S. Small Business Administration. I'm here to share with you one of my misadventures. So last year I got a call for help. Things were behind schedule, people weren't cooperating, and there were lots of technical issues happening with this project. So I dug in, I had a bunch of calls, sent a bunch of emails, did some meetings, and figured out what was going on. We had an old system that had external users and internal users that had been migrated to the cloud, but the external users hadn't been taken into account. This system is a case management system for the agency to receive feedback from the public and then process it. Well, because of how our security works in our new system, we weren't going to allow external users to access it. So I sat back and I thought, hmm, I wonder if the case management system could expose an API so people could open cases from a generic form. Well, we asked the vendor to expose an API like that, and they came back with an obscene quote, $103,000. This is how I felt, and we took a little pause because we were pretty unhappy. So we went back to the drawing board and we looked at the stated requirements. We needed a form, it's got to be interactive, and it's got to move some data, pretty simple. But the situation isn't, the unstated requirements are that that form is going to live for a long time. We have limited budget to do it with, we're not going to really be able to maintain it, and so therefore it needs to be secure from the beginning. So I immediately turned to S3, Amazon Simple Storage Service, to put this on the internet without the need of a server. For the back end, we looked at AWS Lambda, the function as a service offering, and running our code using Node.js. I wanted to use Node because I wanted any web developer that comes along after me to be able to jump in and hit the ground running. So looking at the requirements, the client needs to be able to support this interaction where if someone wants to remain anonymous, we don't force them to fill out all of the contact information. Well, we could do that with something fancy, but after looking at the requirement, it was clear that the normal GetElementByID API in the DOM would get us there. So we ended up leveraging that. Another requirement is this concept of an auto-filling date. So we looked at that as well, and while you could grab a library-like moment to do that, it would be way overkill. Seven lines of vanilla JavaScript get us there. So all in all, we have about 300 lines of code making up our client. And our server is using core features in Node to prove out the concept. So we're using query string to parse the event. We're pulling out the data we need to demonstrate that we have everything in terms of contact information and case management. And then we're sending it back to the user as a proof of concept. 21 lines of Node code get us there. So I want to stop here because during the pandemic, I've been learning woodworking. This is a wooden biscuit. It's an interface, much like software development. Woodworking has interfaces and the wooden biscuit pictured on screen and I'm holding up here, it helps two pieces of wood fit well together. But what's cool about it is that it can slide back and forth and be a little dynamic and fit in where it needs to. Well, Node.js is like that in the software development world. I love Node because of its versatility and its dynamism. So once you combine Node with a function as a service offering like Lambda, you can start to do really cool stuff like take these misaligned edges and start to piece them together. So stepping back for a second, what's the maintenance cycle look like for our solution? Well, we don't actually have any external dependencies except for the managed services from AWS. And so what we really need to worry about is upgrading our Lambda runtime every two to three years when a new LTS comes into favor. John King asked this great question, what's the actual lifetime and the decision you're making? Are you taking four years to build a system that's only going to live for five? Thinking about the incredible expansive nature of the JavaScript ecosystem. I wonder if sometimes we're pulling in so much code that we can't really maintain it. Jack Kinsela asked this question, has someone written a book about one of your dependencies? If they have, there's probably so much complexity in that dependency that there's no way you're fully understanding it. Don't end up like me. This is a real picture from one of my repositories with 52 open security alerts on it. Dan McKinley finally rounds us out with this great question. How would we solve the problem at hand without adding anything new? I would opine that maybe our tool kit should look a little bit more like this and less like that giant expansive intimidating wall of 500 wrenches. So I'll leave you with one final question, which is, what's the smallest tool for the job? For us, we spent about $3,000 in labor and we didn't use anything novel. We used Node, Lambda, and S3 to solve a problem for cheaper, better, faster. Thank you so much and enjoy your open JS world. Have a good day. Bye.