Niels Roesen Abildgaard

software development and other things

Page 5


MVP Case Study: Maerker.nu - Part I

A Minimal Viable Product (MVP) is the smallest working version of a product that will provide value to the customer or user.

These case studies follow my thoughts through the development of MVPs, from idea to implementation.


The Pitch

There are several scout associations in Denmark (DDS, DGP, KFUM), and each of these have their own badges. There are groups within these associations that make and sell their own badges. For example, there is no association-backed badge for staying in a sleeping bag for 24 hours, but Rungstedspejderne, DDS made a custom one.

There is no central place to overview and find possible badges. Maerker.nu is going to be that place.

There is no monetary motivation for this project[1]. I see it as a kata in product development: an attempt at building a product to see how it goes, to learn from doing, without the risks usually involved. I am working full-time...

Continue reading →


Pseudo-Code Job Adverts

if(you == "Developer") {
  ContactUs("+4500000000")
}

Are you familiar with those job ads targeted at developers that are partly written in (bad) pseudo-code?

I previously covered one ad written entirely in C (but the original ad has now been taken down, so the content isn’t much use). Just over the weekend I witnessed two ads – on Twitter, of all places – advertising with code. Both were looking for Android developers, but the ways in which they erred differed slightly:

The first used underscore_separated_variable_names to convey a message much like the one I put as an example in the beginning of the post. The problem? Android apps are written in Java, a language with a convention for camelCasedVariableNames.

The second didn’t use pseudo-code in the ad itself, but rather contained some code as a backdrop. Again, this code (as pointed out by another tweeter) wasn’t Java, but...

Continue reading →


Deployments per Week

One of my Software Development idols, Gojko Adzic, retweeted MindMup’s tweet regarding their high amount of deployments:

@MindMup: fun fact: From January 2013 to 22nd September 2014, there were 475 deployments of MindMup source code to production. http://discover.mindmup.com/pressfacts

That’s a whopping 1.06 deploys per work day!

So I decided to look into our deployments per week - just to get an approximate comparison. We have a several different systems, but to make it a fair comparison I will look at only the call-related services we provide.

I go into this expecting that we will have more deploys over time than MindMup: just today I’ve deployed to production 4 times (and 5 times to our test environment).

The following are the results for the last 4 weeks (which is a period I am sure we have reliable statistics for):

Graph showing deploys to staging and production environments for Justfone over 4 weeks.

We see an average of 4.4 deploys to production per work day. It should be noted that our deploys to the staging environment are entirely automatic. Sometimes we will have a lot of staging-deploys close to each other, which we...

Continue reading →


Code Review (C#): 3 Job Description

Edit 2015-05-07: 3 recently posted a new job listing… with the same code.


3 Denmark recently announced a job opportunity (Danish) looking for student developers. They wrote the job description in C, which I think is fairly cool. Overall, the code looks fairly alright, and the job seems interesting, so I would recommend you apply.

I am definitely in the target category, currently being a student at the IT-University of Copenhagen on the final semester of my bachelors. I will not apply, seeing as I already have a great student job, but I will look through their code and provide some feedback.

I am fully aware that this is supposed to be a fun way of announcing a job, however it does also provide a rare look into the company’s (or at least one of their developer’s) code style.

I am mostly commenting based on Uncle Bob’s Clean Code guidelines, and I should emphasize that any code style...

Continue reading →


Is Open Source Political?

Benkler writes, in 2006, about the origin of the term “open source”:1

… more of those who participated sought to normalize [Free Software], or, more specifically, to render it apolitical. […]
“Open-source software” was chosen as a term that would not carry the political connotations. It was simply a mode of organizing software production that may be more effective that market-based production.

Simply put, open source is a term was created to be apolitical.

However, if we go to the primary source, Eric Raymond’s “original call to the community to start using the term ‘open source‘”, we see a slightly different explanation:2

The problem with [the term Free Software] is twofold. First, it’s confusing; the term “free” is very ambiguous […] Does “free” mean “no money charged?” or does it mean “free to be modified by anyone”, or something else? […] Second, the term makes a lot of corporate...

Continue reading →


Creationists’ Understanding of Past

You may have heard of the recent debate between Bill Nye and Ken Ham about Creationism and Science (and who is right).

It’s a long debate with a lot of repetition, without really getting anywhere. So to save you some time, here is the main difference in understanding between the two debaters: traditional science looks backwards and forwards using the same tools; creationists don’t think the same tools are applicable when looking backwards.

The talk taught me that creationists can be rational (and Ken Ham sure seems rational) and hence trusted as academics – as long as they are looking forward in time, not backwards.

Creationists’ understanding of “Historical Science”, as Ham calls it, is where they differ from the rest of us. Historical Science is the science that looks at the past.

If we do some science and start to notice some dots aligning nicely on a line (trees get visible rings...

Continue reading →


jQuery Rage: Pseudo-Functional Programming

Updated 2014-02-08

jQuery is the most popular javascript library out there. On top of providing DOM traversal, the library also provides various shorthands for popular actions. Its animation system was probably the best until CSS3 animations hit the stage.

On top of this, jQuery provides a lot of helper functions, that have more general purposes. In particular, it has borrowed some ideas from truly functional languages.

Here is a quick overview of concept translations, with F as the functional language (much of the concepts are explained on MSDN):

jQuery            |  F                       |  English
---------------------------------------------------------
$.merge(a,b)      |  a @ b                    |  append
a.is(fun)         |  List.exists fun a        |  exists
a.filter(fun)     |  List.filter fun a        |  filter
$.grep(a,fun)     |  List.filter fun a        |  filter
...

Continue reading →


Deliver as early as possible

One of the core Lean principles is deliver as fast as possible.a It means that you shouldn’t delay a deliverable if it could be delivered. It means that you should ship as soon as you have a product, and it means that you should make your development process fast. (Note that “as fast as possible” does not mean rush, it means as fast as possible, while still deemed safe.) The term is taken from more traditional manufacturing disciplines where development time is essentially expenses and post-release time is (mostly) a time of income.

As Lean has been adapted to Software Development, we have started using the same great ideas as they use in manufacturing: reduce queue size (big queues slow you down exponentially), involve customers so you are always moving the right direction (moving in the wrong direction makes you take longer to get to the goal), and so on.

But software development is...

Continue reading →