how to not

disclaimer

the gopher is friendly, believe me!

leave

the gopher

alone

it could be

any

other language

story time

once upon a

time

a very

interesting

problem

stream

processing

high

performance

requirements

distributed

systems

this is

unix golang

we know this!

the project was a

sucess!

happily ingesting

> 4k msgs/s

from kafka

fin?

done?

software is

never

done

not all

roses

my process

crashed

type Foo struct{}

type Baz struct {
	foo Foo
}

					
func (f *Foo) DoThis() {
	fmt.Println(":wave:")
}

func notfoo(f Foo) {
	f.DoThis()
}

					
func main() {
	b := Baz{}
	notfoo(b.foo) // this prints
}	

					

the nil struct

uint64

vs

uint64

megabits

vs

megabytes

y = mx + b

slopes

I won't talk about

generics

(I swear)

the approach

grassroots

Rust Evangelism Strike Force?

Rewrite

it in

Rust?

plz NO

pretty please?

start with a

side

project

(try to) make it

production-ready

overkill?

with

practice

comes

perfection

the first

project

grafana annotations

data source API

prometheus

metrics

structured

logs

CI/CD

pipelines

package it

deploy it

and

ask the

right

questions

was it

annoying

to develop?

how to

debug

this

what are the

failure

modes?

how to

onboard

new team members?

success!

(mostly)

the second

project

internal

hackaton

stream processing

librdkafka

parsing a binary

protocol

real-time

analysis

impressive

performance

results

success!

the third

project

even

bigger

scope

build a

microservice

in Rust

success?

it's the 3rd time after all

mistakes

were

made

what

happened?

the

zero

syndrome

zero

allocations

zero

sized types

zero

cost

abstractions

zero

working software

clone() away

still

miles ahead

on memory safety

(than malloc/free)

learning

ownership

is not easy

but it's

rewarding

Rust

nightly

is cool

Rust

nightly

is a nightmare

less

is more

fewer

moving parts

high

rate-of-change

even higher

cognitive load

takeaway?

stable is

bleeding edge

enough

*shiny objects*

smart

abstractions

magic?

reality check

this is

not

Hogwarts

magic

almost always means

pain

to maintain

you

can

do it

should

you?

what is

idiomatic?

ferris is pretty young!

no established patterns

it's really easy to write

X in Y

struct AbstractProxyFactoryFactory;

if err != nil

match match match match

no one wants this

the

human

factor

am I

too excited

about Rust?

am I

listening to

what people say

or

am I

listening to

what I wanna hear?

make sure you have

explicit buy-in

beyond direct management

people

have

opinions

(surprisingly)

cargo-culting

is totally a thing

(pun intended)

people

and

interactions

matter

more than

technology

empathy

is a

powerful feature

use empathy;

thank you

@qmx | random.qmx.me