Lessons Learned About Being a Software Architect By Trying to Be One
For most of my software development career I cared about how software was organized, how I had to work with it; how I had change it. I never had any formal training or courses on being an architect and, until recently, it seemed like such courses were few and far between.
Over the last few years I learned a lot about being a software architect through trials by fire. When I left the Library world and transitioned into the Justice world I had to step up my game quite a bit. During that time I learned what it took to build systems that had to work round-the-clock. I learned what it took to make disparate systems talk to each other to perform work and remain autonomous. I even tried my best to do things the way I was learning. But often times I was learning more than I could apply and at the pace work was coming at me I couldn’t rewrite systems just to apply new things I learned.
The first thing I learned was that you can’t do it alone. I knew that there was a better way to do things and I couldn’t settle for the status quo. I also didn’t agree with all my coworkers, so I went outside for help. Getting outside perspective was huge and hooked me into people who share industry best practices. Blending that knowledge with inside perspective helped me see where best practices fit into the environment.
The next thing I learned is that people probably won’t like you. Something about architects being perceived as telling people how to code leaves architects out of popularity contests. Personality also works against you too. Learning to control the personality traits that work against you (unwillingness to be flexible, “my way, no highway option”) and helping people discover best practices in the way they need to learn will help. Both of those take time to do and you can’t reach those goals all at once. The architects who learned this lesson are some of the best and I am fortunate to know a few of those architects.
You have to be willing to constantly question yourself. Software architects have to make a lot of assumptions. Part of the key to success is to get good at making good assumptions. Another part is to know when to question yourself and when to be OK with something. These two attitudes can work for you and against you. You’ll know when something is as right as its going to be.
Software architecture is personal and you have to be open to exposing how you think to others. This is hard. Especially when someone who you think is not capable of objectively reviewing a solution reviews one and gives you negative feedback. Dealing with that requires more interpersonal skills than anything. Be prepared to make mistakes and see lesson #2.
The final lesson I learned is that you will never be done learning and it takes small leaps to make big ones. I was introduced to OO patterns by a Java programmer. I was clueless. As I studied those patterns and the concepts taught, I struggled to apply them in an OO world. But in the SOA world things started to make sense. Encapsulation. Abstraction. Loose-coupling. Suddenly concepts and patterns made sense at the OO level. For me to learn I had to see the problems in context. My context was SOA and the bigger picture. When it all clicked, that “a-ha” moment helped me make leaps that I never imagined possible.
For a few years now I have considered myself an architect though I have never had that title from an employer. A good friend and mentor told me that the way I worked and what I did made me an architect. He had that title once, so I felt ok taking that advice from him.
The truth is, every developer is a little bit of an architect. Some of us just care a little more than the next guy.
Comments are closed.


January 14, 2010 - 3:54 pm
Chris
All good points. On ‘people not liking you’, in my experience this is the exception and not the rule and usually a position taken by people who are hell bent on proving themselves to be the smartest person in the room. I too have seen that position reversed in people by practicing some of the things you recommended.
Have you read the book “97 things every Software Architect should know”? I’m about a quarter of the way through and finding it a very interesting and entertaining read and already would recommend it.
January 14, 2010 - 8:15 pm
Simon,
Agreed on the exception on people not liking you. That is highly dependent on personality and how you approach situations. I did not do so good back when I started down this path. Getting better at it!
97 Things is a great book, I have been watching the Wiki and read up from time to time.
January 21, 2010 - 3:48 am
Interesting topic.
I believe that good decision came from a good balance of owning the operational knowledge and long term vision.
Unless an architect can predict everything upfront with little room of failures, most of Architects should be with the team, attend stand ups, take part of code reviews, take on critical user story/work items/task, do unit test, not break the build as much as the next guy. More importantly, he is responsible for sharing the vision and long term business goals with the team.
A good idea IS a good idea despite who had thought of it, at times, those might not come from the most senior person in the room. It is up to the culture of the team to empower people to own the problem together and be as caring as the next guy.
January 21, 2010 - 7:25 am
Hi Ronald,
Thanks for the feedback and glad you enjoyed the post. I agree with the architect being with the team. I’m a fan of Simon Brown’s work (http://www.simongbrown.com/) because he advocates hands-on architects who not only help structure software but work with the team to make sure it does what is needed. In my experience working with people that are more practical and hands-on creates better results.
Your second paragraph sums it up really well!