blog

Design code to last

Code Design: Introduction

This entry is part 1 of 4 in the series Code Design

Background

A few years ago, after listening to a presentation I gave on software release managament, a member of the audience expressed with what appeared to be a mixture of amazement and bitterness that “this should be taught at university as part of every computer science course”. At the time, I took that as a compliment, and didn’t really think about it much beyond that.

But working with spriteCloud puts us in contact with a large number of software engineering teams, which as a rule are comprised of extremely bright, motivated and capable engineers – and yet, despite their capabilities, some issues crop up over and over again.

As QA consultants, we can always advise our customers on the larger processes by which they can keep a project on track, but we rarely if ever can make suggestions to improve code quality before it’s even written.

Specifically, there are choices to be made in code that have are very rarely addressed in the plethora of HOWTOs and guides one can find in bookstores or on the world wide web. Let’s call that code design, and start discussing some of these topics.

Continue Reading »

Web API Versioning

This entry is part 2 of 4 in the series Code Design

Note: this post was not originally published as part of the Code Design series, but fits quite well.

Today’s CommitStrip summarizes quite neatly why sensible API versioning is a must if you don’t want to annoy your customers. It goes without saying that annoying your customers is a bad idea.

When I finally manage to master an API or framework

There are reasons this happens a lot — often enough to warrant a comic strip — and most of them are bad.

Continue Reading »

Consistent Concurrency

This entry is part 3 of 4 in the series Code Design

In this part of the series, we want to explore how a single set of concurrency problems affects pretty much every programmer everywhere.

Background

Search the web, and you’ll find tons of people claiming — even in scientific publications — that multi-threaded programs are hard to write and debug. There are a few reasons for that, but it’s also a fairly misleading statement to make. Threads aren’t hard at all — it’s just several things running in parallel.

What’s hard is always sharing data between threads. If you design your algorithms in the right way, then this isn’t a problem. The canonical programming model to avoid this kind of issue is MapReduce, in which — slightly simplified — you partition your data into N blocks first, then use N threads in parallel to process a single block each, producing a single output each. You’ll notice that each thread has it’s own input and output, sharing nothing with other threads. Afterwards, you have N outputs, which you combine into a single result with some post-processing.

Threading isn’t hard at all; it’s sharing data between concurrent processes that’s hard. And in this post, we want to demonstrate how this affects even those programmers who stay away from threads.

Continue Reading »

Agile Software Design

This entry is part 4 of 4 in the series Code Design

In Agile development, Big Design Up Front (BDUF) is considered an anti-pattern. As with any pattern and anti-pattern, people — engineers in particular — have a tendency to treat them as rules, as laws that Shall Not Be Broken (TM). The unfortunate side-effect can be that in teams where that mode of thinking prevails, any up front design is eschewed, to the detriment of the team’s project.

This article explores an alternative to this either/or mentality, Rough Design Up Front (RDUF), and contrasts it to the preferred SCRUM method of Emergent Design.

Continue Reading »

Reputation. Meet spriteCloud

Find out today why startups, SMBs, enterprises, brands, digital agencies, e-commerce, and mobile clients turn to spriteCloud to help improve their customer experiences. And their reputation. With complete range of QA services, we provide a full service that includes test planning, functional testing, test automation, performance testing, consultancy, mobile testing, and security testing. We even have a test lab — open to all our clients to use — with a full range of devices and platforms.

Discover how our process can boost your reputation.

We use cookies to give you the best browsing experience possible. For more information, please read our cookie policy.

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.

Close