Enrique Comba Riepenhausens Blog Thoughts, ideas and a vision of life http://ecomba.org/blog/rss The Apprentice - Anouncing Javier Acero http://ecomba.org/blog/2011/07/22/the-apprentice---anouncing-javier-acero
No one as ever completed their apprenticeship.
~ Johann Wolfgang von Goethe

Today Javier Acero is facilitating a Ruby workshop in Valladolid thanks to Fernando Burgos (who organised the event).

Given that he is doing this workshop, as he is moving to Madrid and he wanted to do something nice in Valladolid as a little good bye, I wanted to take the chance to welcome him (publicly) as my new apprentice.

Javier is a very nice guy, that is passionate about software development, but at the same time has the humility to keep his curiosity and desire to learn.

I am really happy to have him as my apprentice from now on and I hope I will be able to transmit as much knowledge to him as I can so that he can become a great craftsman in the future.

Please give him a warm welcome and wish us well in this new chapter of our journey.

Fri, 22 Jul 2011 00:00:00 -0700 http://ecomba.org/blog/2011/07/22/the-apprentice---anouncing-javier-acero/
Entryways Seedleaf - Or my trip to Floyd http://ecomba.org/blog/2011/07/16/entryways-seedleaf---or-my-trip-to-floyd
Man's heart away from nature becomes hard. ~ Standing Bear

Two weeks ago I was flying with a torn calf from Madrid over Frankfurt and DC to Floyd, Virginia. I was going to spend the next three weeks with the fine fellows from Entryway. My leg was giving me a hard time and the trip was, from a pure physical point of view not, that pleasant, although I had some great conversations with different people during my flight and I even set up a date for next November to go dress shopping with Corey , Dave , Michael and possibly Brian .

"Why would I embarc on such a venture with a leg hurting like that?" you might ask yourself. The answer is actually quite simple. I was going to meet my dear friend Gustin and spend the next 3 weeks of my time with him at a exotic place called Floyd. I was not to be disapointed!

I arrived at night, after flying from DC on a tiny weenie plane ,at Roanoke airport where Gustin and Jon were waiting for me. It was a pity that it was dark already and I could not enjoy the scenery ( as Dave Hoover was recommending me to ), but given that I had been awake for the last 24 hours I was pretty tired. We arrived home and I jumped to bed getting ready for a great first week that was about to start.

On Monday, the 4th of July we went to a party with Gustin, Andrea, Ceder and little Loic. Funnily enough the partys leitmotiv was the independent thinker celebration. It was really nice to see all the people (young and old) celebrating their way of living in an America that does not really embody their lifestyle; a great way to start my time in Floyd and get a little bit of the gist of how my next 3 weeks in Floyd would be.

So my work at Entryway started on Tuesday and we plunged right into their new venture Seedleaf.

Seedleaf is a food distribution system aimed for local farmers, CSAs and food distributors that helps them selling their produce removing the corporate man in the middle, who usually makes far more money than the people who work the land. Seedleaf is due to launch soon and the fine fellows are working hard to get a great product out there. The fascinating thing about the fellows at Entryway. is their passion for the community they live in. They strive to serve the needs of the community they best they can creating a fair trading environment for the local farmers and food producers.

In the last 2 weeks, while I have been working with Gustin, Jon, Jonathan, Katie and the ever smiling Lake, I have found a group of people passionate and caring about their work and community. It is inspiring how they care about their private lives as much as they care about their professional selves (they actually have a 3 day weekend to be able to disconnect from work and get back totally refreshed and energized every week).

I wanted to write a bit more about my stay here and the work we are doing, but I'll leave that for the last post about this wonderful place called Floyd :)

Sat, 16 Jul 2011 00:00:00 -0700 http://ecomba.org/blog/2011/07/16/entryways-seedleaf---or-my-trip-to-floyd/
Elabs http://ecomba.org/blog/2011/07/03/elabs
It’s NOT the job you DO, It’s HOW you DO the job.
~ Anonymous

Amazing how time flies when you are on the road. It seems like yesterday that I came over to Elabs to spend some time with them.

In this last week I spent my time pairing with Antoy Sastre on a nice Backbone.js and CoffeeScript powered app for a new client of Elabs

Elabs has been a great experience in my journey. One of the things I like a lot about Elabs is the fact that they create products, but these are always things that they would use as well. They focus a lot on the open source community and have gained the respect of the ruby community for their efforts.

The daily life at this company is very calm and serene, everyone does what he is supposed to be doing and things seem to flow without the need of a lot of ceremony.

Did I mention their awesome office? If you happen to be in Gothenburg some day you definitively have to come for a visit. CJ had the incredible luck (or good taste you might say) to find out that the old Hasselblad building was free.

I am sitting here in Dulles International Airport waiting for my next flight so excuse me for my short post. During my time at Elabs I have seen first handed how professionally the crew works, with this nordic calmness and focus.

Thanks a lot for having me during this time guys, it has been a pleasure and an honour to be part of your team during this last weeks! But you are not getting rid of me that easily, I'll be back! :)

Sun, 03 Jul 2011 00:00:00 -0700 http://ecomba.org/blog/2011/07/03/elabs/
Value based charging http://ecomba.org/blog/2011/06/28/value-based-charging

I actually wanted to write about value based charging a while ago. As it happens sometimes, I got sidetracked and my mind was on many other things, as you might have seen by my recent lack of blog posts.

That's when Brian Marick reminded me to write about it now. So here we go...

There are various models of charging in current business. The main models we can recognize are:

  • Fixed price
  • Time based
  • Value / Result based

Fixed price based charging

In this model of charging providers will set a price depending on their understanding of the scope of the project at the inception time.

One of the flaws of fixed based charging is that you are setting the price given on the current (early) understanding of the project, which might be flawed (specially if you consider the cone of uncertainty. )

This model puts the entirety of the risk on the providers side. This sort of charging should be only done if the task at hand is a routine endeavor for the providers team and requires very little interaction with the customer.

Most times, when providers use this form of charging they would build in the offer a buffer calculating their internal costs. One possible formula for calculating the total cost would be the following:

Fixed price = (scope * your hourly price * fixed price overhead factor) + material

Time based charging

In this model most providers of services charge for the time spent doing the work. The time charged for varies from hourly, daily to iteration based (when working in an agile team).

When charging for time the provider considers that the amount of time he spends doing the work has a certain price. It does not consider the actual value provided to the customer during the time worked.

There are variations to this though. Some companies will charge time, but with a notion of value in it. I have seen this done when an iteration has a certain cost attached to it and the total amount charged varies depending on the story points delivered by the team (i.e. if there was less delivered the provider will charge less acording to the committed number of story points).

The only problem when charging a certain price per iteration is that, given the team is working in an agile way, they will develop the most valuable stories first, leaving the less valueable stories for the end of the project without varying the price of the iteration.

Value based charging

In this model we base our charging model on the premise that our customers should only pay for the value they are getting from our work and not for the time we spent doing it.

Similar to time based charging models, there are different models and approaches to value based charging.

The possibly simplest way to charge per value (although the one that requires a lot of trust between the customer and the provider) is the one that I like to call What was my work worth to you?

When working like this all the risk resides on the provider as you are putting the payment decission entirely on the customers hands and you will have no control whatsoever in the outcome. It requires a high level of trust from both parties as the risk lies solely on the providers side.

Another modality of value based charging, which works for bigger projects or training/coaching services, is based on an upfront study of the work at hand.

When engaging in such a project the provider will try to understand the customers context and the variables that play in this context. As a provider you are trying to get as many insights about the project at hand as you can before you commit to any price.

When the provider has evaluated all the factors that make up the project he and the customer will calculate which expected revenue growth the customer will benefit from after the project will be completed. Once this has been figured out the provider can make different offers (with different levels of options in every offer), charging a percentage of the gain the customer will see when these targets are met.

Similar to fixed bit charging this can put the entirety of the risk on the provider. The difference though is that as a provider you have to keep in mind, and never forget, to first try to understand your customer and his context before you commit to any price. You should always give different offers with varying costs and scope, so that the customer can decide which will suit his needs best.

It is important when charging like this that measurable outcomes are set so that the customer and provider can assert to which level the targets have been met.

This can be seen as well as a result based approach to charging, although result based charging is different in that the charging will occur when the project gives the desired (or a fraction of the desired) outcomes. There are modalities to this charging model which work when working with start ups, which could be based on equity percentages, etc.

These are just a few examples of charging models (specially the value based ones) that I wanted to share with you. There are some more based on retainers, margins, etc.

I myself am exploring the posibilities of value based charging and most of the time I use the What was my work worth to you? form of charging which seems very natural to me. I have worked with equity based charging as well and retainers.

Have you any experience with value based charging? Do you have any questions about all this? Share your thoughts!

Tue, 28 Jun 2011 00:00:00 -0700 http://ecomba.org/blog/2011/06/28/value-based-charging/
Noma http://ecomba.org/blog/2011/06/25/noma
Don't ask yourself what the world needs; ask yourself what makes you come alive. And then go and do that. Because what the world needs is people who have come alive.
~ Howard Thurman

Last Wednesday I had the pleasure of dining at the best restaurant (as for the year 2011) of the world, the famous Noma.

It is funny how your mind creates expectations and ideas in your head. Before I went to Noma I thought of it as a place where french cuisine is served and everything has to be done with the right etiquette. I was to be surprised...

When we entered Noma we where greeted by the 45 staff members; they all stood in line, smiling, happy to have us there as their guests. The feeling that something great was about to happen was in the air.

We where invited to dine in the apprentices staff room, the very place where the chefs to be learn their craft from their mentors. The room was beautifully arranged, not making you feel you are in a restaurant at all, but sitting in someones living room. The views to the bay where stunning, the bookshelves full of books on wines and food; all in all something totally unexpected for a restaurant.

Once seated our hosts welcomed us to Noma and something big started to happen that would deeply impact me in the way I see my craft and confirm the many ideals and ideas I have already. I took a few pictures already about the whole experience (and the servings that you can look at on my instagram ) so I am not going to explain the whole evening, but rather share with you the lessons learned from this experience.

One of the things that struck me is that the night we where at Noma there were 45 staff members for the 60 guests dining. The result of that was an incredible service (everyone got served the food at almost the same time). You might think that having 45 memebers of staff for a relatively small restaurant is a very expensive thing to do, and it would be if it was a classical place.

You see, Noma is a place that follows what we, as software craftsmen, believe in. They have large numbers of apprentices that are learning, by doing, to become great chefs one day. Of the 45 staff, only 15 have a salary; the rest are there because they want to learn and have a passion for food. As I mentioned earlier, we where actually dining in the room where the Apprentices usually learn. Not only that, Noma even has a test kitchen (on a boat) where the apprentices can cook themselves and practice without compromising the quality of the food served to the customers.

The other striking thing when you come to Noma is to see the passion this people have. They truly love what they are doing, they are constantly smiling, with this confident look in their eyes; their motto Dining at Noma is about having fun.

And you will truly enjoy your evening there! They will explain with high detail where the food and wine come from, tell you anecdotes and even show you their kitchen, sharing the problems they have getting some ingredients and how they travel around to find new ingredients, researching and trying out new recipes.

Unlike other kitchens where there is a lot of stress, anguish and shouting, at Noma you see peace, passion, and everyone doing what they have to do, without being told so. You can see master chefs explaining the right technique to the apprentices while they are preparing the food for their guests in a calm and assertative way.

Noma is about the people that work at Noma. It is about passion and openess, about sharing with their customers what they do, about having a good time together with their guests, providing one of the best dining experiences in the world that will stick in the memories of those who are fortunate enought to spend an evening with them.

Sat, 25 Jun 2011 00:00:00 -0700 http://ecomba.org/blog/2011/06/25/noma/
My Weekend at BeCode http://ecomba.org/blog/2011/05/25/my-weekend-at-becode
Do what you like doing. Fortune will follow.
~ BeCode

Last Friday evening I started a journey to Valencia. I wanted to visit a good friend of mine Xavi Gost. I knew I was going to see a different place, a place where people live by their passions and mold their lives according to that, creating their own realities; I would not be disappointed.

After an uneventfull train ride I finally arrived in Valencia, but Xavi was no where to be seen.

"Well" , I thought, "he possibly is a little late, the streets seem to be busy.", so I waited outside the station and enjoyed the view of the busy city with all the people coming and going from the station.

After a while two young men came walking towards me pointing their fingers at me:
"We are looking for you!".

And my weekend with the people from the Punk Incubator began...

On Friday we went out to see a bit of the city and have some dinner (I was actually quite hungry). We spend some time talking about them and what they do, but most of the time we just had some fun and banter. I was too tired that day to continue for much longer so I decided to go to sleep relatively soon.

What took me by surprise (and it was a pleasant one), was that the very workshop of Be Code has a bedroom where visitors can spend the night and rest. It was a great feeling to be able to sleep in the very heart and soul of Be Code. Although I must say that it wasn't an easy night, as I had the visit of at least 6 females who didn't want to let me sleep. Before you jump into conclusions those females where members of the Culicidae family ;).

Saturday we had a nice breakfast in a street cafe. After getting our engines started with our breakfast we went to a local market. We walked around the marked enjoying the smells and sights of it all. Valencia has a great central market filled with the flair of the markets from the past. You should definitively check it out!

So while spending our time in the market we bought our food we would prepare later at Xavi's house (Xavi and Ana are really great hosts; Thanks a lot guys! ).

Back at Xavi's home we cooked two fantastic Doradas and continued our conversations.

Later that same day we organised a small dojo with some of the people from Be Code. A couple of hours later we went out to have some drinks in the city.

Sunday was much calmer, we went out to have a nice Paella as a nice goodbye meal.

The team of Be Code is a tightly knit set of people who believe in a common goal, they love what they do, love their life, and change the environment around them.

It is no surprise that they don't shun away from having difficult conversations with colleagues and customers alike.

They are the type of people that will not beat around the bush in any situation, and with their raw ways tell you exactly what they think. There are no excuses, this people mean what they say and say what they mean. It is great to see how they create and live the reality they want to live in.

All in all I had a great weekend and I hope to be able to come back soon, maybe next time I leave with a mohawk ;)

Wed, 25 May 2011 00:00:00 -0700 http://ecomba.org/blog/2011/05/25/my-weekend-at-becode/
Karma http://ecomba.org/blog/2011/05/24/karma Image borrowed from Creative Commons flickr user: h.koppdelaney
Without feelings of respect, what is there to distinguish men from beasts?
~ Confucius

Over the past week I have had a very altered feeling, something that was not right, a sensation; my karma was altered.

I might not appear that way, but deep down in myself, I am a very sensitive person; fluctuations of mood and emotions get picked up very quickly into me and I try to process them.

This empathy I have developed over the years (one might argue that I was born that way) usually helps me a lot when dealing with people (which is brilliant; after all I work giving a service to my customers). It's just that sometimes it works to well...

As I said earlier I was altered this past week. What made me struggle is to be around people who needed to show off and, in some cases, disrespect others in levels I would never think of doing.

If you respect others, they will receive respect in return.

As an old XPer the values of eXtreme Programming are very ingrained in my way of life. It is astonishing how, in a way or another, they have molded me to be the person I am today.

Being agile does not mean you follow a set of practices; the practices are just an outcome of the values you hold and share. It is really astonishing how many people in the world proclaim to be agile because they follow some magic formula that someone has laid upon them. They follow a map, a set of practices, blindly, not realizing that to be truly agile they have to have some strong core values and draw their own map. Moreover they need to be able to react to changes and not look like a dear in front of an approaching car, struck by fear and unable to move.

To conlcude I want to ask you some questions:
Do you show respect to others? Even when you disagree with them?
Do you give everyone the chance to speak up without fear?
Do you try to simplify everything you do, or do you strive for complexity?
Do you engage in conversations, or do you rather listen to the sound of your own voice?

Tue, 24 May 2011 00:00:00 -0700 http://ecomba.org/blog/2011/05/24/karma/
Accountability http://ecomba.org/blog/2011/05/17/accountability
A person may cause evil to others not only by his actions but by his inaction, and in either case he is justly accountable to them for injury.
~ John Stuart Mill

Sometimes I see an attitude in society or at teams where they, with bravado, proclaim that something is not their job.

I have been lucky to share my time with people that are far from letting this statements fall, although I see them around me, in different places.

Think about it, you live in a society, within a system. It is easy to blame that system (or company), it is the great excuse, specially when things are wrong.

"There is nothing we can do!" you say, but there is.

Change only happens when you start changing. When you take responsibility and feel accountable for each and every action.

When the system fails for some unknown reason, go fix it! Don't blame some other person or complain about their behaviour. Start working on yourself, start being the way you want others to be.

Change the system; within!

Tue, 17 May 2011 00:00:00 -0700 http://ecomba.org/blog/2011/05/17/accountability/
The Apprentice http://ecomba.org/blog/2011/05/15/the-apprentice
A long apprenticeship is the most logical way to success. The only alternative is overnight stardom, but I can't give you a formula for that.
~ Chet Atkins

It has been quite a while since I have had the pleasure to apprentice someone.

aimee , my last (and current) apprentice is very doing pretty well as a contractor currently and has walked a long way in her long road already. Before you think otherwise, she is still mentored by me, but the nature of her apprenticeship has changed quite a bit. She is a very talented developer and, as part of her apprenticeship, we are focusing on different things at the moment.

With aimee taking on a new apprentice she made me realise that the time has come I do the same again.

So I lay it on you, I am looking for an apprentice.

The person I am looking for is a person who wants to learn everything from the software development business, someone passionate and humble, someone with an empty cup.

I want to be your apprentice!

If you are thinking that you'd like to be my apprentice there are a couple of things you should know first.

  • The mentor/apprentice relationship, although changing over time is a lifelong endeavour.
  • You should be passionate about your profession.
  • You need to be humble, capable of listening to others and helping people, even (and specially) if helping them will not give you any gain or advantage.
  • You need to be prepared to be stretched. I can asure you that I will do all my best to make sure you are way out of your comfort zone.
  • You need to be prepared to fail in public. There is nothing wrong with it, you have to accept that you are not perfect and expose your ignorance.
  • You need to be clear that software development requires a lot of practice and that walking the long road is not a short trip, but a lifelong journey.
  • You understand that learning is not a one shot challenge to pass an exam or test but a perpetual exercise

What's next?

If you really think you are prepared to walk the long road alongside me then there is one little thing you still need to do. I have a coding challenge I want you to do before you choose to contact me.

The Challenge

I want you to write a blogging engine in The Ruby Language without using any external gem or library. You have to write it Test Driven (at this point I cannot say test first as I will not see what you are doing while you are doing it), but you will not use Test::Unit to do so. You will need to figure out by yourself what needs to be done to test your blog.

Once you have finished your blog send me a reference to it (I would prefer to see it on Github ) so that I can look at your code. Obviously, when you write me, you can (and should) tell me something about you and what your motivations are.

Contact me here.

Sun, 15 May 2011 00:00:00 -0700 http://ecomba.org/blog/2011/05/15/the-apprentice/
First week at BeBanjo http://ecomba.org/blog/2011/05/13/first-week-at-bebanjo
Coming together is a beginning. Keeping together is progress. Working together is success.
~ Henry Ford

When I announced back in February my plans to start a new chapter in my Long Journey Luismi Cavalle contacted me asking if I wanted to spend some time with them in their offices.

I knew Luismi Cavalle from local user groups, but I had not had the pleasure of interacting with the rest of the team before (apart from a short conversation here and there), so I thought it would be a great opportunity to see how they really work and what they do.

This last week I have been working finally with the nice folk of BeBanjo in the heart of Madrid. When I came in on Monday I found out, with horror, that they didn't have a Gowalla spot I could check into, so I had to create one ;)

Luismi introduced me to the team and we talked long about the products they have and the future plans of the company and their products. I was very much impressed by the products themselves and the market niche they address.

You see, other than some of the companies I have been to, BeBanjo is a product company. They live in the space of creating new products for their customers and pleasing them day in and day out, listening to their needs and evolving their offering accorndingly. The product space has it's challenges, but is a very nice place to be, in a way it is the pinacle of creation.

After the long intro of their products ( Luismi talks quite a bit ;) ) we jumped right into the code; the task, change a products UX / UI.

We spend the rest of the week working with JavaScript driving the code with our well thought tests in Jasmine a great BDD framework.

All in all it has been a great week. We have written well factored code (apart from that 52 weeks something something... Luismi might tell you if you ask him :D), decided to go all the way with The Pomodoro Technique (we even synchronized the pomodoros across the company), and even celebrated my birthday :)

Stay tuned, I will reveal more interesting things about this great group of professionals soon! :)

Fri, 13 May 2011 00:00:00 -0700 http://ecomba.org/blog/2011/05/13/first-week-at-bebanjo/
Inception at Wiseri http://ecomba.org/blog/2011/05/05/inception-at-wiseri
You're asking me for Inception. I hope you do understand the gravity of that request.
~ Cobb (Inception 2010)

On Monday and Tuesday I had the pleasure and honour of facilitated an inception at Wiseri's headquarters.

Wiseri is a great team of people committed on servicing the people looking for a job and for companies to find the right match.

You see, there are many other job seaching sites and head hunters around, but most of them are lacking a factor that one might expect is part of that business; the human touch. Not so at Wiseri. This people really care about what they do and what they stand for. Business, it would seem, takes a second place; they really want to offer a great service to their customers (job seekers and companies alike).

During the two days I was part of the Wiseri team (I even got a nice t-shirt :) ) we explored every angle and corner of their business and logistics, figuring out the best way to service you.

If you are a company looking to recruit the right candidate or you are looking for a new job, don't hesitate, Wiseri is your frist stop!

Thu, 05 May 2011 00:00:00 -0700 http://ecomba.org/blog/2011/05/05/inception-at-wiseri/
Goodbye 8th Light (for now) http://ecomba.org/blog/2011/04/30/goodbye-8th-light-(for-now)
One can pay back the loan of gold, but one dies forever in debt to those who are kind.
~ Malayan Proverb

Yesterday was finally my last day here at 8th Light and I wanted to write some words of gratitude to all of you.

In the last three weeks you have made me feel part of your family, letting me see and embrace the 8th light way.

Your passion, this tangible quality that flows like an unseen light in your dojo, is reflected in everything you do, the code you write, how you care about your craft and the way you mentor your apprentices.

This last 3 weeks of my journey have been a great experience, inside and outside of 8th Light I have met great people, had awesome conversations with old and new friends; Chicago and it's communities will always stay dear to my heart.

With a sweet-sour feeling I leave now Chicago (don't worry, I'll be back) to spend some time in Madrid working with some really nice people and enjoying that fantastic weather that characterizes Spain :)

There are few words more to say, but thank you!

Sat, 30 Apr 2011 00:00:00 -0700 http://ecomba.org/blog/2011/04/30/goodbye-8th-light-(for-now)/
What are we building? http://ecomba.org/blog/2011/04/24/what-are-we-building
Act as if what you do makes a difference. It does.
~ William James

For the last 2 weeks I am having the honour of working alongside great craftsmen at 8th Light. When you work with a group of people that strive to do the best job they can for their customers and seek excellence magic happens.

Last Friday I had the pleasure of facilitating the 8LU (8th Light University). I chose to talk about a practice I have been adopting for a while before a project starts; we used to call that at Eden Development a Project Inception.

When starting a project some people start making loads of upfront designs thinking about all the minute design intricacies which we know as BDFU (Big Design Up Front).

Others on the other hand, hiding behind their take on agile software development, choose not to do any upfront thinking and decide to build the software for their customers one story at the time.

Both approaches to solving problems for your customers are wrong!

When you try to design early on in the project (or even before the project has really started) you are wasting time in designing something with a very limitied understanding of the problem domain you will build over the course of the project. On the other hand, not doing any upfront work leads you into not understanding the problem domain at all and relying on the little information you are getting from your customers story by story.

What's the golden middle?

As Software Craftsmen we should be more than just excellent coders. The value we bring to our customers should be that extra level of care, where we try to understand the real need of the customer, as opposed to what they thought they wanted initially. It is our duty to help our customers with our experience, not just being fantastic software developers with great practices.

I have found that an inception workshop is a wonderful tool to help a group of professionals (the customers and the development team) to figure this out before the project actually starts.

During an inception workshop the team will engage in a lot of creative activities that will help them figuring out the nature of the project. They will create elevator pitches, product boxes, sketches of the most important screens of the application, brainstorm the scope, fears and risks (and find ways to remove them) and in general have a good grasp and understanding of the nature of the project.

A fantastic way to have an inception workshop is by having an external facilitator lead this workshop so that the team can concentrate on the activities without needing to focus on the flow of the workshop (which the facilitator will take care of).

How do you start your projects? Do you have inception workshops?

If you are interested in having a facilitator for your next start of a project drop me a line and I'll glady help.

Sun, 24 Apr 2011 00:00:00 -0700 http://ecomba.org/blog/2011/04/24/what-are-we-building/
My first week at 8th Light http://ecomba.org/blog/2011/04/13/my-first-week-at-8th-light
Chase down your passion like it's the last bus of the night.
~Terri Guillemets

I have spent now a week with the fine people at 8th Light.

Coming to 8th Light always feels like coming home, they are great friends and craftsmen, who take real pride in what they do. I thoroughly enjoy being amongst people who define themselves by what they are and do.

When I first came into the Chicago office on Monday Brian asked me if I could take a look at his code. He showed me the application he is doing as part of his apprenticeship. We went through a server that he has been developing in Oracle, errmm, Java I mean and looked at ways to improve the readability of the code (specially the naming tensions and forces of method names and the bodies of those methods).

Then I was lucky enough to be part of the team that will be building an iPhone app for a new customer. It was really nice to participate in the initial Iteration planning meeting and giving feedback.

It is funny how like-minded people work in similar ways, sharing values and thoughts when it comes to giving a second-to-none service to customers.

On Wednesday I went with Paul to the Libertyville office where I was warmly greeted by the rest of the 8th Light crew. While in Libertyville we continued spiking on ideas for the app we are building. That same day there was a big company meeting at 8th Light , and I was honored to be able to sit there and participate as one more of this great family.

Thursday and today (Friday) I am attending Colin's clojure course. Colin is a very good facilitator and teacher. He has a fantastic way to explain technology and make sure that the students understand the concepts he is teaching. His passion for Clojure shines through while he is explaining some of the most dark aspects of the language. If you happen to be in Chicago (or anywhere else Colin might be giving a course) I highly recommend you to go and attend. It is worth every penny!

At the sime time, while I am here in Chicago my stuff has arrived in Madrid thanks to the awesome Juliet. She is a great and caring friend that I hold very dearly in my heart! Thank you so much Juliet!

I guess that I have officially moved to Madrid now (even though I am in Chicago at the moment) ;)

Wed, 13 Apr 2011 00:00:00 -0700 http://ecomba.org/blog/2011/04/13/my-first-week-at-8th-light/
Scottish Ruby Conference http://ecomba.org/blog/2011/04/10/scottish-ruby-conference
The World is a book, and those who do not travel read only a page.
~St. Augustine

When I started writing this post I was stitting on my flight to Chicago, somewhere over the ocean, miles away from any landmass trying to reflect about last weeks events.

On Tuesday I flew over to Edinburgh. I wanted to spend a few days before the Scottish Ruby Conference for myself, meeting up old friends, who where slowly, but surely arriving to Edinburgh This little city would soon be flooded by nearly 300 Rubyists from all over the world.

The conference has been an absolute blast thanks to Alan , Paul and so many others, speakers and attendees alike.
Thank you all for such a great time!

So, yesterday night when I arrived in Chicago I was greeted by a wave of humid heat that I didn't expect. Wasn't it supposed to be cold here?

Paul picked me up from the airport and we drove to his place, where I will be staying over the course of my three weeks in the Windy City. Paul is a great guy and friend, and with this I extend my thank you (for the world to know) for your great hospitality Paul :)

Today we are starting a bit later, we are sitting in Paul 's living room having nice discussions about the craft, how to build software and people (and I hear that there is a nice blog post from Paul coming up on this).

I will try to share my experiences on the road more often sharing my thoughts and insights at the time.

Sun, 10 Apr 2011 00:00:00 -0700 http://ecomba.org/blog/2011/04/10/scottish-ruby-conference/
On being happy http://ecomba.org/blog/2011/04/01/on-being-happy
The foolish man seeks happiness in the distance; the wise grows it under his feet.
~ James Openheim

What makes you happy?

No, seriously, have you ever thought about it? Do you live the life you want to live, or is there an unlived life in you being held back by your very Resistance?

A friend of mine asked me to write something about my day to day, what it means to be happy for me.

Edith Wharton once said that if we stopped trying to find happiness we could have a pretty good time. I never thought about it in that way, but I guess she is right.

To find my path to happiness I didn't go and say "I want to be happy". I have always been a very reflecting person, always trying to figure out who I am and where I want to stand in my life. This made it possible for me to find what I really want to do, who I want to become, and the life I want to live.

When strangers ask me what my line of work is I usually answer that I don't really work, I have a lifestyle and I have found a way to make it sustainable.

This reminds me of something a good friend of mine once said:

Work is so bad and horrible that there are people prepared to pay you for it.
It is sad that this is a truth for so many people. I hear so many times that people have a job just because it gives them money so that they can do those things they want to do with it. They don't realise that they are giving away, day by day, their most precious asset, one that will never come back, one that cannot be saved to be used later; their time.

You only have a limited number of years in your life, you are not going to live forever. Time moves forward and stops for no one, yet so many people are prepared to waste it, have unlived lifes.

What if you changed your way of living and did exactly what you want to do, what you are meant to do, every day?

Fri, 01 Apr 2011 00:00:00 -0700 http://ecomba.org/blog/2011/04/01/on-being-happy/
Resistance and Criticism http://ecomba.org/blog/2011/03/29/resistance-and-criticism
"Contempt for death"
~ King Leonidas anwering the question on what the biggest virtue of a warrior is.

Recently I finished reading The War Of Art where Steve Pressfield explains how the Resistance works and how this influences our daily actions; if we are not aware of it's existance.

As it happens I have also been more and more aware of its workings and how people I know (or sometimes don't) react in total control of their Resistance.

I am leaving an extract of the 11 most common things that will conjure the Resistance from Pressfield's book:

  • The pursuit of any calling in writing, painting, music, film, dance, or any creative art, however marginal or unconventional.
  • The launching of any entrepreneurial venture or enterprise, for profit or otherwise.
  • Any diet or heath regimen.
  • Any program of spiritual advancement.
  • Any activity whose aim is tighter abdominals.
  • Any course or program designed to overcome an unwholesome habit or addiction.
  • Education of any kind.
  • Any act of political, moral, or ethical courage, including the decision to change for the better some unworthy pattern of thought or conduct in ourselves.
  • The undertaking of any enterprise or endeavor whose aim is to help others.
  • Any act that entails commitment of the heart. The decission to get married, to have a child, to weather a rock patch in a relationship.
  • The taking of any principled stand in the face of adversity.

And another extract (due to recent events I have been seeing):

If you find yourself critizising other people, you are probably doing it out of Resistance. When we see others beginning to live their authentic selves, it drives us crazy if we have not lived out our own.

As Pressfield says, individuals who are realized in their lives, who do what they are meant to do, they almost never criticize others. If they speak at all it's to encourage others.

The Resistance usually only harms us, but criticism and cruelty harm others as well!

Tue, 29 Mar 2011 00:00:00 -0700 http://ecomba.org/blog/2011/03/29/resistance-and-criticism/
The Guru http://ecomba.org/blog/2011/03/28/the-guru
The biggest guru-mantra is: Never share your secrets with anybody. It will destroy you.
~ Chanakya quotes

In a recent conversation with friends I was told that now that I have finally moved to Spain again I will soon loose my perceived Guru status.

Although it was a side comment, made on a conversation, it made me chuckle. I was thinking to myself: "What does this person acutally think my aim in life is or why I want to help a community? What does she think about my path?"

I realised though that many people seek to have this Guru status in some communities; their only aim is to self promote and make themselves bigger than they are. Egos are high in the software development community.

Self promoting folk cannot self promote forever, at the end of the day people in a community realise that, see through, and find out that whatever they believed in was a fabrication for the benefit of one.

If someone is self promoting, turn your back from him, he will not help you!

What some people don't realise is that we, the professionals, the ones that have decided that the love of our craft spans beyond the amateur (who dreams big and follows his passion off hours, but is to afraid to fail and therefore doesn't follow his passion full time), we do what we do for the love of our craft. We help other people and seek to delight our customers, giving all that is in us to achieve their betterment.

Sure we are visible, sure we share, at the end we want to help those too afraid to follow their passion alone to make that step. It is not a matter of recognition.

Satisfaction comes from helping others do great things!

Mon, 28 Mar 2011 00:00:00 -0700 http://ecomba.org/blog/2011/03/28/the-guru/
Observations http://ecomba.org/blog/2011/03/27/observations
Life has to be given a meaning because of the obvious fact that it has no meaning.
~ Henry Miller

While here in Madrid I am working with Despo on a client project.

Unlike other projects Despo might have done so far, this one is a service to be consumed by other programs and not human beings.

While we were defining the cucumber scenarios of the service Despo pointed out that the stories we were defining didn't describe the business value, but rather the API of the application.

At first I was not sure what she meant, but then I realised what was going on. For me it was an obvious move, I had thought (internally) about the customer (another application) and so I started writing the cukes focusing on how that customer draws value from this service. It was an obvious thing to do; at the end of the day you write applications for the customer and you seek the highest value for it (I am writing it as the customer will be another machine ;) ).

Sometimes, when we have worked on many different domains and codebases we see certain things as obvious and we forget that we are working with people that had had different experiences, worked in different environments and might not see the domain we are modelling the same way we do.

The Obvious is not so Obvious after all.

When you work with other people you need to make sure that you don't leave anything unsaid, don't think that anything is obvious (unless you have worked for years with the person/team and you have developed a tacit knowledge).

Sun, 27 Mar 2011 00:00:00 -0700 http://ecomba.org/blog/2011/03/27/observations/
Metaphors: Technical Debt http://ecomba.org/blog/2011/03/19/metaphors-technical-debt
Debt is the worst poverty.
~ Thomas Fuller, Gnomologia, 1732

Let's revisit Ward Cunningham's Technical Debt metaphor:
"A developer's obligation is to make sure that the code as written makes the clearest possible statement as to how the solution was understood at the time of writing. This may require some refactoring as per SystemOfNames. However, the developer has no obligation to anticipate future needs, and usually does the future a disservice by trying. The future will be on us soon enough. And that is when the pressure of need and the tools of refactoring lead to great inspiration."

The problem I have seen many times with this metaphor is how people interpret it. Thinking that you can go away with not testing and just cranking one feature after the other is not Technical Debt, IT'S A MESS!

Incurring debt is a conscious decission, you know the system could be better if you used a better aproach (modelling your objects differently), but due to time constraints you decide to go another, simpler, route. While doing so, and because you are incurring debt here, you are testing as much as you possibly can to make sure you will be able to change the system at a later stage with some confidence.

When you are just writing code, not testing, feature after feature, you are just making a mess and being hardly professional about your code (and in many ways insulting the intelligence and trust your customer has laid on you).

If we look at it from the metaphorical point of view, writting messy code, is like walking into a bank, stealing all the money you can, and running in the hopes you will never get caught.

Sat, 19 Mar 2011 00:00:00 -0700 http://ecomba.org/blog/2011/03/19/metaphors-technical-debt/
On the road again http://ecomba.org/blog/2011/03/16/on-the-road-again
The World is a book, and those who do not travel read only a page.
~ St. Augustine

Today I am travelling back to Madrid; back home, to the place I was born; A new beginning

The road that lies ahead of me is misty and full of unknown surprises; it is going to be a great new adventure on my long road.

My first leg of this adventure is finishing up a project I am doing for one of my current customers. For this I am taking Despo with me, one of aimee's apprentices. She will help me out in finishing the work while we are in Madrid and I hope I can teach her a little bit about software development and my way while we are there.

Yesterday night, while we were having some leaving drinks aimee and me (actually it was just me) realised that Despo is my 2nd generation apprentice (she is aimee's apprentice) which filled me with pride.

aimee is a wonderful person and she has done so much for Despo and Alberto during their short apprenticeship. I am grateful and proud of her!

Apart from the project Despo and me will be doing, we will try to attend events around the different development communities in Madrid and maybe pay a visit to one or two friends while we are there.

From now on I will be blogging, apart from my usual short and controversial posts about my journey, so stay tuned!

Wed, 16 Mar 2011 00:00:00 -0700 http://ecomba.org/blog/2011/03/16/on-the-road-again/
Negative thinking http://ecomba.org/blog/2011/03/14/negative-thinking
Preconceived notions are the locks on the door to wisdom.
~ Merry Browne

In a recent conversation I felt uneasy hearing negative comments like "Doesn't he know about investment?" , "That marketing campaign has been done really badly" and similar comments.

Although some of these negative comments had a core of truth in them, they where utterly useless for the conversation and actually only caused the conversation to move into the wrong direction for a while (luckily it was caught by some of the more mature participants).

It is common in some people to think in negative terms, it seems to be a cultural aspect of western cultures, which help in some occasions, but when trying to have a productive work related discussion they only interfere with the goal.

When you conduct a meeting you should try to weight very careful what you say, how much emphasis and emotion you put in your words. Failing to do so only will lead to a battle of egos, strife and bad mood (very unproductive if you ask me).

If you are faced with problems like these I highly recommend reading Six Thinking Hats by Edward de Bono. It is a marvellous technique where you try to focus on different aspects of the issue at hand. You can also read more about it on the wikipedia page.

Mon, 14 Mar 2011 00:00:00 -0700 http://ecomba.org/blog/2011/03/14/negative-thinking/
Last day in the gardens of Eden http://ecomba.org/blog/2011/03/11/last-day-in-the-gardens-of-eden
Feeling gratitude and not expressing it is like wrapping a present and not giving it.
~ William Arthur Ward

Today was my last day at Eden Development and I leave with a strange feeling of sadness and happiness which surround me at the same time.

My time at Eden has been really great and I will miss you guys a lot; you mean a lot to me.

I just wanted to express my gratitude to all of you for the support, the good times, the hairsplitting, the "refactor the code away" moments, our smiles and tears. You are some of the finest people I have had the pleasure to share my journey with!

New horizons are ahead, and I look at my future with awe and excitement; once again I am jumping in at the deep end to explore a new path in my long road.

Fri, 11 Mar 2011 00:00:00 -0800 http://ecomba.org/blog/2011/03/11/last-day-in-the-gardens-of-eden/
User Experience http://ecomba.org/blog/2011/03/09/user-experience
If you want to understand democracy, spend less time in the library with Plato, and more time in the buses with people.
~ Simeon Strunsky

When we talk about User Experience most people have design and screen/application flow in their heads. If you are lucky the people you talk to will realise that you are not talking about how beautiful the screens in the application look like. Last time I checked there was no screens, flow, design, in the terms user and experience.

As the term says we are dealing with the experience a user is having. Look at what the wikipedia has to say about User Experience

User experience (UX) is about how a person feels about using a system.

What about the poor developer who has to use your library? What experience are you providing? Have you ever thought that this can be expanded to any experience?

Next time you talk to customers, colleagues, your boss, or you are designing this very fancy library for others to use, consider the experience you are providing to the people having to use your system.

What experiences are you giving the world around you?

Wed, 09 Mar 2011 00:00:00 -0800 http://ecomba.org/blog/2011/03/09/user-experience/
Frameworks are evil http://ecomba.org/blog/2011/03/08/frameworks-are-evil
Evil is unspectacular and always human
And shares our bed and eats at our own table.
~ W.H. Auden

Are frameworks evil?

The short answer: Yes

The long answer: No

Frameworks lessen the setup burden and the plumbing work you have to do when you are working on a proyect. They give you many advantages and cutting edge which, with sufficient knowledge and skill you can tap on.

The problem comes when you are blindly following what a framework gives you and you forget your better design skills (like OO or functional skills) to just follow blindly recipes from a given framework.

Don't let a framework dictate over your design decissions, don't let it rule over your OO. Work with it and you'll do great!

Tue, 08 Mar 2011 00:00:00 -0800 http://ecomba.org/blog/2011/03/08/frameworks-are-evil/
Spec-ing Blocks http://ecomba.org/blog/2011/03/07/spec-ing-blocks
Truth exists, only falsehood has to be invented.
~Georges Braque

Have you ever tried to spec a block?

When I was writing the specs for my blog I was faced with this problem. So I started to dig around a little bit...

I wanted my blog to read it's posts from flat files in the filesystem (inspired by jekyll ) so I had to fetch all the files in a certain directory, but how?

It turns out to be much simpler than expected, let's actually look into this in reverse order (i.e. lets see the code first):

Dir.glob("#{File.dirname(__FILE__) + '/../../posts/*.yml'}") do |file|
  post = Post.load_from_file(file)
  ...
end

So basically we want to iterate over all the YAML files in the posts directory and pass it to a block to initialize the Post objects into a collection. How do we write a spec for that?

It happens to be very simple indeed (so forget about looking for gems that fake the filesystem and other creatures of prey).





Mon, 07 Mar 2011 00:00:00 -0800 http://ecomba.org/blog/2011/03/07/spec-ing-blocks/
Time http://ecomba.org/blog/2011/03/07/time
What then is time? If no one asks me, I know what it is. If I wish to explain it to him who asks, I do not know.
~Saint Augustine

This weekend I had a nice and very philosophical debate with Despo and Stuart. We started talking about a lot of different things, but eventually ended talking about the existence of time. This made me go back home and start reading...

Aparently there are two schools of thought when it comes to time, one states that time is part of the fundamental stucture of the universe, a dimension in which events occur in sequence.

The second school of thought is much more challenging and interesting. Time is not an actual dimension or entity that flows, but rather an intellectual concept which allows us to compare events.

Antiphon the Sophist , in a fragment preserved from his chief work On Truth held that: "Time is not a reality (hypostasis), but a concept (noêma) or a measure (metron)."

I would recommend you reading J.M.E. McTaggard's The Unreality of Time as he makes some really nice assertions as of why time cannot exist.

Mon, 07 Mar 2011 00:00:00 -0800 http://ecomba.org/blog/2011/03/07/time/
About Leadership http://ecomba.org/blog/2011/03/04/about-leadership
Leadership is action, not position.
~Donald H. McGannon

There are no Leaders.

People follow other people because they feel attracted to the ideas and ideals of others. A so called Leader only exists because there are people who a genuinely attracted to what the the leader stands for.

A Leader is genuine, says what she means, acts in a way true to her believes, listens to other people and has time for them, and above all, she is a great follower.

Some people try to force leadership, their proclaim themselves leaders. They listen to themselves, disregarding people around them; their only concern is attracting more people to them. Run away from them!

Some act in their humble way, not thinking about leadership. They have strong believes, act upon them, and humbly accept their mistakes. They learn, share and listen to what people around them have to say. Listen to them!

Fri, 04 Mar 2011 00:00:00 -0800 http://ecomba.org/blog/2011/03/04/about-leadership/
Are you worth it http://ecomba.org/blog/2011/03/02/are-you-worth-it
When a man does not know what harbor he is making for, no wind is the right wind.
~Seneca

Many service companies and contractors charge a daily (or weekly) fee for their services. Most agile advocates cloud this with the notion that their customers are paying for the value they are getting, but at the end of the day, no matter how they put it, customers pay for their time; rarely for the real value they are getting out of the deal...

Have you ever thought about the value you really give to your customers or your employer?

Are you worth the fee you charge? What business advantage does your customer gain for having you on board?

If you charge for time stop selling the value Spiel.

Wed, 02 Mar 2011 00:00:00 -0800 http://ecomba.org/blog/2011/03/02/are-you-worth-it/
Happy Birthday Corey http://ecomba.org/blog/2011/03/01/happy-birthday-corey
Birthdays are good for you. Statistics show that the people who have the most live the longest.
~Larry Lorenzoni

This is just a special little post for a special friend, who has always infected me with good mood and the courage to step over my shadow, fool my resistance and do what really defines me...

Happy birthday Corey!


May you live long and prosper!

Tue, 01 Mar 2011 00:00:00 -0800 http://ecomba.org/blog/2011/03/01/happy-birthday-corey/
Stretching myself with Colemak http://ecomba.org/blog/2011/02/28/stretching-myself-with-colemak
No matter how one may think himself accomplished, when he sets out to learn a new language, science, or the bicycle, he has entered a new realm as truly as if he were a child newly born into the world.
~Frances Willard, How I Learned to Ride the Bicycle

After reading many blog posts on how great the colemak keyboard layout is I decided it was time to give it a go. And what a trip into incompetence this has been so far...

Last weekend I decided to do the switch, and as I am, I could not just go and install the layout on my Mac, no, I went through the lengths of changing the physical keys on my Mac as well (as you can see on the picture above).

I have been training in the mornings and evenings, trying to get up to speed, but it is obviously taking it's time. I hope to gain some comfortable speed in a few weeks time, so that I can switch full time to colemak (when I'm working on customer projects I'm still using good old qwerty ; I don't believe that my customers should pay for me being less productive than I could because I chose to use a new keyboard layout).

Right, I have written this blog post entirely in colemak , without looking at my keyboard, and believe me, it has taken me ages! ;)

I'll let you know how I am progressing...

Mon, 28 Feb 2011 00:00:00 -0800 http://ecomba.org/blog/2011/02/28/stretching-myself-with-colemak/
My Tools http://ecomba.org/blog/2011/02/26/my-tools
Photo by Pelipe-Bremen © All rights reserved http://www.flickr.com/photos/pelipe/ Good code is its own best documentation. As you're about to add a comment, ask yourself, "How can I improve the code so that this comment isn't needed?"
~Steve McConnell

Before I moved my blog here, Kini asked me if I could write something about my tools. I am going to try to give some insights into the tools I use in my work. As a Software Craftsman I use many tools. Let me start with the less technical ones and work down to the more specific (and technical).

Empathy

I take my time listening to my customers and trying to figure out who they are how they think. I consider it is very important to empathize with the people you are working with. When I work for a customer I listen and ask many (sometimes unrelated) questions to get a feeling about them.

Listening

Mentioned before, listening is a very important tool. Software professionals jump to quick into conclusions when dealing with customers. We tend to be very keyboard happy and want to code imediately instead of spending time listening and figure out what is really needed.

Inquiry

In order to find out what needs to be done, and more than so why, I will ask you many questions, that will help us discover what you really need. It is important to hone your inquiry skills so that you can get to the root of what your customers are asking for.

Humor

There is nothing better than having a good sense of humor. Have you ever worked with people that where to uptight to smile, let alone have a good time at work? Horrifying thought! I like to set a good working environment where I am trying to keep the mood in a positve, relaxed way. Oh, and I smile a lot!

Z Shell

While moving around in the file system I use the zshell. It is a wonderful improvement over bash.

I have tailored my zsh to suit my needs; it is colored, has a very smart auto completion and even reminds me that I have to commit to my git repo when I am working on a project.

You can check out my zsh configuration on my zsh config repo on github.

Vim

I have used many IDE's and tools for writing software over time, but at the end I returned to Vim.

Vim is a great DSL for manipulating text. It allows me to move fast when I am editing and stay focused on the keyboard.

There is nothing worse than having to move your hands away from the keyboard to press some button while coding!

There are many excuses not to code in vim:

  • It doesn't have auto-completion: Actually it does. It is not the smart type of auto-completion that you will find in a modern IDE, but it will autocomplete with similar text that appears in one of the open buffers.
  • It doesn't have a refactoring tool: Maybe it doesn't have one for your language of choice. A while ago I actually felt the same about it. I was sad that it didn't have one, so I decided to write one to change this. So maybe there isn't one for the language you are coding in right now; Go write one then, Nothing is stopping you!
  • The learning curve is to steep: That is actually true. If you have never used vim, it will be a challenge at first, but soon enough you will love it (I actually have a Google Chrome plugin that allows me to navigate the web like I was in vim!


I could go on like this forever, but I might as well leave it for future posts. ;)

Sat, 26 Feb 2011 00:00:00 -0800 http://ecomba.org/blog/2011/02/26/my-tools/
A basketcase http://ecomba.org/blog/2011/02/24/a-basketcase
The hardest thing to learn in life is which bridge to cross and which to burn.
~David Russell

Recently I have had the same conversation at least twice in different places. Once on the DevOpen Madrid and in a recent discussion about a client projects design decision. In both discussions we were talking about the basket, a concept pretty known to e-commerce applications.

The most common implementations I have seen (specially if the basket has to persist over sessions) is to have an Basket object that gets populated with the items that a customer might want to buy by the end of the shopping experience.

class Basket
  def initialize
    @items = []
  end

  def add(item)
    @items << item
  end
end

Trouble with this code is that it does't really do much for us but hold a list of items, something a good old Array could do perfectly well for us.

J.B Rainsberger might say that using a Array would be a case of primitive obsession and Kevin Rutherford would argue that with his Open Secret analogy.

But is it? Is there a reason to have a Basket object if it is just a data holder?

I usually like my objects to contain logic in them, not just hold data; I like to model the domain so that the objects are close to the data, but are not just data containers.

I want to play with the idea that I want to create a basket object that would fit into my world view. Let's suppose there is an Order that contains line items:

class Order
  def initialize(line_items)
    @line_items = line_items
  end
  #... more intelligent stuff here
end
          
class LineItem
  def initialize(item)
    @item = item
  end
  #... more intelligent stuff here
end

The order class is very similar to the basket class, but there is a small difference (not only the semantical difference of an order vs. a basket), the order is inmutable (once ordered you can usually only cancel your order, not amend to it. Unlike the basket where you can keep on adding items as you shop.)

In many occasions I have said that I would rather not use a Basket case, sorry class, as it would only be a data holder, let me explore though a Basket class that is a little closer to our ordering system which maybe makes more sense to have.

Sometimes we want to persist the data for our users so that they can access their basket at a later stage. We could sort this out with a token (as a cookie) and have this token in the basket so that we can recognise the basket at a later moment (i.e. when the customer comes back to the site and wants to continue shopping).

class Basket
  def initialize(token)
    @token = token
  end

  def self.for_customer_with(token)
    # logic for finding this in the database
  end
  #... more intelligent stuff here
end

Things start being interesting when the basket starts calculating how much the total order would cost; we add the prices of the items in the basket and total them. Can you see the problem coming?

Once we create an order, that order will calculate the total amount as well!

Ok, ok, you can always argue that if we pass a Basket object to the Order we will not have that problem as the Order can allways ask the basket.

class Order
  def initialize(basket)
    @basket = basket
  end

  def total_price
    @basket.total
  end
  #... more intelligent stuff here
end

Now, there can be a problem with all this. I was told by two friends recently, that in their application a registered customer can see how much her order will cost (including VAT, shipping costs, etc.) at any point.

Suddenly calculating the total price of an order becomes more complex and we are in danger of loosing our D.R.Y. -ness as we will have all the calculations scattered all over the place.

This is the moment where a new object comes into life (at least it does in my head while I am sitting here thinking about this problem), the price calculator. The price calculator will collate all the information to be able to tell us what the different prices will be.

Let's look how this would look like in practice.

class Basket
  def initialize(user, price_calculator)
    @user, @price_calculator = user, price_calculator
    #... more intelligent stuff here
  end

  def total_price
    @price_calculator.calculate_for(@user).with(@items).the_total_price
  end

  def shipping_costs
    @price_calculator.calculate_for(@user).with(@items).the_shipping_costs
  end
  #... more intelligent stuff here
end

class Order
  def initialize(basket)
    @basket = basket
  end

  def subtotal
    @basket.subtotal
  end

  def total
    @price.total_price
  end
end

As you can see from all this basket examples, if we can model our responsibilities properly we can create a basket class that is more than just a data holder and suddely is able to perfor more sophisticated operations, which would mean that we actually can use a basket in our domain model without it beeing a meaningless data holder.

So maybe I was wrong with my initial reaction that you should never ever have a Basket object in your application ;)

Thu, 24 Feb 2011 00:00:00 -0800 http://ecomba.org/blog/2011/02/24/a-basketcase/
One year ago - Remembering http://ecomba.org/blog/2011/02/23/one-year-ago---remembering
It's just a feeling I get sometimes
A feeling sometimes
And I get frightened
Just like you I get frightened too
but there is...
No time for heartache
No time to run and hide
No time for breaking down
No time to cry
Everything will be alright
Everything will turn out fine
Some nights I still can't sleep
And the voices pass with time
And I keep
No time for tears
No time to run and hide
No time to be afraid of fear
I keep no time to cry

...missing you...

Wed, 23 Feb 2011 00:00:00 -0800 http://ecomba.org/blog/2011/02/23/one-year-ago---remembering/
Be who you are http://ecomba.org/blog/2011/02/22/be-who-you-are
Often people attempt to live their lives backwards; they try to have more things, or more money, in order to do more of what they want, so they will be happier. The way it actually works is the reverse. You must first be who you really are, then do what you need to do, in order to have what you want.
~Margaret Young

I wanted to add something to this, but Margaret Young explains it better than I could possibly do.

Are you who you really are? Are you doing what you need to do?

Do it, it is liberating…

Tue, 22 Feb 2011 00:00:00 -0800 http://ecomba.org/blog/2011/02/22/be-who-you-are/
Thank you! http://ecomba.org/blog/2011/02/17/thank-you!
The smallest act of kindness is worth more than the grandest intention.
~Oscar Wilde

Yesterday I announced to my friends at Eden Development my plans for my Long Journey and published a post with the same name.

A few minutes (maybe an hour) after posting it I was overwhelmed by the reaction it had in the internet:

  • I spent about half an hour talking to a support guy to get my blog up and running again as it had fallen over due to the load.
  • I got featured in twitter trends Madrid!
  • My friends from all over the world and twitterverse send me messages of encouragement.

Right now I am sitting here at home in the morning, listening to Changes from Black Sabbath and I can only find words of gratitude to all of you.

My road lies infront of me.

Soon I will update my website sharing a little bit at a time what I am going to be up to.

Thank you, thank you, thank you so much for giving me the strength to do this!

Thu, 17 Feb 2011 00:00:00 -0800 http://ecomba.org/blog/2011/02/17/thank-you!/
The Long Road http://ecomba.org/blog/2011/02/16/the-long-road
I am of the opinion that my life belongs to the whole community and as long as I live, it is my privilege to do for it whatever I can. I want to be thoroughly used up when I die, for the harder I work the more I live.
~George Bernard Shaw

For years I have been thinking about a way of working and living. I was very envious of Corey Haines when he started journeying and I still remember or conversations (he kept on saying I should just go and journey as he was). At the time though I didn’t have the courage to make the step of changing the way I wanted to change. Something else had to happen so that I could summon all the strength I needed to jump into action and overcome the barriers my resistance was putting infront of me.

When my mother died last year my thoughts kept on coming back to the plans that I had envisioned about what I would love to do with my life and how I would like to help people.

Over the course of this past year this little voice in me has become stronger and stronger, not letting the resistance take over, to the point where I feel I have to do something about it. Things have to change.

Those of you who know me, know that I am a strong believer in helping other people achieving their potential and sharing my knowledge with others.

The time has come for me to embark into a new chapter of my journey. I want to start journeying more and working with other people sharing what I know and learning from them their ways of working, I want to speak more often in different local user groups, conferences and to anyone who wants to listen. Moreover I want to change the way I charge for what I do. You should not pay for my time, but for the value I bring to you and your project or product.

It will come to a surprise to some of you, I am leaving Eden Development. I am starting a new chapter in my journey, a new adventure in my long road. In the next months I will be explaining more and more the nature of this new adventure and what I am going to do from now on.

Being part of Eden Development has been a great experience and I am very grateful for all the good moments, the things we have learned and the journey we shared. I will really miss being at the workshop with all of you guys; but I will be back (at least now and then to visit and have a great time)!

Wed, 16 Feb 2011 00:00:00 -0800 http://ecomba.org/blog/2011/02/16/the-long-road/
Pair Programming http://ecomba.org/blog/2011/02/15/pair-programming
To disagree, one doesn’t have to be disagreeable.
~Barry M. Goldwater and Jack Casserly, Goldwater

I was pairing with a developer who was shouting every now and then “Child!” when I cracked a joke or simply because I was having fun developing software. At first this comments troubled me, but then I realised that I felt sad for him; he has surrounded himself by far to many walls and is unable to feel free and save while working…

This session was meant to show, in a funny way, different anti-patterns of pair programming; you have someone whose face is hidden from behind you acting as your arms, the midget in front is controlling legs with their own arms.

Here are some of the anti-patterns we had prepared for the talk:

Karl the Keyboard Hog

Karl cannot let loose from the keyboard, no matter hard you try (even when you have two keyboards), he will always type while you are trying (or it is your turn) to code. He is not a mean person, just very nervous and trying to code away. Usually Karl is very impatient and just cannot wait for you to finish typing, so he jumps just right into it without asking for permission.

Gustav the glutton

Somehow Gustav cannot stop eating. He will be eating all sorts of messy food, leaving the desk full of crumbles, the keyboard sticky with chocolate… He must have a high powered brain or something, because his apetite seems insatiable and there seem not to be enough cookies and other edibles enough in the world to keep him from eating while programming.

Piggy Paul

Higiene becomes an issue when you work closely to another person. Examples like not brushed teeth, smoking, armpits and any other unpleasant body odor characterises this friendly pairing partner. When pairing with him you wish he had a working shower and soap at home, or at least a chewing gum…

Ralph the righteous man

Ralph is always right and will not let you have it your way, no matter what. Not only that, Ralph, because he is superior to you, will talk you down and treat you like some annoyance that he was forced to work with.

Silent Bob

Silent Bob never talks, he seems to believe that you can follow everything he does while he is coding, well it’s obvious, his code is readable, right? When he is navigating he keeps his mouth shut, enjoying the views…

Gustin and me where laughing a lot while picturing the scenarios of this talk, sometimes a tear or two would roll down my cheek when we where describing how we would play through this situations. If you would like us to do this session some day, I am convinced Gustin and me would be delighted to offer this hilarious session of laughter and truths in which you would see many of these patterns (and more)!

Tue, 15 Feb 2011 00:00:00 -0800 http://ecomba.org/blog/2011/02/15/pair-programming/
10 years of agile http://ecomba.org/blog/2011/02/14/10-years-of-agile

What a person believes is not as important as how a person believes.
~ Timothy Virkkala

This past weekend it was the 10th anniversary of the birth of the term agile software development.

In this last 10 years of my journey I have gone through many transformations. I first thought about the specifics, the techniques and how they would make me work more efficiently; the different methodologies I studied and applied showing me the best way of working *

Slowly I went back to my eXtreme Programming roots and I started concentrating on the values and principles shared by 17 great individuals in Snowbird. After a long time searching my path led me to a fine group of individuals and a great community of professionals who really care about what they do.

Today, more than ever before, I believe that agility and craftsmanship are not a set of techniques and tools, but a mindset that defines you in every aspect of your life.

Times change constantly, we evolve and learn new things in each step in our personal journeys; as Charles Darwin said:

It’s not the strongest of the species that survive, but those most able to adapt.


* We all seem to forget that Fred Brooks told us long ago that there is No Silver Bullet
Mon, 14 Feb 2011 00:00:00 -0800 http://ecomba.org/blog/2011/02/14/10-years-of-agile/
The Resistance http://ecomba.org/blog/2011/02/11/the-resistance

I must not fear. Fear is the mind-killer. Fear is the little-death that brings total obliteration. I will face my fear. I will permit it to pass over me and through me. And when it has gone past I will turn the inner eye to see its path. Where the fear has gone there will be nothing. Only I will remain.
~ Dune Chronicles

Recently I have been reading most books by Seth Godin which has been a great inspiration for me. In one of his books, Linchpin he talks about The Resistance which can be attributed to the reptilian part of our brain.

Alberto Peña has already written about how The Resistance manifests itself (alas in Spanish) so I will not talk about The Resistance per se in this post, but dwell into our brain and try to explain why this is and how it is wired into us.

Let’s examine our brain!

The reptilian brain the oldest of the three main parts of our brain, controls the body’s vital functions such as heart rate, breathing, body temperature and balance. Our reptilian brain includes the main structures found in a reptile’s brain: the brainstem and the cerebellum The reptilian brain is reliable but tends to be somewhat rigid and compulsive.

At least five human behaviours have their origin in the reptilian brain. In our day to day activities they find expression in:

  • obsessive-compulsive behavior
  • personal day-to-day rituals and superstitious acts
  • slavish conformance to old ways of doing things
  • ceremonial re-enactments
  • obeisance to precedent, as in legal, religious, cultural, and other matters
  • responding to partial representations (coloration, “strangeness,” etc.), whether alive or inanimate
  • and all manner of deception

The “language” or the communication protocol of the reptilian brain is visual, it does not understand spoken language, thoughts, etc.

The limbic brain can record memories of behaviours that produced good and bad experiences, so it is responsible for our emotions. The main structures of the limbic brain are the hippocampus the amygdala and the hypothalamus The limbic brain is the seat of the value judgments that we make, often unconsciously, that exert such a strong influence on our behaviour.

The neocortex first assumed importance in primates and culminated in the human brain with its two large cerebral hemispheres that play such a dominant role. These hemispheres have been responsible for the development of human language, abstract thought, imagination, and consciousness. The neocortex is flexible and has almost infinite learning abilities. The neocortex is also what has enabled human cultures to develop.

And The Resistance?

The reptilian brain, as we have seen, is in charge of our basic survival, it doesn’t understand language or the things we experience. It’s only care is that we continue living and protecting us from harm.

On top of it, being our most ancient brain system, it is the strongest part in our daily decision making. It will control you and impede you from making risky decisions, change the way you act in life. It is that part that wil make you procrastinate.

Successful authors are usually plagued by The Resistance having trouble writing the next book after their recent success. It’s one of the classical workings of the reptilian brain noticing that there is something that is troubling the author and making him question the very reason to write again (Will my book be as good as the previous one?).

When deciding things in life, changing, or procrastinating, know that it is most of the time your most ancient survival mechanism trying to protect you. You have to learn how to overcome it’s impulses and lure it into the actions you want to take.

It is hard to step over one’s nature, but you can do it!

Fri, 11 Feb 2011 00:00:00 -0800 http://ecomba.org/blog/2011/02/11/the-resistance/
Expose your Ignorance the power of learning http://ecomba.org/blog/2011/02/10/expose-your-ignorance-the-power-of-learning
Every act of conscious learning requires the willingness to suffer an injury to one’s self-esteem. That is why young children, before they are aware of their own self-importance, learn so easily.
~Thomas Szasz

Learning new things, your journey, is a path with it’s ups and downs. Ignorance, the feeling that we don’t know something and the anxiety it causes to most of us, is deeply ingrained in our society. We are supposed to deliver, to know what we are doing, be good at it. But more often than not, specially when we are starting, this is not like this.

In Chad Fowler’s fantastic book, The Passionate Programmer he gives the advice to be the worst programmer in a team following the advice the legendary jazz guitarist Pat Metheny gives to young musicians:

Always be the worst guy in every band you’re in

Being the worst in a team gives you the chance to learn from people you really look up to, people that will have so much to share. Imagine you are given the chance to code with your all time heroes; the things you would learn!

During my years of programming I have come to realise that when I learn the most is when I truly embrace my ignorance and in some ways let my ego go away. I expose myself to the new environment and try to become a sponge and absorb as much as I can.

Exposing your ignorance is a big step away from your ego that you have to internalize for yourself. It might not be easy at the beginning.

It is very liberating to say that you don’t know something. Give it a go today!

Ask someone to help you with something you don’t know, look out for people that can help you better yourself, empty your cup and get rid of your ego, it’s worth it!

Thanks to Amalia Hernandez for asking me to write about this!

Thu, 10 Feb 2011 00:00:00 -0800 http://ecomba.org/blog/2011/02/10/expose-your-ignorance-the-power-of-learning/
Your first language http://ecomba.org/blog/2011/02/09/your-first-language
Always walk through life as if you have something new to learn and you will.
~Vernon Howard

I was talking to someone who wants to learn a new language the other day. He was telling me that he wanted to learn Ruby , Javascript , Clojure maybe Haskell and a whole array of different languages.

Programming languages are like natural languages in a way. I speak quite a few natural languages and I am in the process of learning another one (Japanese). I think it would be mad, if I tried to learn Japanese , Mandarin , Hindi and Swedish all in the same year! I might retain a word or two from each language, but at the end of the day my mind would be no better than poor Salvatore’s

If you want to learn a new language, or say your first language choose wisely. Are you learning it to be able to sell yourself better Or are you trying to bend your way of thinking into a direction that you haven’t explored yet?

Stick to that new language for some time, make a lot of exercises, try writing a bigger application to prove that you have understood the underlying principles of that language. Once you feel comfortable with it, go ahead and jump to the next one!

Wed, 09 Feb 2011 00:00:00 -0800 http://ecomba.org/blog/2011/02/09/your-first-language/
The power of a smile http://ecomba.org/blog/2011/02/01/the-power-of-a-smile
Too often we underestimate the power of a touch, a smile, a kind word, a listening ear, and honest compliment, or the smallest act of caring, all of which have the potential to turn a life around.
~ Leo F. Buscaglia

When was the last time you smiled at a total stranger?

I remember the first week after I came back from living for a couple of years in Africa. I was walking the streets of the society I was born in, a place where you can become whatever you choose to become, with a social system in place that will help you and support you, a place most people of most countries in the world would give anything to be able to live in.

And yet you could barely see someone smiling. People walking the streets with grim faces, stressed, engulfed in a way of living that has removed them from their humanity. I felt saddened…

And yet, when riding the bus or the underground, whenever I made eye contact with a young mother with her child, an elderly man going to the park or just about anyone, I could not resist but give them an acknowledging smile. This simple act lightened up their faces, at least for a brief moment, and the smile was returned; there was a small connection between us, sharing a moment of little recognition and joy.

Smiling is a very powerful behaviour that is deeply ingrained within us. There are many advantages about having a smile on your face (note that I am referring to genuine smiles, and not the so called Pan American Smile ).

Why you should smile!

  • Smiling helps you stay positive. When you are smiling negative thoughts have a hard time disturbing you.
  • Smiling is contagious, when you smile, even at a stranger, you will get a smile back!
  • Smiling apart from helping you staying positive, will make your mood change.
  • For the single ones, smiling makes you more attractive
  • Smiling has known heath benefits; it boosts your immune system, lowers blood pressure, releases endorphins, natural pain killers and serotonin.

This post was inspired by a tweet from Raquel Laina :

Thanks as well to Amalia Hernandez for reminding me that I should post my thoughts! :)

Smile today, and everyday!

Tue, 01 Feb 2011 00:00:00 -0800 http://ecomba.org/blog/2011/02/01/the-power-of-a-smile/
Finding your Strengths http://ecomba.org/blog/2011/01/31/finding-your-strengths

Recently I have been talking to a few people on the value of knowing your strengths. Some of us, who spend a lot of time reflecting on themselves, about themselves and trying to better themselves might have already figured out, but a lot of people have not.

Even though you might know, or believe you know exactly who you are and in which areas you are good at, it is good that someone points these out to you sometimes.

Usually we concentrate to much in the things we are not good at, in the things we need to get better. What about changing that and only concentrating on the things that really make you tick? The things you are good at.

If you’d spend half of the time you spend in becoming better at the things you are not good at wouldn’t you be just awesome? How would wo see the world? Would you not become a great leader in some way?

Think about it, maybe it is time you invest in yourself!

Mon, 31 Jan 2011 00:00:00 -0800 http://ecomba.org/blog/2011/01/31/finding-your-strengths/
They just dont get it http://ecomba.org/blog/2011/01/30/they-just-dont-get-it

While I was cleaning up my home office a though struck me that I felt I needed to share.

In recent conversations with different people about the comings and goings in some mailing lists I have heard the common comment when people discuss some theme:

They just don’t get it!

This made me think about what exactly this apparently stupid people don’t get. Now, don’t get me wrong, I don’t really think they are stupid, but when you make a comment like this you are implying it.

Are you sure they don’t get it? What makes you so sure you just could not explain your point. Is your point actually valid at all?

Next time someone doesn’t agree with your worldview maybe you should just introspect and ask yourself what and how you where trying to get your point across...

Sun, 30 Jan 2011 00:00:00 -0800 http://ecomba.org/blog/2011/01/30/they-just-dont-get-it/
Farewell http://ecomba.org/blog/2010/02/26/farewell
Water washed you upon the shores of this earth
were you walked erect with the gusts of wind caressing your hair
now in flames you go from us never to be forgotten.
Fri, 26 Feb 2010 00:00:00 -0800 http://ecomba.org/blog/2010/02/26/farewell/