Justin Garrison
February 15, 2022

Making it look easy - 123dev #59

Posted on February 15, 2022  •  3 minutes  • 499 words
A goat effortlessly climbs a wall


Knowing how to debug

Writing code isn’t too hard. Writing code that works is difficult. Writing code that does what is intended on the first try in all circumstances is nearly impossible. One way to get from writing to working code is through testing and debugging.

There are lots of ways to improve your speed and accuracy when writing code. Some people only choose statically typed languages like Typescript and Go to catch errors at compile time. Others prefer test driven development and IDEs that assist in surfacing errors early.

Using helpers can make writing code look easy and removes a lot of mundane tasks computers are well suited for. No matter how you get to correct functioning code there’s still a lot to consider for availability and performance.

Software architecture

Running a local app is very different than running a website at scale. Running a web app requires architecture considerations that can optimize for lots of different things (e.g. latency, throughput).

If you run your app with the wrong architecture you can easily take good code and make it completely unusable. Locally optimizing can solve parts of a problem, but unless you understand the whole system you cannot guarantee your changes will have any impact.

Microservices is an attempt to decouple components and allow optimization in many different areas. This can but useful but makes it much harder to optimize the end-to-end system.

People who are experienced with different architectures make running reliable systems look easy. They often have a indescribable sense for what architecture should be used. Years of battle testing and outages gives them the ability to make it look easy.

Sometimes a print is the easiest way to figure out why something isn’t working. Other times—with UI elements—a big red outline is the easiest thing you can do.

[tweet https://twitter.com/eyeshreya/status/1492022241168556032 ]

“Platforms” are what infrastructure engineers are building and developers want to use. In reality what most applications and developers need is templates and defaults.

Templates can be generated from the client or on the server and Efe has some great insights about building a client side “platform” with AWS Copilot.

Thoughts on client-side platforms | Efe’s Blog This post explains the motivation for client-side platforms by situating it against components and managed platforms, describes challenges with building such systems, and then lists design guidelines to tackle these challenges.

If you want to optimize your architecture you first need to know what types of architectures exist and what benefits they have. Talescale has a great blog describing different options and why they picked some of the architecture they did.

Modules, monoliths, and microservices · Tailscaletailscale.com What is a microservice? When are microservices a good idea? Lately, I get people asking me when microservices are a good idea. In systems design explains the world, I talked about big-picture issues like second system effect, innovator’s dilemmas, and more. Can systems design answer the microservices question? Yes, but you might not like the answers.

Follow me

Here's where I hang out in social media