Igor's Blog

"... no matter what they tell you, it's always a people problem!"

Thursday, July 09, 2009

Agile within Constraints: Identify

All parents know what is going to happen when a kid walks in a toy store. That is why, every parent knows to better set some kind of expectations and constraints (like "…you can choose a toy but only one ..., one toy or nothing.") before entering a toy store (actually any store).

Setting the right expectations and identifying all constraints can help achieve a given goal. Working within clearly identified constraints could make our solution leaner and more efficient.

Interesting example of that idea is the classical children book "The Cat in the Hat". The author of the book, Dr. Seuss, had very clearly defined constraint - the book could only use a vocabulary of 225 words, so that beginning readers could read it. Dr. Seuss used clever combinations of the 225 words and a lot of illustrations to create a very interesting long lived story.

Of course, a lot of similar examples could be found everywhere, especially in technology field. The HTTP protocol over TCP has been commonly criticized to be very constrained one and yet, exactly that constrained nature of this protocol is considered to be the main reason behind the wildly scalable and successful word wide web.

Interestingly enough, most of the advices that one could get about web application scalability would come down to embracing system constraints and rely on them rather than try to overcome them.

In fact, a constraint is a restriction on the degree of freedom you have in providing a solution. However, such a restriction on the degree of freedom could be utilized to convert complexity into simplicity. To illustrate that ask yourself how your perfect house would look like, or where you would like to be professionally in 5 years, or .... Easy questions but hard answers. The reason - prefect implies no constraints but perfect is hard if not possible to achieve. Now, if you include some constraints like the "perfect" house should not be more than 3 times your yearly salary, you would probably compromise somewhere but you would get to a solution much more easily.

Embracing constraints to help provide leaner solutions is something that I am currently excited in retrospect to Agile. In fact, this was the main difference that I discovered while exploring Lean software development in recent years. The first time when I realized that was while working with Kanban ("visual card/board"), which is an essential part of Lean Software Development and for which I would write more in my next post.

Labels: , ,

|| Igor, Thursday, July 09, 2009 || link || (0) comments | links to this post

Tuesday, March 17, 2009

URL Crawlability as Architectural Design Goal

A lot of times during a system design a lot of architectural design decisions are based on architectural goals like performance, security, scalability, usability and so on. I believe that url crawlability (or with other words - RESTful urls) is often neglected (especially in Java, PHP, ASP.Net….) but should be considered as one of the top priorities among all other architectural design goals for every web enabled system.

As usual, Ruby on Rails excels in this area too and I could only learn from it but in the realm of Java, even if you want to do it you would have incredibly hard time. Almost all of the java web frameworks fail to provide a way to work with RESTful urls. A big exception to that is Stripes framework. The REST support is still missing, although it would be trivial to be implemented but RESTful urls are definitely there. 

A lot of nice thing could be said about Stripes but better read it from their web site.
The only thing that I would like to add about this framework is that I had the chance to work with it for the last 9 months extensively (after working more than a year with Rails) and I can say that, in my opinion, this is not the best Java framework right now, but probably this is the ONLY Java WEB framework right now (at least from the ones that I have evaluated – and this list is very long!). 

I went a little off point but I just wanted to say that currently I consider url crawlability/RESTful urls as one very important architectural design goal with a lot of benefits coming out of it and my first criteria evaluating any web framework is whether it could support RESTful urls or not. 

Is this an important consideration in your design?

|| Igor, Tuesday, March 17, 2009 || link || (0) comments | links to this post

Monday, February 23, 2009

What I am excited about applying in the realm of software development lately

Recently, I had to answer to the questions:

What insight have you had lately in the realm of software development that you are excited about applying?

The answer turned out to be a little longer which made it a good candidate to post on my blog. So, there it is:

Well, there are a lot of interesting ideas that I am passionate to apply or improve in the technology area. Most of them are a few years old and there are successful examples of applying them, but still the majority of IT industry doesn't embrace them either because these ideas require a lot of effort and discipline or because it is mostly different mindset and vision.

If I can summarize most of the ideas in one sentence, it would be – using the web as a platform coupled with lean and lightweight business model to give the ability to strategically position a company as an middleman or automated intermediary between the user and his or her online experience, between customers and producers, between data providers and data consumers.

That includes a high accent on remixable data sources and data transformation, allowing users to control their own data and at the same time use their collective intelligence to generate new content or improve on the quality of existing data. (representing data in different formats –html, xml, json .. and on different platforms – mobile, browsers, desktop, real time positioning…., gather comments, ratings, reviews, adding own content, products…)

Support lightweight programming models that allow for loosely coupled systems and enabling constant changes and enhancements. I believe that by using lightweight frameworks, simple architectural design and more dynamic type programming a technology team could enable a business model to be more flexible and efficient. (conventions over configurations, simple web services –REST, syndication of data, autonomous distributed systems with smart ends  )

For this to happen, I would think that the technology part of a company should concentrate on the core competency and re-use data or infrastructure services of others for everything else (storage services, virtual serves, emails, cloud computing and so on.)

Further, I think that businesses would have hard time in today's very competitive global economy if they don't go far and beyond for their users. From a technology point a view, I am very fascinated to implement features like real time monitoring of user behavior to find out what is valuable for them and what could be improve. Implementing features that would allow to enable and cooperate with users and not to direct or control them – simple user interface, intuitive searches, intelligently customizing application based on users behavior and data consolidation, different data formats, widgets, web service interfaces, content syndication and so on.

Last but definitely not least, I am very passionate about software development practices and methodologies. Exciting ideas that I would like to try or improve on are – extremely frequent releases, different types of collaboration and intelligent gathering of various project information including natural processing language algorithms to improve communications and common understanding.

Well, what are you excited about in the realm of software development recently?

|| Igor, Monday, February 23, 2009 || link || (0) comments | links to this post