Project Ara and the Paradox of Choice

’29/52 choice paralysis’ by Lauren Macdonald

’29/52 choice paralysis’ by Lauren Macdonald

Last week I was listening to one of my favourite podcasts, Daily Tech News Show (DTNS), when the topic of Project Ara from Google came up. The archived episode is available here. It was an interesting discussion, as they always are on DTNS, and I had a thought. I wondered what, if any, impact the paradox of choice would have on Project Ara.

For those not familiar with the paradox of choice, this is my understanding. It is ‘conventional wisdom’ that having more choice is good. Indeed, the more choices that you have the better. However this is not always the case. In particular:

  1. More choices increases anxiety about making the ‘best’ choice, by increasing the number of options and comparisons that you have to make. For example two choices mean that you have two comparisons to make in order to determine which one is ‘best’. If you have four choices you now have six comparisons to make and five choices means nine comparisons.
  2. More choices increases feelings of regret that you may not have made the ‘right’ or ‘best’ choice. The more choices you have, the greater the anxiety that the ‘best’ choice wasn’t made because one of the other options may have been better.

In short, the more choices that you have, the more anxious that you are during the decision making process, and the more regret you feel and after.

As a software engineer I try to keep this in mind when developing software that contains configuration screens. Particularly if there are a significant number of choices. Because the anxiety becomes so great that the user makes the easiest choice available to them. That is, leave the options at their defaults. A classic example related to Microsoft Word is available here. As such ensuring suitable defaults is paramount, but I digress.

I wondered if this type of thinking would apply to Project Ara. At its core, Project Ara is about giving consumers the ability to build their own mobile phone by selecting from a wide range of different modules and integrating them into a single frame. I can see that this type of paradigm means that a consumer will have many choices to make. Perhaps even too many choices.

If this is the case, I can’t help wondering if consumer satisfaction with Project Ara phones will suffer. Because of anxiety during the process of deciding on which modules to have, and anxiety afterward the purchasing decision has been made due to concern that a different combination may have been ‘better’.

I’m interested in mobile computing and will keep an eye on news of the project and see what the world makes of it.

Users are critical to an Enterprise Architecture

Late last year I gave a presentation to the Blackboard Service Delivery Manager (SDM) team in Adelaide about the Enterprise Moodle architecture. It was an adaptation of a session I’ve run twice now for final year computer science students at Flinders University for their Enterprise Systems topic. This was exciting for two reasons:

  1. I enjoy sharing information with colleagues and clients;
  2. It was the first opportunity that I’d had to share information in a cross team workshop.

I can’t share the full details of the presentation here. Below is a de-identified version of the final architecture slide to give you an idea of the complexity of the system that we discussed.

De-identified Enterprise Architecture overview  (Click for full size version)

De-identified Enterprise Architecture overview
(Click for full size version)

During the session I asked a question that I’ve also asked of the students, which is:

What is the most critical consideration when it comes to an n-tier architecture?

I always get a variety of answers including:

  • Money
  • Hardware
  • Software / programming language
  • Location of the datacenter

The answer that I’m looking for is that the users are the most critical consideration. This is because their requirements inform all of the considerations. Additionally users, and their requirements and needs, are the main reason for the system existing. Without users we may as well just go home and surf the interwebz.

It is easy to loose sight of this. In particular by those in technical roles who have little interaction with users. However I believe that users are critical to the overall success of the system. I’ve been involved in a number of enterprise system development and deployment projects. Those that struggled were the ones that users did not engage with, mainly because they didn’t see the system as meeting one of their needs.

Similarly their needs influence the architecture decisions. For example some users of an enterprise system, have a requirement that their data be stored in their country. It doesn’t matter if the system is housed in a state of the art datacenter, if it isn’t in their country they won’t use it.

A simpler example was a government department that made a significant investment in a Microsoft Excel based spreadsheet to collect data from the researchers at an institution where I worked. The spreadsheet was very complex. It included data validation and filtering, as well as restricting the information collected to that which they government department was interested in.

Unfortunately there were a significant number of researchers, who for a variety of reasons, didn’t have access to Microsoft Excel. Most notably those in computer science who preferred to use Mac OS X or a flavour of Linux. These users didn’t want, or simply couldn’t, use the spreadsheet. So they developed their own template and provided the information that they thought we needed. In some cases it was clear they had spent significant amounts of time collecting this data.

Unfortunately we then had to throw away most of that data as it didn’t fit within the specifications of what was required by the spreadsheet. In essence:

  • Key stakeholders didn’t engage in the process because the system, in this case the spreadsheet, didn’t meet their requirements
  • Users spent significant amounts of time collecting data that we couldn’t pass on
  • The government department missed out on data that could have been relevant
  • Users became disenfranchised with our efforts and didn’t engage in future activities

This is a long way of saying that in my personal opinion users are critical to the success of a system. With their needs and requirements informing decisions made at the strategic and architecture level, right through to bug fixing and communication.

Losing sight of this has adverse affects, from users losing trust in the system and those people working hard to support them, through to users becoming so disengaged with the system that they move elsewhere.

As someone working in a technical role, it can be useful to take a step back and try to see the problem from the users perspective.

Creswell Garden, Adelaide Australia

On the same day I took these photos of the Rotunda in Elder Park, I also took a couple of quick shots of the Creswell Garden sign on the eastern side of the Adelaide Oval.

Apparently the sign, and associated garden, was created to memorialise the work of John Creswell. It’s just a shame that with all of the money spent on the Adelaide Oval redevelopment in the last year that:

  1. The garden is now just a patch of lawn, the fountain that used to be there has gone
  2. No on spared any money to fix the finial on top of the right hand post

The Rotunda in Elder Park, Adelaide – Australia

Below is a gallery of photos that I took the other day on my way to work. I ended up running a little late, and even tweeted about it.

I hope to take more photos in the future and post them here.

New Utility Script: MdlDeprecatedCheck

'Extravaganza Deprecated' by Jan Kus

‘Extravaganza Deprecated’ by Jan Kus

For the past few weeks the focus of my work at NetSpot has been on Moodle upgrades. One of the many aims of an upgrade project is to ensure that there are minimal debugging messages being displayed during the testing process. One of the most common reasons for debugging messages being displayed is the use of functions that have been deprecated in the latest version of Moodle.

To help in fixing these issues before the client sees the message, I’ve developed a new utility script. The script is called MdlDeprecatedCheck and it is available in my GitHub repository. The script builds a list of functions, based on the deprecatedlib.php file, and compares it to the list of functions used in the target file or directory of files. If a match is found it is reported.

In this way I can identify the parts of the code that need updating to use the latest functions, and stop debugging messages from being displayed. As always, if you find any of my utility scripts useful, please let me know.

Using WordPress with HTTPS: Lessons Learned

'Learning' by Anne Davis 773

‘Learning’ by Anne Davis 773

A few days ago I wrote a post about why I switched my little part of the Interwebs to HTTPS. When I restarted my blog a few months ago I chose WordPress, mainly because I have been using it off an on for a number of years.

For example in the past I used WordPress to set up a centrally administrated blogging platform for the university that I was working for at the time. I even wrote a chapter on a small number of WordPress plugins that I wrote in a book on library mashups. The book was published in 2009.

I have learnt two new things from using WordPress with HTTPS.

Redirecting non HTTPS requests

The first lesson to learn was how to automatically redirect requests made using HTTP, to use the HTTPS version of the same URL. For example to automatically redirect from ‘’ to ‘’.

To do this I’ve added the following rewrite rules to my .htaccess file.

The important thing is to add these lines before the rules to make WordPress permalinks work. As an example, the relevant lines of my .htaccess file, including the rules for using permalinks, is as follows:

With this in place, any request for content using HTTP is automatically redirected to use HTTPS.

Fixing Absolute URLs to Post Content

The second lesson was that WordPress stores links to content within a post, such as the image above, as an absolute URL. That is, a URL that specifies the protocol, hostname and full path to the content. This is to ensure the link to the content works with the permalink format when the post was originally written, and in the future if the permalink format changes.

Including content loaded via HTTP when the page is loaded via HTTPS causes a mixed content warning to be displayed by the browser. This is because a page that contains mixed content is considered a security risk. More information on mixed content is available here.

WordPress uses a MySQL database to store post content. Therefore fixing the issue is a simple matter of using a SQL query like this:

Obviously if you’re intending to this with your own site you will need to:

  1. Take a backup of your database first, just in case
  2. Replace my domain name with your own

I remain pleasantly surprised by how easy this whole process has been. It has been so easy, that the cynical IT professional in me is just waiting for something bad to happen.

If you notice anything wrong with the site, please let me know.

Forensic Programming: Just Because You Can, Doesn’t Mean You Should

'Risk' by carnagenyc

‘Risk’ by carnagenyc

I’ve written a few posts detailing my thoughts on what I’ve called Forensic Programming. Today I’d like to add another one, which is part reflection and part cautionary tale.

As you know I work at NetSpot as a Senior Software Engineer, supporting our partners in their use of Moodle. The past week has seen us enter our upgrade season. During the next few months we work with all of our clients in undertaking a major upgrade of to a newer version of Moodle. This work was inspiration for two utility scripts, which I released the other day.

These projects are driven by a lead software engineer, as well as a lead consultant who provides project management oversight. Typically a working group is also formed at the partner organisation. As you can imagine, a major upgrade is a significant project.

As the lead software engineer on an upgrade project, you get a very good look at all of the changes made to Moodle to help our partners make the most of their investment. You also get to see the plugins that they have installed, as well as customisations that have made to them. Some of the customisations I’ve seen recently have been the impetus for this post.

Moodle, the third party plugins we have installed, and the customisations we write are all open-source software. As such we have the ability to change the source code to make Moodle meet the needs of our partner organisations. The ability to undertake these customisations is one of the reasons why Moodle, and our services, is attractive to our partners. We can customise their Moodle instances to work the way that the need.

Such customisations can be dangerous sometimes, and carry significant risk. Just because we can edit the source code, and therefore the behaviour of Moodle, doesn’t mean that we should. This is particularly true of changes to third party plugins which integrate with a third party website or service.

Recently I upgraded a third party plugin for one of our clients, and this caused some very odd behaviour in the third party system. For example records were being created in the third party system that didn’t have the unique identifier that our partner expected.

This error was caused by a customisation to a very early version of the plugin. The customisation had survived at least one major Moodle upgrade, and has become an integral part of the way in which the plugin is used.

Unfortunately the change was made so long ago that any documentation on the customisation had been lost. There was no indication that the customisation needed to be carried over, until the functionality provided by the plugin broke.

Changes like this to third party plugins, which integrate with services over which we have no control, carry a high degree of risk. For as we saw, our partner lost functionality that they required, and there was little help from the third party plugin provider. This is because we’re using their plugin in a way that they had not envisaged.

This is not to say that I believe the change should not have been made. Far from it. If a change is required by a partner organisation, so that they can achieve the most from the system, it should be made. However the risk of making the change to future upgrades must be assessed and steps taken to mitigate that risk.

At a minimum documentation needs be made to ensure that the customisation is tracked. This includes documentation in a system such as JIRA, as well as by comments in the code. In this way when the code change conflicts during an upgrade, or the code is being evaluated as part of an upgrade, the required change is more easily identified.

In summary, just because you can change the code, doesn’t mean that you should. All changes carry risk, and changes to code that integrates with third party services carry a higher degree of risk. Additionally if a change is made, it needs to be appropriately documented.

Switching my part of the Interwebs to HTTPS

'Padlock' by rjp

‘Padlock’ by rjp

Earlier this week I saw this post, by one of my favourite authors Charles Stross. In it he linked to this post by Google that indicates that the use of HTTPS for a website will start to be a ranking single for ranking search results.

Over the past few days I’ve taken the plunge and switched my little part of the Interwebs over to the HTTPS.

I was pleasantly surprised by how easy my hosting provider, Dreamhost, made the whole process. It was so easy that the cynical IT professional in me is just waiting for something bad to happen.

If you notice anything wrong with the site, please let me know.

Communication is critical to your success

'Type & Write' by ®DS

‘Type & Write’ by ®DS

Earlier this year I undertook a technical writing course. Specifically the Technical Writing course at TAFE SA. I’d like to take a moment to reflect on why I undertook the course.

Over my career I’ve received positive feedback on my written and oral communication skills. Including the documentation that I’ve written for a variety of software projects. This documentation varied from procedure manuals and technical notes, through to longer pieces such as a my honours thesis and various reports.

I feel that in a technical role, such as a software engineer, the technology is only one part of the solution that you’re working on. Communication with stakeholders, clients, team members, and management is just as important as the software design and implementation.

For example:

  1. Communication with project stakeholders: In my experience there are a significant number of stakeholders in any sufficiently large project. If you can’t communicate effectively with the stakeholders, who all have varying levels of technical expertise, you put the project at risk
  2. Communication with the client: If you can’t reach consensus with the client on what their needs are, the specification for your development will be flawed. This in turn, leads to a flawed implementation and a project failure
  3. Communication with your team: If your team doesn’t understand what it is that you’re doing, or have done. They can not effectively back you up when you’re not available or have moved on to a different project. As such, your team isn’t performing a well as it should. The same can be said for any new process or system that you are implementing internally for your team.
  4. Communicating with management: In my experience, effective communication with your manager is critical to your success as a software engineer or other technical role. Your manager communicates what you’re doing with the wider organisation. They also have a wider view of the organisation than you do, and can share this with you

Ultimately it comes down to this:

In any technical role, the technology is only one factor in your success. The people that you work with, in my opinion, are a more significant factor. In fact, I would argue that the people are critical to the success of your current task, both past and present projects you have worked on, and your career overall.

Even though I have received consistently positive feedback on my technical writing, I still felt it was important to have my skills evaluated by people who work in the field of technical writing. I learnt new skills, and ways of looking at my writing, and I’m using them in my day-to-day work.

In summary, if I could offer one piece of advice it is this: Don’t neglect your communication skills, as they are critical to your career success.

Two new Git related utility scripts

It is upgrade season at NetSpot, not to be confused with rabbit season or duck season. I’m the lead software engineer for at least two major Moodle upgrade projects this year. As such I’m always looking for things that will help me get my job done. Today I’m releasing two new utility scripts which do just that.

The first script is called GitFindCommit. This script can search the log of a a Git repository, looking for commits which have a description which matches a pattern. This is particularly helpful in identifying the commit, or commits, which relate to a particular JIRA item. This is because it is NetSpot policy to preface the description of a commit with the JIRA code.

The second script is called GitLogExport. The purpose of this script is to identify commits which match the specified pattern, and export the list of those commits into a CSV file. This is helpful in identifying a list of commits that represent code changes that need to be migrated as part of the upgrade project. Additionally the script can filter the list of commits to reverse the order of commits (making the most recent last) and remove duplicate descriptions.

It is going to be a busy few months while we work through all of the major upgrade projects that we have. These two scripts will make life a little easier. As always, if you find any of my utility scripts useful, please let me know.