Design abstractions

In programming abstraction is a core development practice. The purpose is to separate commonly used components from specific use cases allowing the re-use of code. However, I see abstractions as more than this. Great abstractions are the distillation of an ideal and can be formed with just that ideal in mind, devoid of specific use case assumptions. Starting from a use case and abstracting from there is not unlike solving a maze backwards. The best ideas start from a blank slate with lots of research behind it. Starting with an abstraction allows you to research and explore with that abstract solution grounding your explorations. Common examples are modern preprocessor-based grid systems. They are simply a distillation of how grids work and building on top of them allows for easy modification later on. Instead of hacking through values or using Photoshop variables can be changed that effect your layout in a real browser in real time.

As a designer, I think this is what draws me to code the most. There is something about abstract design decisions that are just so fascinating and in creating abstractions for design solutions I have learned so much. When creating the Singularity grid system I dug into numerous design and layout books from different schools of thought to find common threads that could be included. The more knowledge I absorbed, the better Singularity was becoming and it proved to be an incredibly powerful language for expressing layout. With a simple abstracted language you could easily create not only uniform but compound multiple grids and build layouts on ratios. Additional layout modules could easily be added in as needed. Color-schemer has a similar story and I am still in the knowledge gathering stage learning about the physics, biology, and sociology behind color and how we as humans perceive color. These tools are code abstractions, but they really are the distillation of knowledge and process. Using abstractions in this way has helped me explore not only obvious solutions but empowered me with the knowledge to look beyond them.