Rainer Selby

/ˈɹaɪnə(ɹ)/; rye-ner

Master of Engineering (Software) student

University of Melbourne, Australia


I’m a final-year software engineering master’s student at the University of Melbourne.

I’ve worked on a number of software engineering projects for clients, undertaking requirements analysis and software development in agile teams, using languages and environments such as Python, Java, C, node.js, React and Vue.js. I’ve also worked on a number of computer science projects, applying techniques from artificial intelligence, machine learning and natural language processing.

Prior to undertaking this master’s course, I gained experience working at a professional services firm, working on projects in a client-facing role.

As of 2020, I’m in my final year of my course, and undertaking a year-long client software project in a team of ten, building an innovative multi-player game to help students understand the role of ethics in commercial decision-making.

I’m also a lab demonstrator in the third-year subject Web Information Technologies, and participating in the Leadership for Innovation programme, where I am mentoring a student team undertaking an innovation project to define a new IoT-based water monitoring product for an environmental monitoring consultancy firm.

I’m graduating in November 2020 and interested in full-time roles in Melbourne or beyond. I’m also available now for internships or short-term opportunities.

Résumé LinkedIn


Software development: Automated rostering

  • Developed a Java program to algorithmically generate staff schedules, in an team of five applying an agile methodology.
  • Consulted with the client to understand requirements, successfully developed the solver component using Java and an AI constraint satisfaction engine, and designed and performed a test strategy.
  • Successfully deployed software to client for trial, and followed up for further testing and iteration.

An Australian not-for-profit organisation was facing difficulty every week putting together rosters for their school workshops. Our team was tasked to build software the allows the organisation to automatically generate a workable roster with the push of a button. This is a complex task, needing to take into account variables including staff availability, available locations, staff training requirements, distributing staff members’ workloads appropriately and grouping workshops sessions into practical shifts.

After investigating a number of algorithms and approaches, we decided to use the open-source OptaPlanner library as a basis, allowing us an easily expandable and tailorable approach to implement the ‘constraints’ used to build a roster.

The business rules that were used to develop the weekly roster were complex, however we successfully formalised these and implemented these into the software.

As part of this project, I was in frequent contact with the client to ensure we were meeting their needs. I also planned the architecture for the system and developed a detailed test plan to ensure the quality of our software.

Key skills developed: Java, constraint solving, software architecture, JUnit, software testing, user interviews, agile software lifecycle

Innovation project: Small business consulting

  • Developed and launched a public website as part of a proposed start-up business, in collaboration with an industry entrepreneur. Conducted ten user interviews with consultants and small businesses.
  • Awarded ‘best pitch’ out of 15 teams in the program; invited to return as a mentor in 2020.

As part of the Creating Innovative Engineering programme at the University of Melbourne, our team of five were matched with an industry mentor and challenged to devise a business that would disrupt the management consulting industry.

As part of our research, I conducted a total of ten interviews with a mix of professionals experienced in the consulting industry, and people who have experiences with small- and medium-sized business.

Drawing on our findings, we created a business proposal. I created a website which we used to prototype the idea, and we used Google Ads and advertising on Facebook to try to collect registrations of interest, as a way of validating the idea on the market.

Our findings were presented in a report, and we also delivered a pitch at the conclusion of the programme.

Our presentation was awarded ‘best pitch’ out of fifteen teams.

Software requirements analysis: Training course administration

  • Defined a detailed set of specifications for a software solution to co-ordinate training sessions, in consultation with the client – creating personas, prototypes, user stories and acceptance tests.
  • Iterated specifications based on client’s feedback throughout project, to their satisfaction; these completed specifications are now being used as a basis to develop the software.

A fire training organisation required a mobile application and desktop program to help administer and deliver their courses across Melbourne.

As part of a team of five, we put into practice requirements analysis techniques and delivered to the client a comprehensive set of software requirements for this project, including:

  • a goal model to illustrate the required functionality, and our users’ needs and desires
  • personas were devised to help understand and demonstrate the motivations and expectations of typical users
  • a paper prototype to rapidly create and iterate over the user interface
  • a full digital prototype to further validate the interface
  • a complete set of user stories for the software
  • a detailed of corresponding acceptance tests and acceptance criteria

With positive feedback from the client, the completed specifications were then provided to another team of students, from which they could understand the requirements and perform the development.

Key skills developed: requirements analysis, prototyping, user interviews

Natural language processing: Fact-checking

  • Using Python and TensorFlow, applied NLP techniques and Google’s machine learning model BERT to develop a classifier to label sentences as factually true or false.
  • Achieved competitive results.

In this project, as part of a team of two, I developed a system to automatically evaluate the validity of a statement against a corpus Wikipedia articles; and created a report to evaluate the effectiveness of the approach.

A collection of some 25 million sentences sourced from a range of Wikipedia articles was available to us, with each sentence labelled with the source article name and a sentence reference number. Additionally, some training and development data comprising around 150,000 claims with labels and evidence provided, and an unlabelled test set of 5,000 claims.

I developed the system in Python, using natural language processing techniques, TensorFlow, and Google’s pre-trained machine learning model BERT.

The performance of the system was evaluated on the basis of the accuracy of its labelling and its recall and precision of documents, against both a baseline, as well as being ranked against the performance of other teams.

We met the competitive standard for labelling the accuracy of claims, and wrote a report to identify potential improvements, particularly in the ability to correctly select the sentence as evidence.

App development: Navigation assistance for the elderly

  • Developed a location-enabled Android app using Java to allow elderly persons to pair with a trusted helper to get live assistance online.
  • Successfully deployed and demonstrated on a pair of Android phones.

For the capstone project of my undergraduate course, our team created an Android app to allow elderly persons to connect with a helper, who can then remotely provide navigation assistance.

The functionality implemented included voice calls, messaging, the ability to send step-by-step instructions, mapping and the ability to track the location of the other user.

The app was successfully deployed to a pair of Android devices, and the functionality demonstrated in a live scenario taking place outdoors.

Two instances of the app (a helper paired with someone needing help) running live on a pair of emulators

Artificial intelligence: Pac-Man AI agent

  • Built an AI Pac-Man agent for competition combing search techniques with reinforcement learning (approximate Q-learning) using Python.
  • Achieved good results against the baseline.

As a team of three, we participated in an AI Pac-Man competition, based on the UC Berkeley Pac-Man artificial intelligence project.

In this variation, two teams' AI agents play against each other by controlling Pac-Man and ghosts, aiming to eat the most food in the opponent's territory.

The first technique we implemented was an A* search algorithm, to find efficient paths and avoid traps and dead-ends.

I also developed an implementation of reinforcement learning, specifically approximate Q-learning. With this technique, a set of values are assigned to features, and then many training games are run in order to adjust these values until they converge to an optimal state.

Pac-Man agent running on reinforcement learning

Machine learning: Author age prediction

  • Developed and evaluated machine learning classifiers to predict the age of the author of a given piece of text.

In this project, I used machine learning to develop a classifier to predict the age of the author of a given piece of text.

Training datasets were provided comprising blog posts from the internet, paired with some information about the author including their age.

I evaluated two approaches. The first approach generated predictive features (the top 10 “most predictive” features identified based on the presence of certain words under Mutual Information and Chi-Square), and compared different classifiers on this data.

The second approach, which achieved a higher accuracy, was to generate the counts of each words and then run a Multinomial Naïve Bayes classifier.