Yesterday I was fixing a form for a website I didn’t build. Another team built it sometime in the past, using HTML and PHP. My first task was figuring out why the form wasn’t working intermittently and then to fix it. Intermittent issues are frustrating by themselves but get even more so when you have no idea which parts of what are doing what actions and have to dig through the code to figure it out. Every implementation of sending email is fundamentally the same, but that still leaves a huge opportunity for different implementation choices.
This incident made me realize a part of my preference for building websites that feels contrary to my usual philosophy. Usually I want to control everything and that control generally means building components myself and keeping them on my own server. But I don’t want to build form submission components. I don’t want to run PHP or any other language on my server if I can help it. I don’t want to slow down my site with any of that complexity, and I don’t want to have to worry about the additional attack vectors that enabling a server side language or database create.
It’s weird to me that I don’t care about having 100% control in this situation, and I’m not sure if I can define what is different between this and the situations where I do want control. Maybe it is because the components are simple and fully contained which makes them easy to just plug into everything else without cross contamination.