Date: 201809
Local time of day: 1201-1800
Location: ZZZ.TRACON, US
Flight conditions: VMC
Aircraft: A320
Operator: Air Carrier
Operating under: Part 121
Flight plan: IFR
Mission: Passenger
Flight phase: Climb
Airspace: Class B ZZZ
ATC / advisory: TRACON ZZZ
Reporter organization: Air Carrier
Reporter function: First Officer; Pilot Flying
Reporter qualification: Flight Crew Instrument; Flight Crew Multiengine; Flight Crew Air Transport Pilot (ATP)
Human factors: Workload; Time Pressure; Communication Breakdown; Distraction; Situational Awareness
Anomaly: Deviation - Track / Heading All Types; Deviation / Discrepancy - Procedural Clearance; Deviation / Discrepancy - Procedural Published Material / Policy
Detector: Person Flight Crew
When detected: In-flight
Result: Air Traffic Control Provided Assistance; Flight Crew Became Reoriented; Flight Crew FLC Overrode Automation
Contributing factors: Human Factors; Procedure; Environment - Non Weather Related; Airspace Structure
Primary problem: Procedure

Narrative: During preflight and taxi we had been assigned three different runways for takeoff. Initially planned for takeoff on Runway 18C; ramp controller then assigned 36C on initial contact and after taxi instructions were received we were changed to depart 36R. Our original paperwork both electronic and hard copy had only the south departure runways for ZZZ. We had to pull new takeoff data for the last two runway assignments and the last runway change occurred after our 'before takeoff' checklist was completed. We reprogrammed the performance numbers and SID correctly on the first runway for 36C change. When we received the 36R assignment new takeoff performance data was requested via ACARS and received. The new takeoff performance speeds were entered but the runway change to 36R was not. This resulted in our Flight Director commanding a left turn after takeoff instead of a right turn. The pilots discovered our error slightly before the Tower told us to turn right to 025 degrees and we were in the process of communicating the error in the cockpit when Tower made their call. Ramp Controllers should not be assigning runways on taxi out because they are not trained to the same standards as ATC specialists and make too many mistakes as happened in this case. We missed the opportunity to catch the error on taxi and didn't notice the error until we were into the turn airborne. Three runways assignments from pushback to takeoff helped cause our flight deck to become task saturated and we made an error that wasn't noticed until airborne and in a turn. We also had a no delay and very quick taxi to the takeoff runway and the error was not captured.I need to slow down and accomplish the before takeoff checklist after each runway change; including route verification which would have trapped this error. SID design in ZZZ is different than SIDs in many other busy airports due to flying headings written in print on a departure procedure. Whereas; other high traffic facilities SID procedure will assign the desired/required runway heading upon issuance of takeoff clearance or it will provide a specified fly to point. This specific procedure coupled with multiple runway assignments and subsequent requests for takeoff performance did not aid in mitigating the error. RNAV departures from the runway directly to a fix are much easier to visually verify in the cockpit. I am sure there is a good reason outside of my scope to keep the current procedures in ZZZ in place instead of designing specific point RNAV departures. If there is a more important reason for leaving the departures intact at ZZZ as they are today; I would then suggest the Tower controllers add 'fly heading xxx' upon takeoff clearance.




Synopsis: B767 First Officer reported a heading deviation after takeoff due to three runway changes during taxi and the failure to input the latest change into the FMC.