Compatibility errors are the #1 cause of failed PC builds. Today you'll understand every compatibility dimension so you buy right the first time.
Intel LGA1700 (12th-14th gen), AM5 (AMD Ryzen 7000+). The chipset on the motherboard determines features: PCIe lanes, USB speeds, overclocking support. Z-series (Intel Z790) and X-series (AMD X670E) allow CPU overclocking. B-series boards are mid-range. Budget A-series boards. Higher chipsets add more PCIe 4.0/5.0 lanes and USB 3.2 Gen 2x2 ports.
DDR5 runs at 4800 MHz base, up to 7200+ MHz with XMP (Intel) or EXPO (AMD) profiles. Higher speed and lower CAS latency (CL30 vs CL40) improves performance. Always check the motherboard's QVL (Qualified Vendor List) for guaranteed compatibility. Dual-channel (2 sticks) doubles memory bandwidth vs single-channel. Always install in the correct slots (usually A2/B2, not A1/A2).
Your GPU needs enough PCIe lanes for full bandwidth. PCIe 4.0 x16 = 32 GB/s — more than enough for any current GPU. PCIe 5.0 x16 = 64 GB/s (future-proofing). TDP (Thermal Design Power) is the heat a cooler must dissipate. A 125W CPU needs at minimum a 150W cooler. High-performance CPUs (i9-13900K at 253W under load) need 280mm+ AIOs or high-end air coolers. Underpowered cooling = thermal throttling.
# RAM channel configuration checker
# Many builds lose 40% memory bandwidth from wrong slot placement
class MotherboardSlots:
"""Most ATX boards: A1, A2, B1, B2 (A=channel A, B=channel B)"""
def __init__(self, slots=['A1','A2','B1','B2']):
self.slots = slots
self.installed = {}
def install(self, slot, stick):
self.installed[slot] = stick
def check(self):
# Dual channel requires one stick per channel
ch_a = [s for s in self.installed if s.startswith('A')]
ch_b = [s for s in self.installed if s.startswith('B')]
total = len(self.installed)
print(f"Installed: {total} stick(s) in slots {list(self.installed.keys())}")
if total == 1:
print(" ⚠ Single channel — half bandwidth. Add a matching stick.")
elif total == 2:
if len(ch_a)==1 and len(ch_b)==1:
# Check if they're in the right slots (A2/B2 preferred)
slots = list(self.installed.keys())
if set(slots) == {'A2','B2'} or set(slots)=={'A1','B1'}:
print(" ✓ Dual channel — full bandwidth")
else:
print(" ⚠ Dual channel BUT check manual — A2/B2 slots preferred")
else:
print(" ✗ Both sticks same channel — running single channel!")
print(" Move sticks to A2 and B2 for dual channel")
elif total == 4:
print(" ✓ Quad populated — dual channel, max capacity")
# Common mistake: installing both sticks in adjacent slots
print("--- Correct: A2 + B2 ---")
b = MotherboardSlots(); b.install('A2','16GB'); b.install('B2','16GB'); b.check()
print("\n--- Wrong: A1 + A2 (same channel) ---")
b2 = MotherboardSlots(); b2.install('A1','16GB'); b2.install('A2','16GB'); b2.check()
Research PCIe bifurcation. Some motherboards can split a PCIe x16 slot into two x8 slots for dual-GPU or dual-NVMe configurations. Why would you want this? What are the bandwidth trade-offs? Look up whether your target motherboard supports it.