In Itamar Moses’ Completeness, the lead character wrestles with three things: 1) Love 2) Biology and 3) The Traveling Salesman Problem. I was drawn to this play because, in my past, I have wrestled with those same three things. Love led to my wife. Biology led to my children. But the Traveling Salesman Problem nearly got me killed by gangsters.
Here’s how it happened:
In 1992, I had despaired of being able to wait tables. I switched to temp work which I morphed into software consultancy by wildly exaggerating my technical expertise in the field of computer science. To be clear: I had a BA in theater arts. My computer skills were entirely self-taught— the result of me tinkering obsessively with my Apple IIe, and later, my Macintosh SE 30 (2 megs of RAM!). Sure, I had taught myself a smattering of programming languages and algorithmic principles, but I had never completed a single computer class.
Luckily for me, it was the dawn of the computer age, a lawless wild west. It was the kind of world where a major bank would hire a 24-year-old to write a system to manage millions of dollars of transactions. Because they had no idea what they were doing. And I could sound like I did.
So, by 1994 I had a thriving little business going. At that time, I had hooked up with a company that made mapping software. They brokered a contract between myself and a guy named… well, we’ll call him Louie. Louie ran a consultancy business that was in charge of helping bottled water and laundry companies determine optimal delivery routes for their trucks. Keep in mind that this is all years before the modern internet, GPS navigation, google maps, etc., In 1994 this was fairly new territory.
When Louie explained the parameters of the job, I thought it would be easy: route trucks. Calculate the best routes based on a series of observational data points his team had gathered about travel time, traffic, etc. Louie explained that the program wouldn’t need to tell the drivers how to get from point A to point B to point C. He just wanted to know the best routes.
"Cool," I thought, "because figuring out which roads to go on would be hard." Figuring out the shortest trip would be easy. It's just addition. There were only between 200 and 1800 stops per data set and I had access to 486 chipsets!
Now, at the time, the way I would work was this:
A) Take the job.
B) Bill the client what I thought was a lot of money, but which I know now was actually laughably small.
C) Go to the library and/or bookstore and research up the relevant computer algorithms for the things I didn't know— there was a lot of stuff I didn’t know… optimal sorts, string processing soundex theory, etc.. The books would have a lot of math, which I also didn't know, but I would read the code and adapt it. At the time, the internet and web didn't exist, but Borders had over two dozen books, IN STOCK of these algorithm collections.
D) Code the software
So, step (A) went great. And they agreed I could have six months to write the software which was, obviously, AN ETERNITY. So, I took the deposit, and bummed around for four weeks doing very little. I thought about the problem a bit, but no good solution popped into my head. This was odd, as I could normally count on my brain to come up with at least the outline of a sensible approach.
Finally, I had to try something. So, I knocked up a quick proof of concept to generate all the possible routes and then pick the shortest one. This took about four hours to write, but when I ran it, it just … froze. I put in some debugging code and found that it was running, but that seemed to have a lot more calculation to do than I had thought. Hmmm…
Noooooooo problem. Obviously, it was time to go steal the logic of my program from some computer science graduate's book at Boarder’s Book Store. But when I browsed through the books, nothing leapt out at me. This was strange because it seemed like it ought to be an obvious and common algorithm. But I couldn't figure out how to find it. I skimmed Donald Knuth, nothing. I read the indexes of every book available looking for… something… anything that sounded plausible. No dice. Of course, what was the problem even called? How could I look it up?
A month goes by. I'm starting to get nervous. I take another month to code the front end of the application, but it still doesn't do anything like, you know, route trucks. Louie finally wants to see a demo. A reasonable request, but one I can't provide. So, I copy the code onto a floppy disk, rub that floppy disk with a strong magnet, and drop it in the mail to him. Louie calls. “The file’s corrupted. I couldn’t open it.”
“Really? That’s strange.” I say. “I’ll get another copy in the mail to you right away”
Now I'm really panicking. I have accounted for accurate distance calculations. I have researched and coded calculations that account for the minor curvature of the earth to distinguish between delivery times. BUT, nothing I code can execute in the 45 minutes allowed for the software to process all 1800 stops each and every morning for the water companies to deliver their goods efficiently.
Then, I find a reference in an index to something called the "Traveling Salesman Problem". And there's a graph on the second page showing multiple points with cities labelled with weights for travel time for a dot labelled "salesman.”
I’ve found it! “Hey!” I yell to my wife from the floor of the book store. “This sounds like MY problem…”
I buy the book ($50!) and go home to read the relevant chapter. To this day, I can still remember the first line.
It's hard to describe the dropping sense of panic I had when I read that. I read the entire chapter. Yup. Never been solved. Can't be solved. There's a graph showing the NP-1 curve, which I finally understand. My code is due in one week. Louie is coming to Chicago to get it. I have SPENT his deposit, and have no other income to pay him back.
Now is a good time to mention that Louie was connected. Like gangster connected. During our time together he had taken me to a laundry convention in which he paid for everything, including the $18,000 booth fee, in cash. After that, he had me take him on a tour of the area. I drove while he pointed out the houses of retired mafia members and then snorted cocaine from the dashboard.
So I wasn’t looking forward to telling Louie that I didn’t have his software. Or his money.
What followed was a desperate four day period in which I, sleeping about 2 hours a night, managed to code something "good enough" to demo. As Elliott, the lead character in Completeness points out, the "good enough" solution is just that. Not perfect, but not bad.
So, the software was polished enough for sale but Louie seemed to be out of money. He had a copy of the executables, but the code was put in escrow awaiting the remainder of my fee. Louie protested, claiming that my delay had cost him. Things between the contracting companies got heated. Louie then went around the lawyers to contact me directly and demand the code. I refused to give it to him without the rest of the payment. That’s when Louie called me at 2am and screamed into the phone, "You pathetic little fuck; give me my fucking code or I am coming there with an ice pick and a body bag you motherFUCKER and I and my friends will fucking waste you, scoop you up and dump you in a fucking dumpster."
Unfortunately for Louie, this was my second death threat that year (the other was from an actor who had a mental breakdown). My life in the theater had made me perfectly comfortable with people threatening to kill me.
And perhaps Louie would have. But after that 2am call, he disappeared. Really. Gone. The company that introduced us hired a private detective to try and find him with no result. The remainder of my fee and my "solution" to the traveling salesman problem are still in escrow, I believe.
And fifteen years later, Completeness is written. So, of course, I have to direct it. Because in the real world, the unsolvable problems can get you killed. But in the theater, the unsolvable problems can show you how to live.
Here’s how it happened:
In 1992, I had despaired of being able to wait tables. I switched to temp work which I morphed into software consultancy by wildly exaggerating my technical expertise in the field of computer science. To be clear: I had a BA in theater arts. My computer skills were entirely self-taught— the result of me tinkering obsessively with my Apple IIe, and later, my Macintosh SE 30 (2 megs of RAM!). Sure, I had taught myself a smattering of programming languages and algorithmic principles, but I had never completed a single computer class.
Luckily for me, it was the dawn of the computer age, a lawless wild west. It was the kind of world where a major bank would hire a 24-year-old to write a system to manage millions of dollars of transactions. Because they had no idea what they were doing. And I could sound like I did.
So, by 1994 I had a thriving little business going. At that time, I had hooked up with a company that made mapping software. They brokered a contract between myself and a guy named… well, we’ll call him Louie. Louie ran a consultancy business that was in charge of helping bottled water and laundry companies determine optimal delivery routes for their trucks. Keep in mind that this is all years before the modern internet, GPS navigation, google maps, etc., In 1994 this was fairly new territory.
When Louie explained the parameters of the job, I thought it would be easy: route trucks. Calculate the best routes based on a series of observational data points his team had gathered about travel time, traffic, etc. Louie explained that the program wouldn’t need to tell the drivers how to get from point A to point B to point C. He just wanted to know the best routes.
"Cool," I thought, "because figuring out which roads to go on would be hard." Figuring out the shortest trip would be easy. It's just addition. There were only between 200 and 1800 stops per data set and I had access to 486 chipsets!
![]() |
| "This is a plan?" |
Now, at the time, the way I would work was this:
A) Take the job.
B) Bill the client what I thought was a lot of money, but which I know now was actually laughably small.
C) Go to the library and/or bookstore and research up the relevant computer algorithms for the things I didn't know— there was a lot of stuff I didn’t know… optimal sorts, string processing soundex theory, etc.. The books would have a lot of math, which I also didn't know, but I would read the code and adapt it. At the time, the internet and web didn't exist, but Borders had over two dozen books, IN STOCK of these algorithm collections.
D) Code the software
So, step (A) went great. And they agreed I could have six months to write the software which was, obviously, AN ETERNITY. So, I took the deposit, and bummed around for four weeks doing very little. I thought about the problem a bit, but no good solution popped into my head. This was odd, as I could normally count on my brain to come up with at least the outline of a sensible approach.
Finally, I had to try something. So, I knocked up a quick proof of concept to generate all the possible routes and then pick the shortest one. This took about four hours to write, but when I ran it, it just … froze. I put in some debugging code and found that it was running, but that seemed to have a lot more calculation to do than I had thought. Hmmm…
Noooooooo problem. Obviously, it was time to go steal the logic of my program from some computer science graduate's book at Boarder’s Book Store. But when I browsed through the books, nothing leapt out at me. This was strange because it seemed like it ought to be an obvious and common algorithm. But I couldn't figure out how to find it. I skimmed Donald Knuth, nothing. I read the indexes of every book available looking for… something… anything that sounded plausible. No dice. Of course, what was the problem even called? How could I look it up?
A month goes by. I'm starting to get nervous. I take another month to code the front end of the application, but it still doesn't do anything like, you know, route trucks. Louie finally wants to see a demo. A reasonable request, but one I can't provide. So, I copy the code onto a floppy disk, rub that floppy disk with a strong magnet, and drop it in the mail to him. Louie calls. “The file’s corrupted. I couldn’t open it.”
“Really? That’s strange.” I say. “I’ll get another copy in the mail to you right away”
Now I'm really panicking. I have accounted for accurate distance calculations. I have researched and coded calculations that account for the minor curvature of the earth to distinguish between delivery times. BUT, nothing I code can execute in the 45 minutes allowed for the software to process all 1800 stops each and every morning for the water companies to deliver their goods efficiently.
Then, I find a reference in an index to something called the "Traveling Salesman Problem". And there's a graph on the second page showing multiple points with cities labelled with weights for travel time for a dot labelled "salesman.”
I’ve found it! “Hey!” I yell to my wife from the floor of the book store. “This sounds like MY problem…”
I buy the book ($50!) and go home to read the relevant chapter. To this day, I can still remember the first line.
The traveling salesman problem has never been solved.
![]() |
| Uh-oh |
Now is a good time to mention that Louie was connected. Like gangster connected. During our time together he had taken me to a laundry convention in which he paid for everything, including the $18,000 booth fee, in cash. After that, he had me take him on a tour of the area. I drove while he pointed out the houses of retired mafia members and then snorted cocaine from the dashboard.
So I wasn’t looking forward to telling Louie that I didn’t have his software. Or his money.
What followed was a desperate four day period in which I, sleeping about 2 hours a night, managed to code something "good enough" to demo. As Elliott, the lead character in Completeness points out, the "good enough" solution is just that. Not perfect, but not bad.
So, the software was polished enough for sale but Louie seemed to be out of money. He had a copy of the executables, but the code was put in escrow awaiting the remainder of my fee. Louie protested, claiming that my delay had cost him. Things between the contracting companies got heated. Louie then went around the lawyers to contact me directly and demand the code. I refused to give it to him without the rest of the payment. That’s when Louie called me at 2am and screamed into the phone, "You pathetic little fuck; give me my fucking code or I am coming there with an ice pick and a body bag you motherFUCKER and I and my friends will fucking waste you, scoop you up and dump you in a fucking dumpster."
Unfortunately for Louie, this was my second death threat that year (the other was from an actor who had a mental breakdown). My life in the theater had made me perfectly comfortable with people threatening to kill me.
And perhaps Louie would have. But after that 2am call, he disappeared. Really. Gone. The company that introduced us hired a private detective to try and find him with no result. The remainder of my fee and my "solution" to the traveling salesman problem are still in escrow, I believe.
And fifteen years later, Completeness is written. So, of course, I have to direct it. Because in the real world, the unsolvable problems can get you killed. But in the theater, the unsolvable problems can show you how to live.


