You can code it, I can help!

Winnipeg Code Camp 2009

Wow! What a day! We started around 8 AM with breakfast and at 9 started the presentations. I did mine around 10:30, I think it was pretty good (no one faint, or run from the room screaming). The audience was great, made great questions and laughed (utter kindness) at my bad jokes. I want to thank everyone that was there, and D'arcy for inviting me. Here is the presentation PDF presentation, the source code Demo Code (start) and the source code complete with all the tests Demo Code with all the tests. The video is still to come :-)! Comments are welcome!

The Road to Be an Architect

After the TDD presentation someone asked me about what should he do in order to become a Software Architect. Here is what I think. First of all, I would say that you have to be sure that you would like to be an architect, and for that we have to agree on an architect definition. An architecture in software development can be considered a collection of different components, each one with a particular role, and the interaction between them through interfaces.

Therefore, an architect is responsible for defining the best architecture in order to solve the problem at hand. In order to do that the architect should have technical roots and technical acuity to grasp technical issues and collaborate with the team to solve them. The architect will have the global view of the system and would be responsible of identifying the major issues that have to be addressed to avoid failure.

An architect has to be close the developers and able to answer questions and provide guidance to the rest of the team. He has to be fond of writing code and familiar with the technology the team is using. A good architect will be a combination of being a excellent technologist, strategist and politician.

The difference between the team leader (or lead developer) and the architect is the scope and the responsibility. The architect has a broader scope that includes interaction between different components, security, response time, etc.

Many times the architect role is considered a "promotion" or the next step in the hierarchy for a lead developer. But that may be a mistake because unfortunately not all the great developers or leads have the broad talents required to be an architect.

So, what should we do to achieve such a worthy goal? Here is a (mixed) list of subjects to learn and practice (not exclusive, just a starting point):
  • Different architectures: Which well known architectures are available?
  • Security: How to secure applications and systems, which options are available, benefits, etc.
  • Concurrency: How to run process in parallel? Implementation, Benefits, drawbacks....
  • Communication and Services: Why be service oriented? What kind of services are available?
  • Testing: TDD, functional testing, how to write scripts to test web or desktop apps.
  • Storage: Which databases or alternative methods of storage are available?
  • Development methodologies: Which ones are available? Why should I use one instead of the other?
  • Agile planning and management: How does it work? What is the difference with classic management?
  • Source Control Management: SVN, CVS, GIT...
  • Continuous Integration: What? Why? When
  • Development platforms: Rails? J2EE? .NET? GWT?
  • Politics: How to be politically correct and identify managers and customer needs.
  • Communication: How to communicate with your team, managers and customers effectively.
  • Requirements: What should they look like? When is enough?

Sometimes, architects specialize in one technology or framework (i.e: Web Services Architect, .NET Architect, Testing Architect). I think is natural to have more experience in a particular technology than other but that doesn't mean that you should ignore the rest. Not always the job you are working on will help you to develop or to grow towards being and architect. That, I'm afraid to say is up to each of us.

As any software professional you have to research, read books, blogs and try to meet others with the same goals. Keep your information up to date, find tendencies, success stories, antipatterns (patterns to identify failure) and guidelines.

Here are some books I like (see the link for the full information) and think can be helpful: And here some blogs that I like:

There is no certified recipe, you will find all kind of architects with many strengths and weaknesses. As with any other role, try to find architects that inspire you, people that you respect that will help you to keep your spark alive. Follow them in their blogs, books and conferences. They would lead you to other great professionals for sure.

Here are some of mine:

As a closing remark, keep in mind that is very important to work supporting your team and whatever you do don't become a "Seagull architect".

TDD Presentation Postmortem

I did the presentation, was pretty good! I hope everyone enjoyed it as much as I did. The questions were pretty good and we had a nice chat about Behavior Driven Development and factories to generate random values. Here is a video I recorded with the presentation: TDD Presentation video. Thanks to all the participants! See you soon.