24 November 2011

Agile Architecture

There are two core principles to architecture in an agile environment which worked for me real good :

  • Document only small slices of the system one at a time at the time you need them
  • Be as specific as you need without going into too much details
A typical business system, one that is software intensive, is a really big and complex. When developing one such system it is impossible to document everything at once. What I do is to create a general corner stone architectural specification that defines the core architectural areas and principles of the system, a reference architecture around everything will be build and then create a series of small architecture documents (Architectural Notes or Memos) which are slices of architecture targeted at a specific system view or functionality which is developed for a first type. Architecture is a generalized specialization so such documents must convein all the information one needs to implement the designed architecture but not specialized too much in order prevent the multiple variants the same architectural areas can have. 
It is important not to design to early , but at just the right time. The goal is reduce the amount of time passed between the design creation and the implementation and to focus the architectural effort on the architecture which is need right at this moment of the currently developed sprint. 
Designing and documenting and architecture slice is one part of the whole problem, even when you create such a design at the right time with the right amount of detail the majority of the subsequent effort is spent communicating and reviewing the architectural implementation. If the implementation part is done by the architect and the senior team (such as the core of the system) a significant part of the architects effort is spent disemminating through the development team (or teams) the culture and the ideas required by the architecture design. 
Software is plastic, and programming is flexible. Event the most pure architecture can be twisted, scratched and mutated in something recognizable. The best way to insure an architecture to survive is to set up much of its essence in code and build tools which guide the developer down to a certain way of solving problems (which has its own problems , which is why architecture should be approached slice by slice and nothing is one hundred percent fixed in stone and unchangeable) and to integrate its core principles into the development culture of the development team which will ensure it gets adopted by every new team member.
Lots of teams make use of the shared tribal team identity as the only reference how things should be done by the project. This practice is spurned by software engineers, and with good reason, because software cannot be developed with tribal memory and shared culture alone, documentation must exists, tests and build tools must exists in order too enhance the human falabilities to which we all are susceptible : short memory, illness, death, holidays and leaving for a better opportunity. In its essence agile development values people over processes and interaction over rules, it doesn't mean no documentation or processes should be in place. We all are humans, and by definition fallible. Agile architecture should strive to reduce the human error by documenting and the essence of small specific slice of the system such as : grid architecture, background process architecture, form architecture, repository architecture, commenting system architecture etc.
Short is better for software developers, people will more eagerly read a ten page document then a one hundred page document. They will read it more often and learn more from it. It is also really easy to communicate a short document then a large one. Also, less errors are introduced in a short design then in a large one.
The agile manifesto reads as follows:
Individuals and interactions over processes and toolsWorking software over comprehensive documentationCustomer collaboration over contract negotiationResponding to change over following a plan

The agile manifesto clearly indicates that things on the left are more valuable then things on the right, but things on the right have a value. They are second to the things on the left, people have more value to software development over processes and tools, working software is king over documentation. But a balance must be made, without a documentation who will understand what is being developed? Without a set of class diagrams that show the core architecture for a subsystem from top to down and text describing it who will understand the code without someone guiding him through? 
Each day when I start my work I say to my self :

Your job is to enable other people to do their job better

I'm a technician and my focus is technology and the development team that works with it. I'm a software engineer by trade and a craftsman by soul and I really think only three things are important in software development:
working software, people and communication

For me agile architecture is that which maximizes those three things.

23 November 2011

13th IT PRO Meetup: Agile Architecture

On Monday 29th 2011 at 19.00 o'clock I will hold a talk for the IT PRO User group on the topic of Agile Architecture. This is something I'm  very hot for right now since I get to practice it for the last six months on a very large project with a geographically distributed team.
I will focus on my experiences and what worked best and what didn't in order to present a practical take on the topic.
You can register for the event here , there are only twenty free slots for the talk so please hurry if you want to hear me speak.


09 November 2011

ARM Assembly Language

I've started reading a great book about the ARM assembly programming language. The book can be found on-line here and is a web copy of the same book published in 1987.
Why I'm reading this twenty year old book for an assembly no sane .NET or PHP developer heard about (sure someone did, but the meat and bone of the developer population I mingle in cerentanly didn't hear about it)? The reason is really simple.
I need to learn ARM assembly programming so I can understand the code written in my Operating Systems handbook of the undergraduate Computer Science course I enrolled this year. The book is full with ARM assembly examples how different parts of a system function and I really need to know ARM syntax to fully understand the problem space. The book is of course the venerable "Operacijski sustavi" handbook from FER (2011 edition).
It is not a bed book, but its thick with text which sometimes isn't written well (I'm a published fiction author translated in four languages and published on three continents so I know when something isn't written well, mark me) and requires two readings to understand the rich and very complex sentence structure which could be written more simply if the author actually cared about the reader.

22 October 2011

Overtime, dear overtime

Everybody knows that gut wrenching feeling a person feels when he or she is told to work some overtime, expeciality if its for an undefined period of time. You, me , everyone had that feeling at some point or other. Overtime is often, and justly, negatively perceived in our industry. Yeah, you ship the product on time the client is happy, the management is happy, all those nifty forms and grids are visible and working (sort of) and the load of defects and technical debts lurking underneath are just ready to pup some one sits the next day on the product to test it.
I'm working on a large project. And I had to do large amount of overtime on it. The deal was that the majority was applied voluntary during the time the majority of the team (around eight people) were working normal hours. And I felt really great about that. I had time to refactor several times the code a wrote (I was working on the core of the middle tier system so my refactoring paid several time since we had afterwards a really small amout of defects on the core of the system) , I created Architectural Notes for system features I wouldn't have the time to do during my regular hours, I wrote unit tests and developed system features which were badly needed on the project and I grew and improved my self, the project grow and my company grew and it was all voluntary on my own time and my own schedule. I had time for my regular job, my family and my voluntary overtime.

19 October 2011

Chicken and Pigs, a chicken perspective

I was reading the Scrum guide earlier today and I've read the "Chicken and pig" story. I wasn't a new story for me since I've read it a few years earlier when I first encountered Scrum (I'm just refreshing my memory). For a long time since that first reading I tought and talked about as envisioning my self in the role of the Pig, as someone who is commented to the project and how I should not allow chickens to dictate the way the project is developed (to some degree, even chickens have their powers to make things happen). But what if I'm the chicken on some project? How should I behave?
I think respect is the most important thing. When I'm a chicken I should respect the Pigs work and try to help them in the way they will let me without causing problems for them now or down the road. It is easy for chickens to say things, but is hard pigs to live with them.

29 September 2011

How to change SVN password in Zend Studio or Eclipse

The intertnet is full of blog posts how to change the SVN password in Eclipse or Zend Studio. Unfortunatelly nothing I found on the interet worked. I've deleted the eclipse .keyring file and deleted the svn.auth folder.
Suprisingly the solution is really simple:

1. Change the perspective to "SVN Repository Explorer".
2. On the repository list right-click on the repository and then click on "Location properties..."

Thats it!

A dialog will popup, and right on the first popup you can change your SVN username/password combo.

16 July 2011

Working with a distributed team

I'm currently working as a technical lead on project with a distributed team. It is not the first time I'm working with a distributed team, but it is a the first time the team is so big. We currently have people working in five cities across three countries :

  • Labin, Croatia
  • Pula, Croatia
  • Slavonski brod, Croatia
  • Beograd, Serbia
  • Skoplje, Macedonia
You'd think it would be hard to work with such a distributed team, which totals up to ten involved people but it is not. 
I really takes a lot of communication, some organization and proper tools. The two basic tools are :
  • Skype
  • Teamveiwer
There are two types of skype communication : written and verbal. The written communication is for large meetings and team notices. We have created a team chat where all team members can share information and where all the big meetings occur. 
The most important meeting is the daily standup which is done exclusively in written form and can be done in under ten minutes. The trick is for each participant to write her daily report five minutes before the meeting (which is at 9.00 o'clock each day). The report is written using this format:

YESTERDAY:
- #1 thing done yesterday
- #2 thing done yesterday
- #3 thing done yesterday
etc.

TODAY:
- #1 thing will do today
- #2 thing will do today
- #3 thing will do today

ISSUES:
- issue #1
- issue #2

This enables us to track the project progress, to catch early important issues and problems. The team stand-up is usually followed by an hour and a half of one on one vocal meetings where those daily issues are addressed and solved or kicked up the ladder.
Team viewer is another great tool, it works both on windows and linux (which is great since we have both in our team) and enables one or more people to virtually sit at the same machine and work which is great for doing problem solving, peer reviews and distributed pair programming.
One great tool I discovered is the Architectual memo or note, which is a sketch with UML diagrams and some text describing a architectural solution of a part of the application (Grid system, Form system, auto-complete system etc). It takes me about and hour or two to write once I get the idea right and then I can send it to a team mate discuss it with her and then watch it being built.