Recommended Reading

Jun 13, 2021

Over the years I’ve recommended these books to many people. Each one has changed how I approach my work, those around me, and myself. The list is unordered, each book was impactful at one point in my life, and the order you choose to read them depends...

One-on-One Meeting Template

Jun 5, 2021

I’ve been a manager for over four years now, and I still really enjoy it. I thought I should share some of the tools I’ve used with others and hopefully get some feedback as well!

I schedule my one-on-ones (1:1s) for 30 minutes every week, but the...

Free Coaching Sessions Again!

Jun 1, 2021

Earlier this year I offered to coach four women over six months. It's been such an interesting and rewarding experience that I'm doing it again!

I'm particularly interested in coaching women tech managers. This is open to current managers, or individual...

Preparing for our coaching session

Jan 31, 2021

This is written mostly for the four women who are part of my community coaching program. It will mostly apply to anyone doing coaching with me, and might be helpful to review before a coaching session with others as well!


Before each session...

2021 Coaching Sessions

Jan 1, 2021

Hello and welcome to 2021!

This year I'll give back to the amazing community in a different, covid safe, way. I'm offering four people six coaching sessions! I got a lot of value attending coaching sessions; so much so, that I took a course on how...

Three tips for reports to improve one-on-ones: Part 1

Jan 18, 2019

Having better one-on-ones (1:1s) is usually left up to the manager. There are loads of articles and books written with the manager in mind. But focusing exclusively on only one of the attendees drastically reduces how useful the meeting can be. In...

React JS: what is a PureComponent?

Jan 14, 2018

Early on, React developers had the idea of “pure” components. This concept went by a variety of names (stateful/pure, smart/dumb, container/presentational, etc.) but were all fairly similar. These components still used the React.Component class, but...

JS: ES6’s spread operator for objects

Jan 2, 2018

Over two years ago I wrote about destructuring assignment, which has been one of my favourite features of ES6. Since then I’ve also come to value destructuring’s “sibling” feature - the spread operator. Although you can use the spread operator on other...

New role (same company)

Oct 14, 2017

You may recall I started working at Atlassian in March of 2015. I’ve been a front end developer for them for about two years, but have wanted to move to a team lead position for a little while. I was offered the position, and spent three months being...

Goal setting and tracking

Feb 21, 2017

We’re almost two months down in 2017. How are those New Year’s resolutions going? I’ll fully admit that I’m terrible about keeping up with things like that. But I’m working at getting better. This framework has helped me stay on target for a few things...

How does React decide to re-render a component?

Feb 8, 2017

React is known for its performance. Because it has a virtual DOM and only updates the real DOM when required it can be much faster than updating the DOM all the time, even to display the same information. However, React’s “smarts” only go so far (at...

JS: Promises/A+, jQuery Deferreds, and errors

Jan 29, 2017

As I said, I’m having difficulty understanding all the jargon associated with promises. This post is a continuation from JS: promise and deferred and we’ll take a deeper look into how Promises and Deferreds handle errors. You can read about the history

Presentation notes

Jan 12, 2017

Way back in 2015 YOW! granted me a ticket to a one day public speaking workshop. The workshop description had me a little uncertain (after all, I had never done any conference speaking before), but I signed up and took a leap of faith that Damian Conway

JS: Promises/A+ and. jQuery history

Jan 1, 2017

In my last post I listed a bunch of confusing things about promises. That time I clarified “deferred” and “promise” and this time I’ll start writing about Promises/A+ and jQuery’s promises.

Promise or promise?

The concept of a promise has been around...

JS: promise and deferred

Dec 22, 2016

I’m struggling with promises. A lot.

One of the things that’s super confusing about promises is the jargon associated. We’ve got all kinds of things: promise, deferred, Promises/A+, jQuery promise, fulfil, settle, reject, resolve, fail, catch, then...

Upgrading to Middleman v4

Dec 10, 2016

My blog runs on Middleman - I really like the way they’ve set things up, and it feels very familiar to me since it’s written in Ruby. However, v4 came out almost a year ago, and I never upgraded. I tried half heartedly a couple of times, but never...

YOW! Day Two

Dec 9, 2016

The other volunteers and I got to sleep in a bit this morning and only had an 8:15 start time. Yawn! At least there’s free tea and coffee! After setting up a few odds and ends it was time to start shepherding people into the main room for the third...

YOW! Day One

Dec 8, 2016

In Australia we have a well known conference called YOW!. Yes, the name is in all capitals and contains an exclamation point; no it's not ten times more exciting than any other tech conference. I’d always assumed this conference had more of a Java...

Javascript: pre-Promises

Nov 30, 2016

Promises have confused me for quite a while, so I decided I should spend some time thinking about them. Turns out they’re really powerful, and there’s a fair bit going on with promises. This first post has no promises code, but instead gives some general...

ReactJS: Props vs. State

Nov 27, 2016

I’ve been using ReactJS with Redux at work recently, and I have quite a few questions about how it all fits together. I figured I’d start small, with just some React questions and see how it goes.

This “props vs. state” question is pretty common for...

Ela Conf - closing thoughts

Nov 14, 2016

Well, Ela Conf 2016 is over and done. It’s been just over a week since I attended - time to write up some musings from the event!


Ela Conf is very much about non-technical topics for technical women. Their tag line is “Empowering more women...

Ela Conf - day two

Nov 5, 2016

We started with a light breakfast and moved right into the talks. Again, so many positive vibes and happy voices. Everyone is clearly excited to be here!

We started off with some stories from the organisers about how they got into tech and why they...

Ela Conf - day one

Nov 4, 2016

Friday night was for talks and Lightning Talks. It was pretty quick, 7-8:30 or so, but a great way to meet some of my fellow attendees and kick off the good vibes for the evening. Props to the organisers who required all of the lightning talk presenters...

Attending Vogue Codes

Oct 15, 2016

A couple weeks ago I was invited to attend Vogue Codes, an event for women in technology. I was lucky enough that my boss let me have the day off with almost no warning (thanks boss, and thanks Atlassian!). I was again lucky that my coworker told me...

Workshop for conference proposals

Feb 21, 2016

Last Wednesday I ran a workshop to help people come up with and refine conference talk ideas and then start working on a proposal for it. In preparation for the workshop I wrote a worksheet to help people come up with proposal ideas. This week I’ll...

How to come up with conference proposal ideas

Feb 14, 2016

There’s a conference coming up that you'd really like to speak at. The location is good, your boss is happy for you to take the time off, you’re excited to go. But you don’t have anything to say.

Been there? Me too. So have a lot of people...

Programming theory: Evaluation strategies

Nov 25, 2015

This is a topic I learned at university, but didn’t fully understand all the repercussions of until later. This post is to help you understand the differences and to help me remember them :)

Let’s get started!

But wait, what’s an “evaluation strategy...

JS: Destructuring assignment with ES6

Nov 13, 2015

In my last post we talked about enhanced object literals with ES6. This time around we’ll cover destructuring assignment, another bit of sugary syntax that’s available in ES6. Again, we’ll build up increasingly complicated examples.

Vanilla JS


JS: Enhanced object literals

Nov 1, 2015

Here’s some nice ES6 syntactic sugar for creating object literals. I found it hard to read at first and needed a few examples before I could understand what was happening. It’s got a few uses, so we’ll build up more and more complicated examples to...

CSS: Flexbox in action - Bitbucket Server pull request header

Oct 20, 2015

I recently wrote about using the flex-box rule in CSS. That was a practice round because I knew I needed to use flexbox at work in the future. Well, the time has come!

As you might know, I work for Atlassian on the Bitbucket Server product. Today...

JS: new keyword and functions

Oct 12, 2015

I’m still slowly making my through the javascript interview questions, despite having started a new job on JS. There's just so much I don’t know! Maybe one day I'll actually interview someone with these questions...

Alright, let’s get to today’s question...

Bower link

Sep 28, 2015

At work today I used bower link and wanted to know more about how it works. I'm not going to talk about why you should use Bower, how to use it generally, or really anything useful for most people. I'm only going to talk about the bower link command...

Languages, cultures, and opinions

Aug 31, 2015

I wrote Ruby

I have a lot of shirts that have “Ruby” on them from past Rails Girls events. I love wearing them. Partly I like the style of the script (thanks Carla Hackett for the beautiful lettering!) and the fact that the shirts look girly and are...

JS: ES6’s string templates

Aug 18, 2015

How are the new string templates better?

The traditional JS way of working with strings leaves a lot to be desired.


It’s not easy to read...

var someVar = "world";
console.log("Hello" + someVar + "!");


It doesn’t handle...

JS: ES6 Const keyword

Aug 2, 2015

A little bit of background


ECMAScript 6 (ES6) introduced a lot of new JS keywords to play with. Generally these changes make JS a bit more approachable for new JS developers by making JS more similar to other programming languages.


Intro to programming: If statements

Jul 24, 2015


Although computers live in a very predictable world of 1s and 0s they need to be able to handle uncertainties.

If a customer has enough money in his account then the ATM should give money out.

If a shirt is on sale then the shirt’s...

CSS: What is Block Formatting Context (BFC)?

Jul 12, 2015

Time for the next CSS interview question from the list of front end interview questions. My goodness that repo has a LOT of questions to get through!

What is Block Formatting Context (BFC)?

It seems that BFC is something that I’ve always assumed...

JS: ES6’s let vs. var

Jun 28, 2015

This isn’t a “real” interview question from the list, but I reckon it’s a good one. Plus it came up at work today and I didn’t know the difference. So here it is in question form:

What’s the difference between ES6’s let and “traditional” JS’s var

Periodic site maintenance

Jun 15, 2015

Every now and then I spend some time going through my site to make sure things are working as expected. I might tweak something, make some SEO updates, refactor messy code, or fix something that was broken. Ususally days like this are pretty unstructured...

Intro to Programming: Booleans

Jun 1, 2015


As you’ve probably heard, computers think in 1s and 0s. There is no middle ground, there’s no 0.5, no 1.1, no 1 and 0 at the same time. 1 or 0, that’s all they’ve got. It turns out, 1s and 0s are pretty powerful.

Humans have the same...

CSS: Flexbox

May 18, 2015

I recently learned about flex-box and have been doing some research into it. Hopefully I'll write up a “All about flexbox” post, but for now I want to go through a hands on example of using flexbox in the wild.

What are we working on?

I want to convert...

CSS: the box model

May 2, 2015

The blog topic (like most of my interview question posts) comes from the Front-end Job Interview Questions. Today I’m moving away from JS to talk about CSS’s box model.

Explain your understanding of the box model.

Well, first off what’s this “box...

JS: AMD and CommonJS

Apr 23, 2015

What’s the difference between AMD and CommonJS?

Disclaimer: I’m only going to talk about how this impacts the browser. I will not talk about Node.js, although I know it’s relevant to this discussion. I don’t know enough about Node.js to cover it properly...

Rails Girls event manager

Apr 9, 2015

Hi there!

I’m looking for something that Rails Girls could use to manage our events, particularly user sign ups. In the past we've cobbled together something from various sites. Those sites are good on their own, but the whole system is pretty flimsy...

JS: How can you accept optional parameters?

Apr 3, 2015

There’s more than one way to skin a cat, and there’s more than one way to accept optional parameters. (Editors note: I do not condone skinning cats!)


Coming from a Ruby background, I find this option the most intuitive. You can create an object...

In programming, what is an object?

Mar 26, 2015

As promised in my last blog post: intro to objects.


Many languages have the concept of an “object.” It’s a way of organising code based around objects (things) with similar characteristics. As in, most dogs have four legs, most cars can drive...

JS: What data types are supported in Javascript?

Mar 22, 2015

According to the latest ECMAScript release, these are the data types:

  • Boolean
  • Null
  • Undefined
  • Number
  • String
  • Symbol
  • Object

Ok, let’s run over those one by one:


Pretty standard across all languages, booleans are true and false. They're often...

JS: What is Javascript namespacing? How and where is it used?

Mar 17, 2015

What is Javascript namespacing? How and where is it used?

Well, what is namespacing?

Namespacing is a way of organising your code. It organises concepts and ideas into a group and gives the group a name.

So rather than having everything dumped in...

JS: Split vs. Splice

Mar 12, 2015

What’s the difference between split and splice?

Well, what does split do?

Much like the name implies split breaks something into pieces. The split method is used for strings in JS. It has a few optional parameters, so let’s see what the simplest...

Rails Girls - March 2015

Mar 8, 2015

Phew! Rails Girls Sydney, March 2015 was on Friday and Saturday, I wanted to update you

Usually the Sydney Rails community runs a Rails Girls event every four-ish months. I've always enjoyed mentoring at them, but I've never organised one before ...

JS: How does JSONP work?

Mar 1, 2015

How does JSONP work?

Let’s start smaller: What does JSONP stand for?

JavaScript Object Notation with Padding

Hopefully you already know about the JSON part, if not check out this Stackoverflow answer. Go ahead, I'll wait :)

We'll talk about the...

Algorithms study group

Jan 28, 2015

Last year I ran two study groups, one for JS and one for intro to programming. I also gave a talk about starting a study group at Girl Geek Dinner. I was thrilled when my friend Daphne decided to organise a group on her own to study algorithms.


I have a new job!

Jan 22, 2015

Well apparently all this studying has paid off! I’ve been interviewing with a few companies since before Christmas, and I’m pleased to announce that today I accepted an offer from Atlassian. I’ll be working as a junior front end developer on Stash...

JS: How does ajax work?

Jan 10, 2015

How does AJAX work?

Let’s start smaller: What does AJAX stand for?

Asynchronous JavaScript and XML (I think using the “a” in “and” is a little bit of a cheat, but there you go.)

So how does it work?

After loading, the client uses JavaScript to...

JS: When would you use document.write()?

Jan 6, 2015

When would you use document.write()?

First, what is document.write()?

As you might have guessed, document.write() writes to the document (a.k.a web page). It takes the content you want to write as a parameter. An invocation could look like this:

Retro from my coding test

Jan 2, 2015

I've been looking for a new job over the past month. As part of my interview process I had to do an at home coding exercise. The directions were simple, but disconcertingly vague:

  • The application should run successfully in modern browsers. Your app...

JS: don’t touch the global scope

Dec 30, 2014

One of the last installments from my series on javascript interview questions.

Why is it, in general, a good idea to leave the global scope of a website as-is and never touch it?

Form most languages, global variables are considered a “bad thing”...

JS: ternary expressions

Dec 26, 2014

Why is it called a Ternary expression, what does the word “Ternary” indicate?

Let’s answer the second question first: what does the word “ternary” indicate? According to Wikipedia the word “ternary” comes from the n-ary word setup. Other examples...

JS: same-origin policy

Dec 20, 2014

Explain the same-origin policy with regards to JavaScript.

The same-origin policy helps prevent malicious attacks by stopping code from another site executing on your site. An attacks like this is known as a Cross Site Scripting attack.

How does...

JS: document load vs document ready

Dec 16, 2014

Difference between document load event and document ready event?

$(document).ready() fires when the HTML has finished loading. You can’t interact with the DOM before the HTML has finished loading, so we keep all our JS interactions wrapped up in the...

JS: Explain “hoisting”

Dec 13, 2014

I’m continuing my series of JS interview questions. These posts are proving very good practice for the interviews I’m doing!

Explain “hoisting”

Hoisting is when a JS declaration is lifted (“hoisted”) to the top of its scope by the JS interpreter...

JS: Async Google Adwords conversion

Dec 10, 2014

How can I trigger a Google Adwords conversion when the page is loaded asynchronously?

I've been working with Google Adwords at work this week (yay learning!). My first task was to add a “tracking pixel” to a thank you page after a user has given us...

JS: use strict

Dec 8, 2014

What is "use strict";? what are the advantages and disadvantages to using it?

If you put "use strict"; at the top of your code (or function), then the JS is evaluated in strict mode. Strict mode throws more errors and disables some features in an...

JS: feature detection vs. inference vs. UA string

Dec 4, 2014

What’s the difference between feature detection, feature inference, and using the UA string?

Let’s start smaller...

What is feature detection?

When you check if a certain feature exists, that’s feature detection.

We need to write code that checks...

JS: .call vs. .apply

Nov 30, 2014

What’s the difference between .call and .apply?

Let’s start with the similarities.

What are .call and .apply?

Both methods allow you to invoke a function and pass parameters through.

function printer(message) {

JS: ways to create objects

Nov 26, 2014

What are a few different ways to create new objects?

Well it turns out this topic has been covered quite a lot (unlike my last post about host vs. native objects). I don’t really have anything to add to the conversation, so I'll just give you the...

JS: don’t extend JS objects

Nov 25, 2014

Why is extending built in JavaScript objects not a good idea?

Turns out there’s lots written on this topic (lucky for me!), be sure to check out the references section at the end.

What is “extending an object”?

When you add functionality to an object...

JS: Describe event bubbling

Nov 20, 2014

Describe event bubbling

Event bubbling occurs when a user interacts with a nested element and the event propagates up (“bubbles”) through all of the ancestor elements.


<div class="ancestor">
  <div class="parent">
    <button> Click...

JS: host vs. native objects

Nov 16, 2014

What’s the difference between host objects and native objects?

I didn’t find as much lot of information about this topic as some of the other JS interview questions. So here’s my current understanding, but please comment if I've misunderstood or there...

JS: attribute vs. property

Nov 10, 2014

What’s the difference between an “attribute” and a “property”?

As usual, let’s start smaller.

What is a property?

JS DOM objects have properties. These properties are kind of like instance variables for the particular element. As such, a property...

JS: Anonymous vs. referenced vs. declared functions

Nov 2, 2014


Anonymous functions are typically used as callbacks.

So what’s a callback?

I’m glad you asked!

function takesACallback(callback) {
    // do some interesting things here
    return "The callback says: " + callback();

JS: == vs. ===

Oct 25, 2014

What is the difference between == and ===?

Triple equals checks for type and equality.

Double equals only checks for equality.

What? How can you check for equality without checking type?

JS uses type coercion to check for equality without checking...

JS: what is a closure?

Oct 18, 2014

What is a closure, and how/why would you use one?

A closure is a way of keeping access to variables in a function after that function has returned.

Fantastic, now again, not as a dictionary.

Usually you lose access to variables when a function returns...

A display of Scott Aaronson’s Timeline of computer science

Oct 13, 2014

The timeline might take some time to load, please be patient. I did not pick any of these events, they come directly from Scott...

JS: explain Function.prototype.bind

Oct 10, 2014

Explain Function.prototype.bind

I hadn’t heard of bind before, so I've just been reading up on this one. Woah. It’s pretty cool! Why hasn’t anyone mentioned it before?!

Official answer

bind allows you to set which object is treated as this within...

JS: null, undefined, and undeclared

Oct 6, 2014

What’s the difference between a variable that is: null, undefined, or undeclared?

Here’s a TL;DR version I found quite useful when writing this.

I think they make more sense in the opposite order: undeclared, undefined, and null. That’s the order...

JS Immediately Invoked Function Expressions

Oct 1, 2014

Explain why the following doesn’t work as an IIFE: function foo(){ }();

What does “IIFE” even stand for?

IIFE stands for Immediately Invoked Function Expressions

Great, so what are IIFEs?

An IIFE is an anonymous function that is created and then...

JS prototypal inheritance

Sep 30, 2014

Explain how prototypal inheritance works

JS objects each have a “hook” to its parent object, or prototype. Obviously everything the child object defines it has access to, but it also can climb up the prototype tree to access its parent’s (or ancestor...

JS "this"

Sep 29, 2014

Explain how this works in JavaScript

Huh, well that’s something I've been trying to figure out as I work with JS. this still doesn’t make perfect sense to me. But here’s my current understanding...

this is the context the code is running in


JS: event delegation

Sep 25, 2014

I’m continuing my JS learning and found a list of front end interview questions. There’s a section devoted to JS on there for me to work through. If they’re important enough to know in an interview, they’re important enough for me!

Explain event delegation

Sublime Text Macros

Jun 18, 2014

My coworker users vim, and has a snazzy macro to put a binding.pry wherever he using a keyboard shortcut. I thought it was a neat trick (and he mentioned something about Sublime not being a real editor), so I decided to implement it for Sublime as...

Next up: Front end

Mar 13, 2014

For the next 12-14 months I'd like to learn front end dev.

I've been doing Rails for a little over 2 years now, and almost all of my training and experience has been heavily back end oriented. Pretty much everything I learned at uni was for back...

RubyConf - a look back

Mar 7, 2014

It’s been almost 3 weeks since RubyConf. Feels like longer. I wrote a quick review after the event, but that post didn’t do RubyConf justice.

Really, I’m not sure what made RubyConf so great. The talks? Meeting new people? Chatting with existing...

Sublime Auto Indent

Feb 27, 2014

I recently discovered how to get Sublime to fix indentations for you! Since I spend a certain amount of time each day pushing characters left and right this was pretty exciting. Hope you find it useful!

In Sublime, under Preference select Key Bindings...

RubyConf Australia 2014

Feb 23, 2014

I just finished RubyConf Australia, and what a wild ride! I've never been to a conference before, and I was a bit nervous what it would be like. Would people be welcoming? Would I know where to be? Would everyone be taking notes, or no one? Turns...

Rails Girls Next

Feb 19, 2014

Wahoo! Rails Girls Next happened without a (major) hitch today! I am so happy with how it went, and to have helped with these girls' continuing Ruby education.

The event

I've shared the slides used for keeping track of time, so you can see the...

Starting a CS Study Group!

Feb 13, 2014

I've wanted to run a programming study group for quite a while. Although I love what Rails Girls and InstallFest do, I think attendees find it quite hard to continue learning. They have some support from the community through initiatives like DevHub...

Git Branch Names on Command Prompt

Feb 13, 2014

I often forget which branch I’m on. Sure, I have git branch aliased (it’s probably one of my most frequently used commands) but sometimes I’m convinced I’m on another branch. A few commits and merges later I find out I was wrong, and it’s time for...

Sublime Multi-Cursor

Feb 3, 2014

I use Sublime. I know, I know, I’m not a “real” dev. Whatever. It works for me. One of my favourite features is the multi-cursor. If you're a fellow Sublime user and aren’t aware of this ability you should really check it out. Look at step 12 for a...

validate vs. validateS

Jan 15, 2014

I stumbled across this validation gotcha a while back, but that was before I had this awesome blog ;) I think this is a pretty big one, hope this help someone!

::ActiveModel::Validations treats validates and validate differently. validates is used...

TDD Day 5

Jan 9, 2014

What did I do today?

I said at the beginning that I wasn’t a huge fan of TDD. It just doesn’t seem like a great idea to me. Today I took some time to explore that, and it turns out, I’m not the only one. Most people have mixed reviews, and that...

TDD Day 4

Jan 8, 2014

What did I do today?

I’m continuing on at Coders Dojo, today I worked on Roman Numerals. I've heard this problem talked about, but haven’t actually worked on it myself. It was harder than I expected (and involved a lot of Googling for the correct...

Rails Girls Next Planning

Jan 6, 2014

Back in December Elle suggested running a continuation event for Rails Girls, something for the girls who had completed Rails Girls and were looking for something else to push their Ruby/Rails education a bit further. I thought this was a great idea...

TDD Day 3

Jan 6, 2014

I started the next kata at Coders Dojo. I think you're supposed to do katas over and over again, but I didn’t think I'd gain that much from repeating the FizzBuzz kata from yesterday. Maybe when I've got a better hang of things I can go back to FizzBuzz...

TDD Day 2

Jan 5, 2014

What did I do today?

Second day of working with TDD and I actually got to write some code! I tried to work with Coders Dojo, but their web interface only seems to allow Unit Test (we use RSpec at work, so that’s what I'd like to start with), and...

TDD Day 1

Jan 4, 2014


I've been feeling for a while now that I'd like to be a better programmer. Right now I can make stuff happen, but I usually don’t think it’s particularly well designed. Since it’s a new year, full of possibilities, I thought I'd spend...