06 December 2011

13 IT PRO Agile Architecture Feedback

Wow, the "Agile Architecture" talk I held for the 13th IT PRO community meeting in Pula went really well. There were around eight people from all walks (some developers, some IT guys and some unaffiliated students) . The talk lasted around an hour and a half with some talk in the between. For half an hour after the talk we had a discussion around the topic.
It was really wonderful. I got a chance to talk about a topic I really like and meet some new people. To boot I was invited to repeat the same talk on the monthly Coding Dojo (Pula) event which will be held on  December 14th at 18.30 in the Hacklab club in Rojc.
Some images from the event courtesy of Viktor Ezgeta.




I would also give thaks to the prof. dr. sc Vanja Bevanda from the University of Pula which kindly encouraged some of her students to attend the talk. I'm really glad I could talk to the student population of Pula and would like really to have more students on my talks.

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.