OutSystems BlogDev Zone

Agilists vs. Architects

Miguel and I were recently discussing an interesting presentation by Martin Fowler and Rebecca Parsons on engaging the Architecture team into your Agile methodology.  The presentation is titled “Agilists and Architects: Allies not Adversaries” and the summary points out that “As Agile becomes more accepted, concerns from architecture groups are increasing. Traditional ways that architects engage with development groups conflict with Agile methods.”
boxing 2.jpg
With architecture being a core component of the OutSystems approach to Agile application development and the role of Delivery Manager, we thought it would be interesting to share this presentation and ask the OutSystems Community how you have embraced architecture while practicing Agile in an Enterprise setting.

For example, many of you are successfully delivering a high degree of reuse while focusing on delivering individual applications.  While OutSystems’ Agile Platform provides a solid foundation for refactoring code and adjusting architecture in progress, we suspect that there are many instances where your Corporate Architecture team needed to play a role in moving the application delivery forward.

So, if you are a Delivery Manager or Architect it is time to share your experiences of working together in an Agile application development project.  How much education was required?  Did you feel resistance? What were the lessons learned?

About the author

Mike Jones

Mike is a professed 'hater' of complexity. He has been in the IT industry since the mid 80's where he learned his technical skills at EDS and Texas Instruments. He believes there is a simpler way for IT professionals to deliver business value that requires a pragmatic mix of agile methods and application development tools.

Comments

I’ve been doing software architecture work for quite some time. Both with and without OutSystems platform, and in the recent year adopting agile methodologies.
What I seem to find out is that Agile goes hand in hand with large and distributed systems architecture. By nature these systems already change a lot. We’ve been trying to reach patterns since the beggining of ages that allow for easy maintenance, no (or low) impact on performance, and most of all, accelerated development. This requires design both at a high level as well as a low level.
Yes, we’re agile. However, we cannot drop the high level design up front. We need to have a (not very clear) vision of what we are going to need. And agile copes with that. I found out, when moving to OutSystems, that you are provided with the most relevant patterns from scratch. The very nature of the platform extension mechanisms won’t let you easily fail. It also provides you a kind of Domain Specific Language approach from the beggining, that will force you to create (and all developers to follow) well defined guidelines. All the assynchronous design patterns are also easily mapped to the patform potentials in timers. When coping with external systems or a corporate company architecture definition there’s not much to trouble us as well. We’re either at SOA (which OutSystems fits like a ring) or some other kind of integration pattern, for which you know you’ll have an integration layer only for transforming/transporting/auditing/etc., that will be either implemented out of the box, or via a simple extension. All this facilities reduces the effort in defining the high level architecture, assuming you’re confortable with the usual design patterns. This way you don’t have to go very deep on the initial architecture definition. Just focus on business components/modules decoupling.
I am now in a software factory with a very large architecture basis. The only thing required is that, whenever a new requirement appears, you do an overall architecture impact analysis. If you have the above topics considered, you end up in having a new component. If the business requirement changes (and you’ll adopt it “immediately” because you are an agilist), it will probably fit in its own business component, or have relatively low impact on the surroundings.
What about when there’s a requirement that reaches all levels? If you’ve decoupling from the start the Core entities (business domain core – the ones you usually specify the DSL for) from the business components/processes on top of them and also from the integration layers, there’s no big issue. You’ll probably end up in refactoring some core processes to decouple even more, so that the new requirement fits in an isolated way.
This proved me that agile will make you good architectural choices. And if you know from the start you’re going agile, the architecture will come out much stronger and maintainable, just because of the fact that you’re thinking, from the beggining of ages it will be ment to change.
Kind regards,
Gonçalo Borrêga

Leave Your Comment