November 16, 2022 by Christopher Sherman
When writing CloudFormation templates,
it is not uncommon for the documentation to state a property’s data type is
JSON. If you write your templates in JSON, this is no obstacle. However, I prefer
to write my templates in YAML, so I found myself looking for a toJSON
intrinsic
function to which I could pass a YAML object. My search came up empty, but I
did uncover a couple of ways to satisfy JSON property types while keeping my
templates readable.
October 10, 2022 by Christopher Sherman
Building quality software involves blending business, engineering, and artistic expertise to create a product. Beautifully-written code is not enough. We need a process for organizing the team, identifying the job to be done, and designing, implementing, and maintaining the product.
September 1, 2022 by Christopher Sherman
Migrating workloads to the cloud is not without risk. The first step is developing a plan with buy-in from stakeholders across the organization. The team should be comprised of executives, managers, and engineers from the Infrastructure, Operations, and Software Engineering teams, as well as the end users of the services being migrated. Before going forward with a cloud migration, we should define migration goals and ground our plans in hard metrics. This allows us to make data-driven decisions about migrating to the cloud.
August 18, 2022 by Christopher Sherman
Cloud-native architecture is a methodology for building, running, and updating software products in a way that supports speed, safety, and scale. Rather than building a monolithic product on a dedicated physical device, we create smaller, modular services distributed across physical devices, i.e., microservices. Services call one another over the network, and we combine services in a modular fashion to create products.
June 20, 2022 by Christopher Sherman
The time it takes the browser to render meaningful content is one of the most important aspects of user experience. To paint initial content, the browser converts HTML, CSS, and JavaScript to pixels, a process known as the critical rendering path. The critical rendering path has four steps (MDN contributors 2022a):
June 9, 2021 by Christopher Sherman
“A design system is a set of interconnected patterns and shared practices organized to serve the purpose of a digital product.” —Anna Kholmatova, Design Systems (2017)
These are my notes from Anna Kholmatova’s book, Design Systems (2017), a great guide for creating a design system for digital products.
June 7, 2021 by Christopher Sherman
Low-code solutions have limitations that custom applications do not. The most important limitations are performance, flexibility, and user experience. Secondary—but still important—considerations are third-party services integration, vendor lock-in, and product discontinuation. That said, low-code solutions do solve real problems, particularly those less affected by the traits just listed. You can visit the website of any low-code solution to hear its praises, so I will focus on the distinction between low-code and custom applications, pointing out where custom applications may be the best avenue for solving a problem.
May 28, 2021 by Christopher Sherman
Angular’s forwardRef
wraps the provided class in a closure, allowing the provided
class to be updated via memory reference once it is interpreted.
We use a forwardRef
when we need to provide a class before that class is actually
declared in code.
May 12, 2020 by Christopher Sherman
Ivy is the compiler and rendering pipeline that converts Angular templates into code the browser renders. Ivy introduces several improvements over ViewEngine, the previous compiler and rendering pipeline. Below, I highlight the most noteworthy advances.
April 6, 2020 by Christopher Sherman
As web applications grow more sophisticated, we need strategies for breaking down their complexity into manageable chunks. Micro Frontends is an architectural pattern for creating large applications out of small applications while maintaining a consistent user experience. This approach enables us to build, test, and deploy individual chunks of functionality. The composability of micro frontends results in reduced complexity while more effectively scaling our most important asset: people.