Een software audit: Wanneer en waarom?

Soms kan het voorkomen dat er, als gevolg van hooggespannen verwachtingen of veranderende marktomstandigheden, noodzaak ontstaat om eens kritisch te kijken naar de staat van een softwareproduct. Het is dan raadzaam om analytisch en objectief te kijken naar zaken als de codekwaliteit, kwaliteit van de architectuur, schaalbaarheid of het softwareontwikkelproces.  Continue reading

Safeguarding ambitious growth plans towards the year 2020

Recently, we got a performance benchmark assignment via one of our valued partners, a worldwide leader in IT research and advisory. One of their clients had very ambitious growth plans towards the year 2020, and was eager to know whether their main B2B trading platform would be able to handle their growth plans. The growth comes from both new business models and consolidation efforts of their trading platforms. Continue reading

External Resources Are Unreliable

Developing software is one thing, keeping it up and running in production is a whole different challenge. When your software is running in production it will be used in ways you never thought about, and it will behave in ways you’ve never expected it to behave. A common culprit of problems in production is the use of external resources.

What are external resources? Everything that happens outside of the safety of your runtime environment, e.g.:

  • Database connections
  • Consumed webservices (whether it’s REST or SOAP)
  • Inter-process communication
  • Network access in general

Treat external resources as slow and unreliable: it should return well formatted XML within 2 seconds, but it might decide to return the latest The Avengers sequel at 50kb/s which takes 5 hours to receive. It seems like an unrealistic scenario but sooner or later, it will happen. To prove this point, a few examples I’ve seen through the years:

  • Time-out on a database connection (network problem)
  • Broken NFS-mount (after 30 minutes) thanks to a misconfigured firewall
  • HTTP contract is not honoured:
    • Content-Type says ‘application/json’ but it returns plain HTML
    • Content-Length is incorrect leading to half-received responses
  • Incorrect XML entities: Microsoft Office generates invalid XML entities in PDF metadata leading to unparsable XML
  • An external webservice responding with 10kb/s leading to time-outs and rolled back database transaction on our end
  • An external webservice honouring only the second (even) request
  • An external webservice crashing on parallel requests (we had to synchronise access on our end)
  • A VPN shutting down every night after a few hours of inactivity

There are some grey areas like file access; a local disk could be fine. But hey, it might be an NFS-mount (Network File System) which makes it unreliable since again, networks are unreliable (even though Wikipedia says TCP provides ‘reliable transport’, but we know better). In the end it pays to be protective; don’t trust stuff from the outside.

Much of this awareness has been acquired through my personal bible of software development; Release It!, by Michael T. Nygard. Anyone writing software which is meant to go to production (which probably most of us do) should have read it.

Static dynamic webpages with Baked.JS

Static dynamic webpages, seems like a contradiction? You want to enable non-techies to make changes to the pages of the website, but you don’t want to go through all the problems you’re going to have by implementing a CMS, and for various reasons you haven’t created your website in something like WordPress. Baked.JS to the rescue! In this blog I will explain what it is, how we use it, and how you can profit from this awesome technology too.
Continue reading

Software Development Without Relations

No, this post is not about the relationships between developers. They are normal people too. It is more about the fact that, for over 20 years already since the rise of OO languages like Java, developers are still trying to get data into relational database tables. Of course there are libraries like Hibernate that do the Object to Relational Mapping (ORM) for you, but in the end you’re still trying to create a (3rd form normalised) relational structure that fits with your real world objects. Oh, and next to that you’re trying to get the data back into your application in such a way that it still performs well.

Continue reading

Trends at Devoxx 2013

Every year there is a large (mostly Java related) software engineering conference in Antwerp Belgium, named Devoxx.

Together with several Avisi engineers we visited Devoxx to learn about new technologies, meet other engineers from all over Europe and have fun together.

For me, these are the trends / highlights at Devoxx:

Continue reading

Scrum – A View From the Other Side

I have been working in Scrum teams for quite some time now, and I am a big fan of the method. One thing I always wondered about however is why product owners seem to change their minds so often after a sprint delivery.

The last few months I got the chance to experience Scrum from the product owner’s side and it really confirmed the value of the method to me and also taught me a valuable lesson…

Continue reading

Your world gets smaller, so venture beyond it!

When I was a little kid my parents often took my little brother and I to a sand quarry to play or pick berries; later, when I was in my early teens, we spent summer holidays near an active drifting sand plain. These places looked huge then; a trek across the sand felt like an expedition into unknown territory, the slopes of the quarry looked like enormous cliffs…

Around the same time, I started programming. First in MSX Basic, then in Z80 assembly. This was a magic time of discovery, having a machine printing out text to you, drawing images and animations, and making sounds (and combining those to devise an intruder alarm for your room, scaring mom!). It gave me a feeling of great accomplishment.

Continue reading