10 Pines Blog

The Backlog Guy

agile product management backlog

Introduction

Yeah, this is how everyone called me in my latest gig. You want to hear the story? (I heard yes). It was a green field, ambitious project that was going to be performed differently than other projects in the same organization, using design thinking and Agile. People (mostly business people) was thrilled. Everyone working together, designing this new product. After a couple of weeks of design thinking, I said, innocently, that it was time to start building a backlog. Ohh nooo. Business people panic! This obviously was going back to the old, slow and painful way of building software that was used before. Interestingly enough (I thought) the backlog is that artifact that even myself alone use for any personal project. It’s light, useful and very powerful. In this post, I won’t focus on the psychological reasons of the freaking out. I will just focus on the backlog.

9 Apr 2015

Essence-driven Development

programming development essence learning

Something that has always seemed motivating is the feeling that my way of doing things generally maintained good adaptability. Throughout my years of study at the University, and later in 10pines, I realized the type of programmer who I want to be.

Many aim to learn Object-Oriented Programming, Functional Programming, or a particular programming language, but this profession is characterized for being constantly changing. For my part, I have always wanted to be sure I’m prepared to face any challenge. Therefore, my way to learn always relies on capturing the essence of knowledge.

18 Feb 2015

Java generics and inheritance (part 2)

java generics oop reflection

On the first part of this article I explained why java generics don’t allow up-casting for generified types. In this part we will see why, arrays don’t have that restriction, and the implications for reflection.

But arrays…

If generified lists aren’t allowed to up-cast, why arrays are?
The reason is very simple: arrays don’t erase their element type. At runtime, each array knows exactly which kind of element it should allow in. If you try this code:


String[] stringArray = new String[1];
Object[] objectArray = stringArray; // Perfectly normal

The compiler allows you to up-cast. What if we try to put something in the string array, that is not a string?

2 Dec 2014

Java generics and inheritance (part 1)

java generics oop reflection

Types, Sets, variables and casting

When you use a compile-time typed language, like Java, you expect that types in each variable will help you by restricting the possibilities for a value. Instead of being able to do everything, you want to do things that are valid in your domain.

Discussions aside about strong vs weak typing, when you code with types you think of types as sets. A variable can be one of the elements of the implicit set for its type. Thus Integer a means that variable ‘a’ will be one of the elements in the Integer set, and only that.
If you have a String variable ‘a’ and want to assign its value to a variable ‘b’ of type Object:

String a = "A";
Object b = a;

2 Dec 2014

MVP's: The Real Deal

lean mvp agile

We all know how it goes: An idea strikes our mind, and before we notice, hands are already on our keyboard, our favourite IDE wide open, (luckily a bit of brainstorming) and a product is born.

Yeah yeah, we all know we should hold the horses and make some state-of-the-art research. With ease we talk ourselves into believing that most of it sucks (compared with the product in our minds). We can do it way better, and everyone will love it, because everyone needs it. Code-blocks on it!

7 Nov 2014

Lean Sales Up - Ágiles 2014

agile

El proceso de preventa puede ser doloroso, largo y costoso. Es el primer punto de negociación. Hay que convencer al otro que somos la mejor opción. Y hay que ajustar las expectativas siempre altas del cliente. Sin embargo existe una forma de mejorar y llegar a un balance, donde el cliente y el proveedor se sientan seguros y conformes. En esta sesión exploraremos como conjugar el proceso delicado y “costoso” de la venta con los principios ágiles de lean.

28 Oct 2014

Trust in objects. They have the right to decide.

Real devs don’t use if. This slogan was my first contact with 10Pines, much earlier than the start of my apprenticeship residence. The first time I heard it just made a lot of noise in my head. Why would somebody want to eliminate the if? What wrong could this little poor word do to us?

My goal with this post is to demonstrate why a real developer wouldn’t want to use if. For this I will explain some of the benefits obtained by the usage of an alternative: Let the object take the decisions.

20 Oct 2014

Mixins or Traits? That is the Question

trait mixin java inheritance behavior interfaces

A couple of days ago, a discussion came up in an uqbar foundation[^1] mailing list about the Java 8 Interfaces Default Methods. They were named as «mixins», but I corrected them and called «traits without flattening».

After sending the mail, that last sentence kept ringing in my head, so I proposed myself to try to understand why was I calling them like that. But first things first.

14 Oct 2014

Symbols: the new return codes? (Pt. 2)

ruby nil closures symbols exceptions

Flow control with exceptions and closures

In this previous post we’ve considered the benefits and inconveniences of using nil and symbols as return values in a method. Now we’ll evaluate the possibility of throwing an exception, and yet another alternative: using a closure.

29 Sep 2014

Symbols: the new return codes?

ruby nil closures symbols exceptions

Recently I’ve read a tweet from Yehuda Katz in which he suggested an interesting idea, as an alternative for using nil as a result from a method: to use a symbol instead.

Well, this post is about the reasons why I think you shouldn’t use a symbol, and why even returning nil is a preferable option.

24 Sep 2014