Rooms Are the Primitive. Walls Are Edges.
Draw a plan in CAD and you get a pile of line segments. Ask that pile which two rooms a particular wall separates and it has no idea. It knows where the ink is. It doesn't know who the neighbors are.
My first internship taught me what that costs. I was told to manually change more than 1,200 doors from type A to type B in an AutoCAD door schedule. After the first 15, I googled find-and-replace, ran it, and was done. My supervisor sent me home early. I was penalized as an hourly worker for being efficient. The real lesson took me longer: those 1,200 doors were rows in a list because the drawing didn't know what a door was.
The useful fact about a wall isn't its geometry. It's the pair of rooms on either side of it. This essay is about building plans on that fact.
Start with the room
A room names a place for an activity. Sleeping, cooking, gathering, working and storing have different spatial needs, and the relationships between them organize a building. Walls, doors, windows and stairs make those places usable and connect them. Starting with rooms doesn't make those elements secondary. It gives you a way to ask what each one serves.
My room study uses a 3 × 2 grid as scaffolding. Contiguous cells with the same room ID become one room. Shared boundaries become potential connections, not automatic doors. From that one structure you get quantities and a graph at the same time.
The idea has limits, and I'd rather name them up front. Structure, services and environmental systems don't reduce to room labels. A room-centered model is useful when the room list captures activities and relationships, not just names.
Three lines, four edges
Treat every room as a node. A wall is an edge: the connection, and the separation, between exactly two nodes. The outside is a node too, so an exterior wall is an edge between a room and the outdoors. Once walls are edges, a floor plan stops being a drawing you interpret and becomes a structure you can query.
The smallest example that shows the difference: four rooms on a 36 × 24 ft plate, split by one vertical and one horizontal partition that cross in the middle.
- Count like a drafter and you get three lines: a 24 ft vertical and two 18 ft horizontals. Sixty feet of interior wall.
- Count like the graph and you get four edges: R1↔R2 at 12 ft, R3↔R4 at 12 ft, R1↔R3 at 18 ft, R2↔R4 at 18 ft.
Same 60 ft. Different count, and the difference is the point. The vertical wall is one line in the drawing and two relationships in the building. A door in its top half joins R1 and R2. Slide that door 12 ft down the same line and it joins R3 and R4: a different pair of rooms, maybe a different code question, on what the CAD file thinks is one object.
And R1 and R4, which visibly touch at the crossing, share no edge at all. They meet at a point. The drawing shows four rectangles touching. The graph tells you it's a ring.
Drag the crossing and every length moves. Pull it 70% across and 65% down and the edges become 15.6, 8.4, 25.2 and 10.8 ft. The total is still 60 ft and the graph is still four edges. Geometry is the variable. Topology is the constant. A plan tool should know which of the two you just changed.
Try it: drag the crossing of the two partitions and watch every edge length change while the count stays at four edges and 60 ft.
What the graph knows that the drawing doesn't
Store walls as edges between rooms and a handful of tedious questions become lookups:
- Who touches whom. Adjacency is the edge list. No squinting at whether that wall really runs continuously behind the column.
- Where a door can go. A door is an attribute on an edge. No edge, no door.
- Which rule fires. Many wall requirements are written as pairs: a unit next to a corridor, a unit next to another unit, one occupancy next to a higher-hazard one. Those are edge questions, and the graph can flag them before anyone picks an assembly.
- What a revision did. Drag a partition and the graph can tell you whether you changed a length or a relationship. One changes quantities. The other can change circulation, light, the door schedule and the code path.
- How much wall there is. Interior wall length is the sum of edge lengths, each shared run counted once. In my view wall footage is one of the biggest levers on interior cost.
An edge says which two rooms a wall sits between. It says nothing about what the wall is. Privacy, structure, fire and sound depend on the assembly and the applicable requirements, and the graph doesn't model any of that. A bearing wall is an edge the structural engineer also owns. The graph can tell you which rooms it separates. It can't tell you whether it can move.
Adjacency is the rulebook
If walls are edges, design rules become rules about edges. My adjacency study puts six equal rooms on a 3 × 2 grid, entry, living, kitchen, dining, bath and bedroom, and tries all 720 arrangements. Required pairs score +3 when touching and −3 when not, avoid pairs ±2, preferred pairs ±1.
- Two required pairs and one preference: everything fits, score 7.
- Add kitchen beside dining: still fits, score 10.
- Add a bath–kitchen avoid: the rooms move, score 12.
- Require four rooms beside the living room, on a grid where a room has at most three neighbors: one conflict, no matter what. A rule has to change.
- Go to a studio and the walls disappear. Every required pair holds, and the bath–kitchen avoid breaks. Rooms that share one volume can't be kept apart.
Then freeze the plan and add one more rule. The built layout scores 9. Solving again would score 15. But a built plan can't be solved again. It's a fixed answer to the rules of the day, which is the best argument I know for solving more of them before you build.
Try it: tap matrix cells to make pairs required, preferred or avoided, and watch the solver re-plan the six rooms and rescore them.
Those weights are mine, not a standard. Adjacency diagrams don't settle room size, daylight, structure, accessibility or egress. They make the priorities visible early enough to compare alternatives.
Adjacent is not connected
A plan full of shared walls tells you who the neighbors are. Only the doors tell you who can get to whom. Every door needs a shared wall, and most shared walls never get a door. So the access graph (rooms joined by doors) is always a subset of the adjacency graph (rooms joined by walls), and choosing that subset is where circulation, privacy and egress get decided.
My door study uses a 32 × 24 ft plate split into four 16 × 12 ft rooms, with four possible doors and R1 as the room with the way out. Routes run center to center.
- All four doors open: a ring. R2 is 16 ft from R1, R3 is 12 ft, R4 is 28 ft by two routes. Close any door and everyone still gets out.
- Close the R2–R4 door: every distance stays the same. A route-length check would say nothing happened. The graph says R2 and R4 are now dead ends and every remaining door is the only way into some room.
- Close the R1–R2 door instead: same door count on the schedule. R2 goes from 16 ft to 40 ft, and R3 and R4 just became corridors.
- Close two doors around R4: it still shares two walls with its neighbors and has no way in at all.
Try it: open and close the four doors and watch the routes, the dead ends and the doors with no backup change on the same plan.
A room with one door is a dead end. A room with two is a pass-through, whether anyone meant it to be or not. That's the difference between a bedroom and a bedroom somebody crosses to reach the kitchen. Every door you add to a room is a small vote for turning it into a hallway, and the graph is the only place that vote gets counted.
So decide doors as graph edits, not symbols. Before a door goes into a wall, ask which room it turns into a corridor, which room it leaves with one way in, and whether any room is now one closed door from being cut off.
Circulation isn't leftover
It's tempting to treat corridors and lobbies as whatever area is left after the rooms. My circulation study checks a 4 × 3 grid with a flood fill from the entry. Clear cells that touch become reachable space. Clear cells that don't are pockets: area you paid for that nobody can get to.
Leftover space isn't automatically circulation. Circulation is a connected route, and its size and shape depend on occupants, access and life safety. A compact layout can save area and still be confusing. A generous one can be clearer and cost more. The goal is routes that are legible and proportionate to the building, at whatever area that takes.
Plates are tilings, programs are constraints
Zoom out to the floor plate and the same thinking holds. A plate has to fit rooms, corridors, cores and services inside a bounded shape without conflict. My tiling study uses a 180 × 65 ft envelope with one central corridor and whole modules along the length, and it reports the leftover strips separately instead of hiding them in an efficiency score. An odd remainder might be great storage or a special unit. It should be a choice.
The program is the set of required cells. Add a fitness room or a package room and something else shrinks, moves or disappears, and every space has a minimum size below which it can't do its job. My program study tests minimum modules against two rows beside a 6 ft access band. Making those minimums explicit turns "add a room" into a conversation about what it displaces.
Windows are ports to the outside
The exterior is a node, so a window is a port on an exterior edge. It admits daylight, maybe air if it opens, and solar heat. My window study puts nine rooms on a 3 × 3 plate where bedrooms and living rooms request a window and baths and storage don't. The center room has no exterior edge, so it can't get one. That's a graph fact before it's a design problem.
A second study separates glazing area from openable area on an 18 ft room, because they're different ports. More glass can mean more daylight and view, and also more heat gain, glare, cost and less privacy. No single window-to-wall ratio is right everywhere. Orientation and use should drive it.
Schedules, plans and elevations are views of one graph
Here's where my door-schedule internship comes back around. A schedule is a query over the graph. A door record references the two rooms it joins. Remove that edge and the record goes away. Group rooms by use and sum their areas and you have a finish schedule. A door referenced by two rooms is still one door.
The plan is adjacency made visible. The elevation is a side view of stacked cells: rooms that need light put windows on the facade, floor lines mark levels, and zoning planes show where the mass steps back. A construction set is one building seen through plans, sections, elevations, details and schedules. My one-model study draws four room records and four door edges, repeats them at 12 ft floor-to-floor, and reads six views off the same object.
When the views come from one model, a change propagates. When they don't, a plan dimension conflicts with the ceiling plan, or a window on the elevation is missing from the schedule, and the contractor resolves it in the field. A missing property is harder to notice than a misplaced object, and an unassigned hardware field gets filled by someone else's default.
Try it: edit the one floor object and watch the plan, section, schedules and sheet index update together.
None of this guarantees a good set. The model and its relationships still have to be maintained, and an issued set is a snapshot. But I'd rather have 1,200 doors that know which rooms they join than 1,200 rows I have to fix by hand.
Draw the lines last
A tool that keeps walls as free-standing lines makes you re-derive adjacency by eye every time something moves, and it can't tell a length change from a relationship change. A tool that keeps rooms as nodes and walls as edges gets adjacency, door eligibility, code triggers, schedules and quantities from one structure.
I'd rather author the rooms and let the walls fall out of the topology than draw walls and hope the rooms come out the way I meant.
See your plan as rooms and relationships, not lines. Book a TestFit demo and run this on your own site.