BOISE CODE CAMP 2026

Developer's Guide
to Networking

Modeling Human Connections with Database Associations

Rails · TypeORM · Sequelize · Prisma · JPA/Hibernate

@nerajno · developingdvlpr.com

Tonight's Schema

What We're Building in 47 Minutes

0 – 8 min

The Setup + Core Insight

Why developers struggle — and the mental model that changes everything

8 – 32 min

The 5 Association Types

belongs_to · has_one · has_many · :through · habtm — code + real life

32 – 42 min

Your Career Schema

Cross-ORM reference · mapping your network · key options

42 – 47 min

Action Plan + Q&A

3 concrete things to do before you leave this room

The Setup · 0 – 8 min

Why Networking
Feels Broken

And why you already know how to fix it

"I'm bad
at networking."

Raise your hand if you've said this.

Most developers think networking is schmoozing.

It's not.

It's system design.

Who's Talking

Nerando Johnson

Day Job

Jnr Frontend Engineer @ Hygiena

Vue 3 · TypeScript · Nuxt · Supabase · Tailwind

Community

Former Atlanta freeCodeCamp Organizer

600+ members · built & grew the community

Speaking

DevNexus · Connect.Tech · Carolina Codes

ADC · Nebraska.Code() · and more

Disclaimer

Opinions are
my own.

Everything I share today reflects my personal experience and perspective as a developer — not the views of my employer, clients, or any organization I'm affiliated with.

Code examples are for educational purposes. Your production mileage may vary.

Questions, pushback, and hot takes welcome. Scan to find me after the talk →

developingdvlpr.com

The Core Insight

Your network
is a schema.

Every person you know is a record.
Every relationship has a type.
The foreign key tells you who carries the responsibility.

The Schema

5 Association Types. 5 Network Patterns.

AssociationCardinalityCareer TranslationFK Lives On
belongs_to1 : 1Intentional 1-on-1 connectionsYour table
has_one1 : 1Mentorship — you are the anchorTheir table
has_many1 : NGroups, audiences, communitiesTheir table (many)
has_many :throughM : NWarm introductions via join modelJoin model
habtmM : NCommunity membership — mutualJoin table (no model)

Thank You to Our Sponsors

Sponsor Logo

Sponsor Logo

Sponsor Logo

Boise Code Camp 2026 would not be possible without the support of our sponsors.
Please take a moment to connect with them and show them some love.

Code of Conduct

Everyone deserves
a safe space to learn.

  • Be kind, respectful, and inclusive
  • Harassment of any kind will not be tolerated
  • If you see something, say something
  • Report incidents to conference staff immediately

Scan to read the full Boise Code Camp Code of Conduct →

boisecodecamp.org/code-of-conduct

Association 1 of 5

belongs_to

One-to-One Connections

You hold the foreign key. You carry the responsibility.

belongs_to

The FK Lives on Your Table

You chose this relationship. You carry it.

posts
id
title
user_id ◀
→
users
id
name
👔

Your direct manager

You report to one person. You hold that link.

🎯

Your assigned mentor

One official mentor at a time.

🤝

Accountability partner

Intentional, singular, committed.

☕

Coffee chat you scheduled

You reached out. The FK is on your table.

You made the commitment. You carry it. Send the message — actual ask, actual day, actual time.

belongs_to · Code

belongs_to — All 5 ORMs

# Rails
class Post < ApplicationRecord
  belongs_to :user
  # user_id on posts table
end

# Sequelize
Post.belongsTo(User, {
  foreignKey: 'userId'
});
// TypeORM
@ManyToOne(() => User)
@JoinColumn()
author: User;

// Prisma
model Post {
  author   User
  authorId Int
  @relation(fields:[authorId],
            references:[id])
}

// JPA
@ManyToOne
@JoinColumn(name="user_id")
private User author;

Association 2 of 5

has_one

Mentorship Relationships

They hold the FK back to you. You are the anchor.

has_one

The FK Flips — They Point to You

You created the seat. They reference you.

users
id
name
→
profiles
id · bio
▶ user_id
🧑‍💼

Senior dev has_one mentee

They reference you. You created the seat.

📈

Team lead sponsoring one report

Their FK points to your reputation.

🎙️

Conference has_one keynote speaker

One anchor per event. High trust, high signal.

🏆

Your flagship project

The work that defines your brand references you.

Good mentorship is structured — goals, check-ins, honest feedback. Not just vibes. Refactor if the match is wrong.

has_one · Code

has_one — All 5 ORMs

# Rails
class User < ApplicationRecord
  has_one :profile
  # profile.user_id → users.id
end

# Sequelize
User.hasOne(Profile, {
  foreignKey: 'userId'
});
// TypeORM
@OneToOne(() => Profile)
profile: Profile;

// Prisma
model User {
  profile  Profile?
}

// JPA
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn
private Profile profile;

Association 3 of 5

has_many

One-to-Many Groups

You are the hub. The collection grows every time you show up.

has_many

One Event. Many FKs Pointing Back to You.

1

Conference talk

= dozens of new FKs pointing to you

1

Meetup you run

= 30–80 people in your has_many

1

Blog post that lands

= thousands of records referencing you

🗓️

Atlanta freeCodeCamp

Built it. 600+ records. They all FK to the community.

📢

This room, right now

One talk → many audience records created.

✍️

Vue Mastery content

Students worldwide referencing your work.

⭐

Open source projects

Every contributor has a FK to your repo.

The collection only grows if you keep showing up. No passive has_many relationships exist.

has_many · Code

has_many — All 5 ORMs

# Rails
class User < ApplicationRecord
  has_many :posts
  has_many :mentees,
    class_name: "Developer"
end

# Sequelize
User.hasMany(Post, {
  foreignKey: 'userId'
});
// TypeORM
@OneToMany(() => Post, p => p.author)
posts: Post[];

// Prisma
model User {
  posts  Post[]
}

// JPA
@OneToMany(mappedBy = "author")
private List<Post> posts;

Association 4 of 5 — The Most Powerful

has_many :through

Leveraging Existing Networks

You reach new people through an existing relationship. The join model is the warm introduction.

has_many :through

Cold Connection vs Warm Introduction

❄️ Cold Connection

  • No context. No trust. No history.
  • Hit rate: ~2%
  • Feels transactional
  • LinkedIn request #4,289
  • No join model — just a raw record

🔥 Warm Introduction

  • Context + trust transferred + shared history
  • Hit rate: ~60%
  • Feels like a gift
  • "You two should meet"
  • Join model carries the story

The :through model is the warm introduction. It carries the data cold connections never have.

has_many :through

The Join Model Carries the Story

# Rails — Introduction (your join model)
class Introduction < ApplicationRecord
  belongs_to :introducer, class_name: "Developer"
  belongs_to :new_contact

  # Data a cold LinkedIn request NEVER carries:
  # context:          "Met at Connect.Tech 2024, Vue.js talk"
  # trust_level:      :warm_intro
  # shared_interests: ["Vue.js", "frontend", "community"]
end

class Developer < ApplicationRecord
  has_many :introductions, foreign_key: :introducer_id
  has_many :new_contacts, through: :introductions
end

habtm has no story. :through HAS a story. Choose based on whether the introduction matters.

has_many :through

Your Real :through Models

The :through model (the warm intro)→ You can now reach
Co-organizer role @ Connect.TechNew conference speakers & sponsors
Former colleaguesReferrals, job leads, insider info
Vue Mastery contentStudents & developers worldwide
Conference talk appearancesHiring managers & senior peers
Open source PRsInternational dev community
Meetup organizationEvery speaker you've ever invited

List one person you want to meet. Who could introduce you? Have you given them enough reason to do it?

has_many :through · Code

has_many :through — All 5 ORMs

# Rails
class Doctor < ApplicationRecord
  has_many :appointments
  has_many :patients,
    through: :appointments
end

# Sequelize
Doctor.belongsToMany(Patient, {
  through: 'Appointment'
});
// TypeORM
@ManyToMany(() => Patient)
@JoinTable() // custom entity for data
patients: Patient[];

// Prisma (explicit join model)
model Appointment {
  doctor   Doctor
  patient  Patient
  at       DateTime
  @@id([doctorId, patientId])
}

// JPA
@ManyToMany
@JoinTable(name="appointments")
List<Patient> patients;

Association 5 of 5

has_and_belongs_
to_many

Community Engagement

Mutual membership. No join model. No story needed. Just presence.

Where This Idea Comes From

Three Cups of Java

Vincent Mayers gave a talk at DevBCN 2023 that I keep coming back to.

"Communities affect our lives from an early age. It could be a church group, a book club, or a sports team. The fundamentals are the same worldwide, regardless of your involvement."

— Vincent Mayers (@vrm) · DevBCN 2023

His framing of community as a universal, cross-cultural pattern is the foundation of the habtm section you're about to see.

👉 mayers.io/blog/f/three-cups-of-java---devbcn-2023

habtm

Mutual Membership — Both Sides Are Equal

developers
id · name
⇔
developers_communities
join table — no model
developer_id
community_id
⇔
communities
id · name
⬡

Atlanta freeCodeCamp

You're a member. That's the whole record.

⬡

Conference speaker circuit

You speak at many. They have many speakers.

⬡

Dev Discord servers

You joined. That's the entire relationship.

⬡

Vue / React dev community

Mutual presence. Shared tech identity.

Pick 3–5 communities and actually show up. You can't be present in 40.

habtm vs :through

One Question Decides It

Does the connection itself have a story?

Questionhabtmhas_many :through
How did they meet?❌ No record✅ context field
When was trust established?❌ Unknown✅ timestamps
Who made the introduction?❌ No attribution✅ introducer FK
Any shared experience?❌ Just overlap✅ shared_interests
Need more data later?❌ Locked out✅ just add columns

YES to any row → use has_many :through. Default to :through when trust matters.

Putting It Together · 32 – 42 min

Your Career
Schema

Mapping the whole picture

Cross-ORM

Same Pattern. Every Ecosystem.

ConceptRailsTypeORMSequelizePrismaJPA
Many-to-onebelongs_to@ManyToOnebelongsTo@relation@ManyToOne
One-to-manyhas_many@OneToManyhasManyarray field@OneToMany
One-to-onehas_one@OneToOnehasOne@relation + ?@OneToOne
Many-to-manyhabtm / :through@ManyToManybelongsToManyimplicit/explicit@ManyToMany

Master the pattern — not the syntax. The concept is identical across every ecosystem.

Career Schema

Your Network as a Data Model

You (Developer)

belongs_to

Direct Manager · Mentor

has_one

Mentee · Sponsoree

has_many

Readers · Attendees · Students

:through

Hiring Mgrs · New Speakers · Leads

habtm

Communities · Conferences · Stacks

Every node has a type. Every edge has a direction. Design with intention.

Key Options

Options That Change How Relationships Behave

dependent: :destroy

What happens when you leave?

What happens to your mentees when you exit a company or community?

through: :join_model

The warm intro

The colleague who made the introduction — that IS your :through model.

counter_cache: true

Your signal metrics

Talk count, mentee count, blog count — tracked automatically as you grow.

scope: -> { active }

Quality over quantity

Only count people who are still engaged, still in your active network.

The Big Takeaway

has_many :through
is the most
powerful pattern.

Because real career growth comes through existing relationships — not from scratch.

Warm introductions carry trust. Cold connections carry nothing.

Action Plan · 42 – 47 min

3 Things.
Before You Leave.

Not "someday." This week.

Action 01 of 03

Audit Your belongs_to

01

Who do you intentionally belongs_to right now?

Manager, mentor, accountability partner — did you choose them, or did they happen by default?

  • Are those relationships healthy — or are they N+1 problems?
  • Send the message this week. Actual ask, actual day, actual time.
  • Not "let's connect sometime." A real ask with a topic.

A default belongs_to is the most expensive N+1 in your career.

Action 02 of 03

Map Your :through Models

02

List 3 people you want to meet.

For each one — who in your current network could make the warm introduction?

  • Have you given your :through model enough reason to vouch for you?
  • Invest in the middle relationship first — then make the ask.
  • If you can't think of a :through model — that IS the gap. Build it first.

Earn the right to the ask. That's has_many :through.

Action 03 of 03

Show Up to a habtm Community

03

Pick one community you've been lurking in.

Go from lurker to participant. This week.

1️⃣

Attend

Show up. Being there adds a record.

2️⃣

Contribute

Answer a question. Comment. Help someone.

3️⃣

Ship something

Share a project. Write a post. Give a talk.

4️⃣

Connect

Exchange info. Start building :through potential.

Resources

Go Deeper

This talk + blog

developingdvlpr.com/blog
Slide deck · companion doc · full post

Find a has_one

ADPList.org · MentorCruise.com
Free and paid mentorship platforms

Rails Associations

guides.rubyonrails.org/
association_basics.html

Community (habtm)

Atlanta freeCodeCamp meetups
Connect.Tech conference

Related posts

"How !To Be Mentored V2"
"Developer Networking Tools: IRL"

Build the habit

Atomic Habits — James Clear
Consistent showing up is everything

Questions?

What association type is your biggest gap right now?

  • 🌐 developingdvlpr.com
  • 🐦 @nerajno (Twitter/X · Bluesky)
  • 💼 linkedin.com/in/nerajno
  • 🐙 github.com/Nerajno

DMs open. Always.

developingdvlpr.com

Thank You.

"Build your schema intentionally.
Know which side of each relationship you're on.
And show up accordingly."

@nerajno · developingdvlpr.com

Leave feedback →