Monday, July 22, 2013

On Architecting: The Books



Times have changed since I started my career back in 2001 as a lowly Programmer Analyst intern. Back in the day, you could tell what skills a developer had by looking at the small library of books on their desk. I can still remember having to flip through pages of a 400-500 page book to figure out how to write a database connection string or how to read text from a file. It always seemed to me like I would spend half of my time thumbing through books to figure out how to do a particular task.

Nowadays, I just about Google everything (sorry Bing). Mastering the art and science of building the right search terms is just as important as knowing how to code. I still have books, of course, but rarely do I ever need to use them since everything I need is usually a web search away. Blogs, articles, and forum posts consist of the majority of the content that I use in my daily research. The kinds of resources are much easier for me to parse through instead of an exhaustive book. Plus, I can get access to most relevant content for free online, whereas you have to shell out at least $40 bucks for a decent tech book.

Yet there are a few books that I believe every architect (or developer) should own. Whether you've been coding for three months or three decades, these books serve as a solid foundation regardless of your programming language of choice (though these books mostly cater to the Microsoft programming languages).

Programming Pearls (2nd Edition)
This book has nothing to do with .NET and has been around for decades, but it is an incredible read. What I love about this book is that it was written during a time when computers were slow and were so meagerly resourced that developers had to pay attention to good algorithmic design (nowadays, developers usually get away with writing sloppy, resource-greedy code on beefy machines). Most problems that we will encounter in code will be solved by the building block solutions in this book. I highly recommend it.

Code Complete: A Practical Handbook of Software Construction, Second Edition
This is a great resource for understanding the fundamentals of constructing software applications. It covers topics like how to build high quality functions and classes, code documentation, and a garden variety of software testing strategies. It's required reading at Microsoft, though I think it should be required at any company.

Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries
Whether designing a public facing API or a common framework library that can be reused across applications, this essential book will help developers understand how to properly design classes and interfaces for better usability and maintainability. This book provides great insights into the design of the .NET framework namespaces and libraries and provides extremely valuable information on the .NET data structures and interfaces.

Microsoft® Application Architecture Guide, 2nd Edition (Patterns & Practices)
Of course, I have to have a basic go-to resource for basic fundamentals. Microsoft developers will take special interest in this resource of course, but it is generic enough to satisfy the needs of architects from any language background. The full book is available online at MSDN, but you can also buy it in paperback form wherever tech books are sold.

Monday, July 8, 2013

On Architecting: The Soft Skills

Carrot + Stick < Love

As much as some of us would rather avoid this, all architects will have to employ the soft skills from time to time. Soft skills are those abilities that are employed in interpersonal relationships such as communication, leadership, conflict resolution, et cetera. Real architects will have to demonstrate mastery in one or more soft skills in order to be effective at their jobs.

I think the most important soft skill an architect can have is the ability to communicate effectively. An architect will use this skill to gather requirements from business users, relay the technical vision to developers, and provide valuable high level information on the progress of design and implementation. Good communication will involve knowing how to speak clearly and concisely to both technical and non-technical audiences. It will also require an architect to be a great listener so that they can understand problems that need to be solved and mediate between parties during conflicts. An architect that can't communicate effectively is as useful as an owner's manual written in a foreign language.

Another necessary soft skill that a good architect must master is persuasiveness. Because architects are often responsible for driving the technical vision of the team, architects must be able to convince other people to understand and follow that vision. I believe that persuasive leadership begins with humility and servitude. A good architect will demonstrate the ability to empathize with developers who are more junior and may require mentoring. They will also know how to provide good examples for the team to follow and will take time to include individuals in major decisions so that everyone feels like valued contributors.

As an architect, not everyone will agree with your point of view (regardless of how objective your analysis may be). When arguments get heated and opinions strong, you must be able understand all points of view and build consensus amongst all parties whenever possible. Facts and research should be used to argue positions effectively, but make sure to be empathetic with your audience. The trick is to avoid compromising what's right for your users while also navigating diverse motivations and political situations. An architect might even have to negotiate in order to achieve a peaceful resolution to an issue. Whatever the case, you must be able to resolve conflicts amicably in order to move the needle forward for your client or customer.

On Architecting: Introduction

Plan drawing

Today I am starting a new series that I'd like to call "On Architecting". The goal is to share my insights as an architect with the world in hopes of helping others discover the path to becoming a good architect. I'm also hopeful that I myself will also be able to learn some new things through the process of sharing my knowledge with you.

Over the next couple of months, I plan on releasing a new article every couple of weeks that will highlight various topics regarding the practice of architecting software. The following is a list of topics we'll cover:

  • The Soft Skills: The abilities architects need to lead projects effectively
  • The Books: A list of the most useful and recommended books in my library
  • The Qualities: Breaking down the qualities of a software system
  • The Framework: How to create and use frameworks to control quality and simplify execution
  • The Process: What to do during the design and implementation phase