Career QnA

nipaluna, lutruwita

Nicholas Tierney

Freelance Statistician and Research Software Engineer

2025-05-12

Who am I? The story so far

  • 2008-2012: Undergrad + honours in Psychology @ UQ

  • 2013-2017: PhD Statistics @ QUT

    • EDA / Bayesian / Geospatial / Optimal placement
  • 2018 - 2020: Research Fellow / Lecturer @ Monash

  • 2021 - 2025: Research Software Engineer @ The Kids

  • 2025 - : Freelance Statistician & RSE

    • Teaching, modelling, code review,

❤️ Hiking! njt.micro.blog

Define: Research Software Engineer

A Research Software Engineer (RSE) combines professional software engineering expertise with an intimate understanding of research.

– (from https://society-rse.org/about/)

What sorts of things does an RSE do?

  • Create software to solve research problems

  • Develop tools that abstract the right components to facilitate research

  • Help researchers to find and learn good tools

  • Support researchers with (computational) reproducibility

visdat::vis_dat(airquality)

vis_dat(airquality)

naniar::gg_miss_upset(airquality)

gg_miss_upset(airquality)

brolgar - take spaghetti

ggplot(heights,
       aes(x = year,
           y = height_cm,
           group = country)) + 
  geom_line()

brolgar - spread spaghetti

ggplot(heights,
       aes(x = year,
           y = height_cm,
           group = country)) + 
  geom_line() + 
  facet_strata(along = -year)

greta is R code

stan

data {
  real alpha;
  real beta;
  real<lower=0> sigma2;
  int<lower=0> J;
  array[J] int y;
  vector[J] Z;
  array[J] int n;
}
transformed data {
  real<lower=0> sigma;
  sigma = sqrt(sigma2);
}
parameters {
  real theta1;
  real theta2;
  vector[J] X;
}
model {
  array[J] real p;
  theta1 ~ normal(0, 32); // 32^2 = 1024 
  theta2 ~ normal(0, 32);
  X ~ normal(alpha + beta * Z, sigma);
  y ~ binomial_logit(n, theta1 + theta2 * X);
}

JAGS

for(j in 1 : J) {
   y[j] ~ dbin(p[j], n[j])
   logit(p[j]) <- theta[1] + theta[2] * X[j]
   X[j] ~ dnorm(mu[j], tau)
   mu[j] <- alpha + beta * Z[j]
}
theta[1] ~ dnorm(0.0, 0.001)
theta[2] ~ dnorm(0.0, 0.001)

greta

theta <- normal(0, 32, dim = 2)
mu <- alpha + beta * Z
X <- normal(mu, sigma)
p <- ilogit(theta[1] + theta[2] * X)
distribution(y) <- binomial(n, p)

google tensorflow

  • automatic differentiation
  • efficient linear algebra
  • highly parallel

Something I love about current work

  • Freedom (choice, flexibility, independence)
  • Meaning (impact, fast-pace)
  • I’m still working it all out!

Tipping points of leaving PhD / Academia

  • I believe in academia. I felt like my role (RSE, stats) meant I could do other things. I’ve always had great people and support.

  • PhD was hard - I didn’t feel like quitting but I was concerned I might “fail”

  • Assumed I’d be in industry, ended up in RSE-adjacent roles. I got lucky.

  • Often assumed I’d try out industry/other work eventually. I wanted “another data point”.

Key skills gained during PhD

  • Programming pi shaped researcher.

  • Keeping a blog.

  • Exploratory Data Analysis.

  • Communication, presentation skills, writing.

  • Network, network, network.

  • Critical reasoning/research.

    • What/how are you measuring.
    • Model interpretation, practical significance.
  • How to ask questions, solve problems.

Thank you!

github.com/njtierney/ziggy-lab-talk