Adrian Smith

Software Carpentry

Coming from an engineering background, I have seen the issues that well meaning engineers encounter when attempting to develop software.

These include:

  • Inappropriate technology or language selection
  • Poor architecture and strong coupling between components
  • Inadequate or non-existent testing

As a result they often spend much of their time fighting with the software instead of solving the design or research problem. Additionally, the reuse and extensibility of the software is limited, resulting in significant rework.

Software Carpentry provides an excellent online course based on Open Source content intended to give scientists and engineers the fundamentals of software development.


Are There Real Benefits to Follow the Sun and Remote Working?

I’ve had a couple of first hand experiences using both Follow the Sun and Remote Working models for both engineering design and software development. In each case the model was based on moving the work between sites in different time-zones/geographic locations and the results were mixed. Recently, the issue has come up again at work, as a result of a recent business acquisition and there have been numerous debates on how this might work. So the help clarify my thoughts, I want to consider the costs and benefits, together with some ideas for making and objective decision.

Read the rest of this entry »


An Engineering Design Framework – Part 1

The effectiveness of software application frameworks such as Ruby on Rails, automated build tools like Maven, and architectural design patterns like Model-View-Controller, demonstrate the value of a structured approach to development tasks. For me, the expression “convention over configuration” really sums it up. When I’m developing an application I’m far more interested in the business logic rather than the inner workings of the framework or how I should structure an application.

Ruby on Rails achieves this goal by simplifying web application development and removing configuration decisions so that the developer can focus on solving the business problem. With this in mind I thought there may be value in exploring an equivalent framework for mechanical part and assembly design.

Read the rest of this entry »


Applying Agile Principles to Traditional Engineering Design

Agile software development methods evolved as a reaction to traditional project management methods that focused on documentation, change control and the linear execution of tasks. Agile methods recognize the complex and highly non-linear nature of software development and address the associated risks by encouraging a range of working practices. While these practices are well accepted within the software industry, they have not yet permeated into the more traditional engineering design disciplines found in the aerospace or automotive engineering industries. The following considers the how some of the main agile principles and practices associated with Scrum, eXtreme Programming and Test-Driven Development, could be applied.

Read the rest of this entry »