Hi, I’m Chris. I’m a Staff Solutions Architect and full-stack software developer based in Alma, CO. I love learning and am always on the lookout for new ideas, techniques or tools that will help me build better software. There are three main principles that I currently use to guide my work:
-
Avoid incidental complexity
It’s easy to introduce avoidable complexity into a project by picking the wrong tool for the job. I aim to expose myself to as many different approaches as possible without becoming a magpie developer. Using concepts such as static types, functional programming and immutability has drastically simplified the code that I write.
If you have to build a back-end I particularly like F# for its simplicity, practicality and low-ceremony approach to writing software. Projects like Suave and Giraffe make it super easy to spin up an API using F#.
It’s always worth asking if you can just skip the traditional back-end web server. Tools like serverless functions or Hasura make it possible to build fully dynamic web pages without ever having to configure a web server. This is a huge win for your productivity as a developer!
On the front-end, I’ve found that using the Jamstack architecture and tools like Tailwind CSS has been transformative. These tools allow you to iterate on ideas at a rate that could scarcely be imagined a few years ago and they do it by eliminating unnecessary complexity. This approach works even better when combined with the serverless techniques mentioned above.
-
Don’t hide from real complexity
Some things are complicated because they really are complicated. You can try and hide from this but this normally comes back to bite you. Building software in a modular way and finding the right abstractions is key but the best way that I’ve found to tame real complexity is to model it as precisely as possible; finite-state machines and statecharts are my go-to for this. Tools that allow you visualize your state machines, such as XState, make it much easier to model complex systems with accuracy.
-
Prioritize learning over coding
The biggest mistake that you can make as a developer is building the wrong thing. Fast feedback loops are essential and developers should talk directly with users whenever possible (it’s always possible). Find tools that accelerate the rate that you can learn about the problem space and make heavy use of them. I’ve found that borrowing techniques from domain-driven design and EventStorming can be a really quick and effective way to reach a shared understanding with your users.