Kevlin Henney

This video below from Kevlin Henney really sums up the way I feel about how software development works, or sometimes does not. Kevlin also dips back through the history of computing touching on things I experienced first hand when they were new. Which adds a fun and very relevant dimension to a fantastic lecture.

Watch it, its great.

GeeCON 2014: Kevlin Henney – Worse Is Better, for Better or for Worse

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

Ever tried Tribes, Squads, Chapters & Guilds in an existing culture?

I was reading this old article from by Henrik Kniberg and Anders Ivarsson. When you look around its still years ahead of what most organisations are doing. Spotify have moved on since too I suspect.

So I began to wonder if anyone has ever attempted this at an existing organisation? I.e. Not by setting up from new startup? Probably not many, less with 200+ employees and possibly never with serval thousand. I got close to being allowed once. Would love a second chance. I suspect it would require a committed business, perhaps a desperate one.

If a place had no choice perhaps. In such a difficult spot that the only choice was to attempt a huge cultural shift or go bust?

There was a good Java Posse Podcast the other day on this very subject. My main take away was its pretty rare to move away from a hierarchy.

So what are the conditions for attempting this at an organisation? Anyone ever been involved in such an attempt now or in the past? Do you know somewhere that wants to try it?

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

MeanBean easy way to test domains

Stumbled across this easy way to test domains, its called MeanBean

Typically many projects don’t bother with testing domain classes. They hope that other tests in the suit will do that. Perhaps, but I have found many bugs with hashcode and equals over the years. It’s very dull testing these beans there has to be a better way!

Meanbean from Graham Williamson makes it possible to do it in one class.

Given these two simple domain classes

public class PersonId {
	private long id;

	public PersonId() {
	}

	public long getId() {
		return id;
	}

	public void setId(long id) {
		this.id = id;
	}

	@Override
	public boolean equals(Object o) {
		if (this == o) return true;
		if (o == null || getClass() != o.getClass()) return false;

		PersonId personId = (PersonId) o;

		if (id != personId.id) return false;

		return true;
	}

	@Override
	public int hashCode() {
		return (int) (id ^ (id >>> 32));
	}

	@Override
	public String toString() {
		return Objects.toStringHelper(this).add("id", id).toString();
	}
}

public class Person {
	private PersonId personId;
	private String firstName;
	private String surName;
	private String middleName;

	public Person() {
	}

	public PersonId getPersonId() {
		return personId;
	}

	public void setPersonId(PersonId personId) {
		this.personId = personId;
	}

	public String getFirstName() {
		return firstName;
	}

	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}

	public String getSurName() {
		return surName;
	}

	public void setSurName(String surName) {
		this.surName = surName;
	}

	public String getMiddleName() {
		return middleName;
	}

	public void setMiddleName(String middleName) {
		this.middleName = middleName;
	}

	@Override
	public boolean equals(Object o) {
		if (this == o) return true;
		if (o == null || getClass() != o.getClass()) return false;

		Person person = (Person) o;

		if (firstName != null ? !firstName.equals(person.firstName) : person.firstName != null) return false;
		if (personId != null ? !personId.equals(person.personId) : person.personId != null) return false;
		if (middleName != null ? !middleName.equals(person.middleName) : person.middleName != null) return false;
		if (surName != null ? !surName.equals(person.surName) : person.surName != null) return false;

		return true;
	}

	@Override
	public int hashCode() {
		int result = personId != null ? personId.hashCode() : 0;
		result = 31 * result + (firstName != null ? firstName.hashCode() : 0);
		result = 31 * result + (surName != null ? surName.hashCode() : 0);
		result = 31 * result + (middleName != null ? middleName.hashCode() : 0);
		return result;
	}

	@Override
	public String toString() {
		return Objects.toStringHelper(this)
				.add("personId", personId)
				.add("firstName", firstName)
				.add("surName", surName)
				.add("middleName", middleName)
				.toString();
	}
}

This is the meanbean domain test. This tests all set/get methods and the hashcode and equals

public class testDomain {

	@Test
	public void testDomain () {

		Configuration configuration = new ConfigurationBuilder()
				.iterations(10).build();

		final BeanTester beanTester = new BeanTester();
		EqualsMethodTester equalsTester = new EqualsMethodTester();
		HashCodeMethodTester hashTester = new HashCodeMethodTester();

		beanTester.testBean(PersonId.class);
		equalsTester.testEqualsMethod(PersonId.class);
		hashTester.testHashCodeMethod(PersonId.class);

		beanTester.testBean(Person.class);
		equalsTester.testEqualsMethod(Person.class);
		hashTester.testHashCodeMethod(Person.class);
	}

}

How easy is that? No excuse not too test that domain now!

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)

Loadstone – An interesting collaboration between Finance IT and Open Source

I wish this interesting new initiative much luck: http://lodestonefoundation.wordpress.com/

Banks already use a huge amount of open source. Linux has been used extensively for a long time, services are hosted with Apache and Tomcat. Server side software makes extensive use of a massive plethora of open source libraries. Finally developers are left to wire all this together and write a small amount of business code. UI/UX is possibly an exception to that rule in Single Dealer Platforms. The need for highly performant and glossy visuals helps make the case for using Microsoft or Adobe technologies.

There are plenty of attempts at open source projects in this space. Nothing that seems to have really taken off on the scale that Loadstone seems to be attempting though.

I strongly believe that its through genuine open collaboration like this that truly great things arise and you could argue that for all this use of Open Source its time the industry got more involved and payed back. What better way than to start something and contribute effort and funds. So good luck to this attempt to collaborate and produce something I hope it works out.

Digg This
Reddit This
Stumble Now!
Buzz This
Vote on DZone
Share on Facebook
Bookmark this on Delicious
Kick It on DotNetKicks.com
Shout it
Share on LinkedIn
Bookmark this on Technorati
Post on Twitter
Google Buzz (aka. Google Reader)