# Assembly The next three weeks are overtly busy, but not actually productive. Robin spends a lot of time with the SmartHome developers to gain an understanding of what their gadgets actually do, so we can help them re-design things for our platform. Andy and Bert read everything about the hardware they can find, and set up a cross-building environment and start preparing a Linux kernel for the hardware. I iterate over contracts with Sam, and eventually get them signed by both parties. We agree that we'll work mainly from our own office. However, Nina is still waiting for hardware, which means that Andy and Bert work blind. We like our own office. It's actually an apartment near the city centre, in a building from 1905, which we rent. There's private rooms for everyone, except Andy and Bert, who prefer to share a room. What was meant to be a living room is the meeting room. The kitchen remains as a kitchen, and there's even a small room we use as a server room. We've spent a fair bit of effort turning the apartment into a good office for us. There's privacy for everyone, extremely comfortable sofas, good networking and electricity everywhere, good heating, a real bathroom (both shower and tub), basically all the comforts of a modern office, except it feels more like a home. We've put sound isolation everywhere, both external and internal walls, plus ceiling, so that it's quiet. It was pretty quiet even before, since it's an old building with quite thick stone walls. We can have an actual shouting match in the meeting room without disturbing the neighbours or those working in their own rooms. I sit at my desk, and call Sam to ask what's up. "Hey Sam, it's Anna. We're still waiting for the ten SmartHome hubs, and we must have them to really start development. It's been several weeks, is there a problem?" "Hi, Anna, let me check and call back to you." Fifteen minutes pass. My phone makes a noise, it's Sam calling back. I answer. "We seem to have a problem. Some of our guys think one or two devices should be enough for you. We don't have ten in the office." "Sorry, but it's not your decision how many we need. If we have to share devices for development, that will create congestion, and block work that would otherwise progress smoothly." "I see. Very well. I'll what see we can find." "Wait. I'm curious: these devices, can we use your normal mass produced SmartHome hubs for development? The ones you have manylots available for sale in your web store, and on Amazon?" "Yeah, those would work. Unfortunately, due to tax and accounting reasons, we can't just go get them from the warehouse. To start with, we've outsourced the sales and warehousing." "I understand. Let's do this: we'll order what we need, overnight delivery, and bill you for them as part of our expenses? That is a bit of a roundabout way to get the stuff, but it unblocks us and since this is a life-and-death project, we have to avoid being blocked." Sam is silent. "Uh, yeah, that would work. As you say, it's quite roundabout." "Good. Can you send one of your techies to our office tomorrow to help Nina get them set up for development, get a serial console attached, and flash a new kernel that we've built, and so on? We have copies of the relevant documentation, but it always helps to have someone who's done the thing before." ------ The following day, Nick from SmartHome arrives early in the work day. Nina parks him in the kitchen, and shows him how to use the coffee machine, while they wait for the devices to arrive by courier. The courier arrives by noon. Nina signs for the delivery, and carries the boxes to her lab, a large room with plenty of shelves and desks so there's room for spreading hardware around. It is her sanctum, the rest of us aren't supposed to enter without asking for permission. The lab is filled with furniture and bits and pieces of electronics. The walls are all covered by bookcases, wooden Lundia shelves, cupboards, chests of drawers, and other storage. Part of one wall is covered by a peg board with hooks for tools. There are a lot of tools hung on the board: every conceivable sort of screwdriver, hammer, pliers, knife, even an axe and, most curiously of all, a half-meter long rubber baton, and a huge sledgehammer. Near the door are several large garbage bins, labelled for recycling: WEEE, metal, toxic, and misc. In addition to a very large, sturdy table in the middle of the room, similar to an island table in a kitchen, there is a lab bench along one wall, with an oscilloscope, soldering irons, a large magnifier, and other tools for electronics. There are three bar stools around the island table, and at the lab bench. The room is well lit, and both the lab bench and the island table have large lamps hanging over them from the ceiling. Nick does not know he's entering a special place. He follows Nina into the room, and promptly collides with a table, causing a spare desktop machine fall to the floor. There is a terrible noise, and parts fly across the floor to all corners of the room. "You! Sit!" Nina points her finger at Nick, and uses her loud voice. Nick is startled, but luckily doesn't cause any more havoc. He looks around for a chair. "Sit! Now! NOW! On the floor!" Nick drops to the floor, with his buttocks first, as if he were a well-trained dog. He looks startled and confused at his reaction. "Look, Nick. This is my lab. I need your help, and that's why you're allowed in here, but you're not allowed to move, or touch anything, and if you break anything else, I'll throw you out. Do you understand?" "I'm sorry, I'm just clumsy. I hope I didn't break anything important?" Nick has dropped his shoulders, and speaks in a soft, calm voice. He resembles nothing as much as a dog caught doing something bad. If he was wagging a tail and pleading for mercy using his big, glistening brown puppy eyes, nobody would be surprised. "Nah, it was just a spare PC I was going to re-purpose as an extra backup server. Don't worry about it." Nina takes one SmartHome cardboard box, puts it in the middle of the big table, and stacks the rest on an empty shelf on the wall. Carefully, with slow hand movements, she unpacks the gadget from the box, then takes her phone and takes a photograph of all the contents. "All right, I have a hub. I guess I need to open it to gain access to the serial port, right?" "Yes, Miss Nina." Nina frowns at Nick. "Why are you calling me Miss Nina? Are you being sarcastic?" "No, Miss Nina. I don't want to anger you any further." "Good boy. But just Nina is enough." Nick nods. "To open the case, I need to open these four screws" - Nina points at them - "And then use a bit of force to get the cover apart, right?" "Yes, Nina. Would you like me to do it for you?" "No, thanks, I need to learn how to do this." Nina goes to the wall, where a ton of tools are hanging, and chooses an electric screwdriver, and returns to the table. Deftly, she opens the four screws. She then goes back to the walls, returns the screwdriver to its place, and takes a small crowbar. She inserts the end of the crowbar between the halves of the case, and wrenches it open with a sudden, fast movement resulting in a crunch. Nick is surprised, again, but stays put. "Oh." Nina smiles a small, tight smile, and starts picking out the various bits of electronics from inside the remains of the case she's ruined. "This is the mainboard, I assume the header with the pins for the console serial port are here. Is that also how we flash a new kernel?" "Yes, that's right." Nina turns on the lamp hanging from the ceiling over the desk. The desk, and the room, is bathed in a bright, cold white light. She bows down and looks at the now-exposed mainboard of the opened hub. She raises her glasses and puts them on top of her head, picks up the mainboard, and squints at it quite closely. After a moment, she shakes her head and fetches a magnifier from a drawer. "I should have suitable connector, somewhere, let me see." She goes to rummage in a cupboard. She pulls out a cable that's clearly handmade. "This should do." She plugs the cable to the mainboard, pulls out a laptop from under a heap of stuff on another table, and plugs the other end of the cable to the laptop. She connects power to the mainboard, and soon the laptop screen starts showing a stream of text. "Hmm. Okay, that boots with the factory kernel. Now, let's see if I can flash the kernel that Andy and Bert have built. It's the same version of the kernel, and build from the same source code version you use, it should work." Several minutes pass, as Nina uploads the new kernel to the device over a 115200 bit/s serial connection, and then writes it to the internal flash storage in the device. Nick gets bored and offer to fetch them both coffee. "No liquids in the lab." is Nina's curt answer. "May I go have coffee in the kitchen?" "Sure, that's fine." Nick gets up from the floor, and goes to the kitchen. Robin is there, sipping a cup of tea. "If you'd like tea, there's plenty left in the pot, milk's in the fridge." "Thank you. I'll sit here. Nina says I can't bring liquids into the lab." "The lab? Nina let you into the lab?" "Er, yeah? Why do you ask? She went in and I followed. And then I was clumsy and a computer fell on the floor and broke." "Oh dear. I should've told you that the lab is Nina's special place. She's spent months setting it up, and it's where she spends almost all of her time. The rest of us do not enter without an explicit invitation each time. She doesn't usually tolerate other people there, lest they make a mess there. If she didn't shout at you, she must like you." "Well, she did shout at me to sit on the floor after I was clumsy." "That's understandable. You did break a computer. Not to worry, she'll be able to fix it, and if it was something expensive, we'll bill your company for it. Hah." "Oh. Okay, I guess." Nick sits for a while, finishing his cup of tea. "Thank you for the tea. I will go back to help Nina now." Robin nods. Nick gets up, washes his cup under the tap, and puts it in the dishwasher. Just as he's about to open the kitchen door, Robin speaks up. "Oh, boy, just to be clear, when I said Nina must like you, I didn't mean romantically. I don't want there to be any misunderstanding." Nick gets to the lab door, which is standing open. He politely knocks on the door frame. "Nina, may I enter?" Nina looks up from the laptop, and nods. "Pull up that chair and get seated next to me so you can see the laptop. Actually, let me move the monitor here." Nina gets up, goes to the lab desk, and unplugs the 24" monitor sitting on one end. She carries the monitor to the island desk, and plugs in the end of a display cable. "There, that'll make it easier for both of us to see what's happening." Nick picks up a bar stool on the other side of the island table, and carries it near Nina's stool, and sits down. "So, I tried to flash another kernel onto the board, but it seems to not boot correctly. Let me show you. See if you can spot anything strange." Nina presses a button the power supply for the board, and the monitor has quickly streaming text again. Soon, the stream stops for about thirty seconds, and then a final screenful splurges. Nina points at the final splurge, and reads aloud. "Oops. Kernel panic. Unable to handle kernel NULL pointer dereference. Does that location look familiar to you?" "I'm not sure. Which kernel image is this?" "It's an image that Andy and Bert built from the SmartHome source code dump, using the included instructions. They say it boots up fine on another board, and in Qemu, but obviously we haven't been able to test it on real hardware until now." "If it boots on other hardware, my guess would be something specific to our hardware. Perhaps a device driver?" "Perhaps. I better go get Andy to look at this. He'll be so thrilled." ------------------------------------------------------------ The next morning I have tea with Nina and Andy in the kitchen. We don't have regular stand up-meetings in person, but I try to talk to everyone at least a few times every week. What we do have is a kind of written stand ups, where everyone writes up what they've done each day in the internal blog, and Nina and Andy had written about the kernel booting problems. I'd pinged them on IRC so I could discuss this more efficiently in person. I made a pot of tea, Lapsang Souchong, since I like the smokey flavor. "I understand the SmartHome devices arrived yesterday. Is everything working now?" Nina shakes her head, while holding her tea mug between her hands, as if to warm them . "No, not at all. We haven't got a working build of the kernel yet." "Oh? Andy?" Andy looks like he'd be vexed, if he wasn't his usual perpetually calm self. "Yeah. We've set up a cross-building environment, but the kernel image we built doesn't boot correctly. We spent some time debugging that yesterday with Nick from SmartHome, but he wasn't all that much help. I don't think he does this kind of thing usually." "I see. Do we know what the problem is?" "Not yet. It looks like the normal embedded Linux vendor inability to provide complete and corresponding source code for their kernel. Getting their kernel to build, install, and run shouldn't be hard, but it always is." "I agree. What can we do to solve it this time?" "I'll get one of the SmartHome boards from Nina, and let her keep the rest. She can continue to build a mini-rack, but Bert and I can use the one to debug. That way we're not waiting on Nina, and she's not waiting on us. If Bert and I are still stuck in the afternoon, I think you should call SmartHome and arrange for a couple of their best kernel engineers to come help us." I nod. We've learnt, as a team, that it's important to ask for help if you're stuck, while it's also important to not ask for help until you've given the problem a good try yourself. "I'll call Sam after lunch, unless you tell me it's all working." "Nina, does that sound OK to you? And are you doing OK with the mini-rack build?" Nina takes a gulp of tea, and nods. "Yeah, it's going well. I've unpacked all the devices, and extracted the boards from the cases. That's great crunchy fun. The cases are now waste, but we don't need them anyway. I'll need to go pick up some hardware bits for the rack so that we can install all the boards, but that's no problem." We all have company credit cards, but especially Nina. She often needs to go buy computer parts, and given that we do not usually use off-the-shelf computers, they're often esoteric parts. Luckily, she knows where to find anything we need. Nina departs, taking the keys for the company van from the key safe. Andy withdraws to the room he shares with Bert, so they can together unlock the mysteries of the kernel that wouldn't boot. I'm not worried about that. We've had this situation before, where an embedded Linux vendor doesn't share the actual kernel source code they use, or are missing some build step from their documentation, or does something else stupid. We know it's possible to get Linux booting, and we have access to the people who made it happen. I'm not worried, but I am irritated that this particular problem keeps coming up over and over again. I take me time to finish my cup of tea. When I'm done, I put the cup in the dishwasher. Like all of us, I avoid liquids at my desk, even if Nina's lab is the only place where liquids are explicitly forbidden. ------------------------------------------------------------ In the afternoon Andy comes to my room, and tells me they're still stuck with the kernel. I call Sam. "Hi, Sam, it's Anna. We're having some trouble building and booting the Linux kernel. Could we have one or two of your kernel engineer visit out office?" "Hi, Anna. Of course. Is it urgent? Do you need them today, or is tomorrow morning OK?" "Tomorrow morning at nine would be perfectly fine." I look at Andy with my eyebrows lifted, for confirmation, and he nods. "Can you ask them to use the door phone, and call Andy if there's any problem getting in?" "Sure thing." ------------------------------------------------------------ Nina returns from a shopping trip, with large cardboard boxes and an army surplus 100-liter duffel bag filled with things. She carries them into her lab, and closes the door. She's rigged up an "ON AIR" sign outside the lab door, which she got from a radio station. We've never asked her how. ------------------------------------------------------------ The following morning two SmartHome kernel engineers push the button on the door phone at exactly nine o'clock. Andy lets them in, and they join Bert in his and Andy's room. I arrive soon after, and see from IRC that Andy has requested them to be left alone, so I don't go and introduce myself and tell them they're welcome. Three hours later, they exit the Andy and Bert room, and shake hands and say goodbye. They're gone before I get out of my room. "Good morning, Andy and Bert. I guess those were the SmartHome kernel engineers leaving? How are things?" "Very good. We have a booting kernel now, and we know what changes SmartHome has made to the stock Linux version. It should be plain sailing from here." Bert stands silent, but restless. It's a clear sign that he disagrees with something, but isn't sure he should say anything. "Bert, what's up?" "They're horrible. Their kernel changes are horrible! Utterly despicable! And we're going to have to use their code, since we can't get the specs to write the necessary drivers ourselves." "How much of a problem is that going to be?" "Who knows! It's crap code, it may blow up in our faces at any time. They have busy-waits and arbitrary sleeps all over the place. It's no wonder they don't upstream the code. Upstream kernel maintainers would laugh in their faces. Linus would definitively be sarcastic at them." To upstream changes means to send your changes to the person or project who maintains the code, and talk them into including the changes in their code. It can be a lot of work, and it opens you up for criticism, but the benefit is much less maintenance work for you in the long run. Up-streaming is considered to be the mark of a full participant of open source, and something a lot of companies fail to do. "I see. Andy, do you agree?" "The code is not great, but it's not the worst embedded kernel code I've seen, in or out of Linux. I think we'll manage. It might be good to be prepared, though, and try to get documentation for the SoC they use. Just so that we can debug and improve things if things do blow up in our faces." An SoC is a system on a chip, meaning it's basically a single computer chip that contains all the usual parts of a computer, except interfaces for communicating with the outside world. Most embedded systems are built around an SoC, and there's a number of big companies developing their own SoC chips, and the SoCs are all different, and for reasons nobody else understands, the SoC vendors are reluctant to publish all the documentation to program them. Lack of documentation makes it difficult to write reliable software for them, and that in turn makes is less attractive to choose their SoC for products. One may liken this to wearing shoes made out of dynamite, but the vendors seem supremely confident in being able to grow new legs on demand. "Yes, I agree, that's a good idea. I assume you asked those kernel engineers for them?" "Yeah, but they have them under NDA, and can't share them with us." "Typical hardware vendor BS, in other words. It's probably no use asking Sam, either. Can you email the particular, make and model number of the SoC, and I'll send out some feelers? Oh, and please email Nina where she can find the working kernel, and work with her to setup a continuous integration job to build it?" "Of course." I go to my room to compose a thank-you email to Sam, for the help his kernel engineers gave us. I don't mention the code quality issue, or the lack of SoC documentation. There's no point in ruffling feathers at this point. I know people around the industry, and I may be able to get someone to leak me a copy of the SoC documentation. That's a little unethical, of course. I will first, however, contact the SoC vendor directly and see if they'll give me a copy of the documentation for a promise that we'll take care of up-streaming any necessary kernel changes. We're likely to have some time after the SmartHome project, and the up-streaming would keep Andy and Bert productively busy during the lull. ------------------------------------------------------------ We do not see much of Nina for the next two days. She's there, when the rest of us arrive in the morning, and still there, when everyone else leaves. We only see her when she comes to the kitchen to drink or eat, and though she seems happy, we do not engage her in conversation. If she needs help, she'll tell us, but otherwise she's clearly deep in her work, and gets quite terse if she has to talk about anything. All of us are allowed to be as eccentric as we want, as long as we do not harm the others. When Nina finally emerges from the lab, it's early afternoon. She opens the lab door, and turns off the "ON AIR" sign. She looks satisfied, but tired. Via IRC, she announces that the mini-rack with SmartHome devices is ready, and that she'd be happy to give a demonstration and tutorial after she's had lunch. She goes out, and returns after fifteen minutes with take-out Indian food, and takes the food to the kitchen. She takes a carton of milk from the fridge, and sits down at the kitchen table to feast. Nina doesn't usually care much what food she eats, but when she finishes a build or other project, she celebrates with her favorite food. It's always the same Vindaloo, from the same takeout restaurant, and with a liter of cold milk to calm her taste buds. Some years ago, the restaurant she had been using went out of business, and Nina spent a week to find a new favoured restaurant, eating Vindaloo three times a day, until she found one she liked. It was a very aromatic week for the rest of us. The whole team is gathered in the corridor for the demonstration. Nina comes from the kitchen and ushers us into the lab itself, and tells us to take position on one side of the island table. She goes to the other side, and starts. A luggage trunk is on her side of the table, made out of hard, black plastic. The trunk has handles on all sides for carrying, and opens along a vertical piano hinge along one side. Inside is 10U of server rack. Nina has a pointing stick in her hand. "Welcome. This is is the SmartHome development trunk. It is similar to what we've used in previous projects." The stick strikes the side of the trunk. "It has nine boards from SmartHome hubs, plus a controller, which gets the serial console from each hub, plus Ethernet and power to each hub, which are both programmatically controlled." The stick touches the various parts of the rack. "The controller also has a wifi access point to which the hubs connect. All of us have ssh access to the controller, and can manage each of the hubs. We'll co-ordinate manually over IRC, as before, to decide who uses what at any time. To simplify things, I've named the hubs nina-01, andy-01, and so on. We each have a dedicated hub, for now, plus CI has three of its own. That leaves only one spare, but we can add more if needed." Nina pauses to take a breath. "Our normal development rack now has a continuous integration system set up, which uses the three hubs to run tests on. The tests are currently very simple: install a newly built kernel, and reboot, and verify that root can log in via the serial port within 60 seconds. We'll expand on that as we start development. In addition, the rack has SmartHome lighting gadgets, with a light bulb each. Each hub has its own light bulb. The light bulbs are inside the trunk, and there's a webcam so you can watch them remotely. Questions?" The four of us are standing quite for a moment, until Andy speaks. "Nina, you'll have to excuse our silence. We're used to you being excellent, but you've outdone yourself. This is a great setup, and it'll help the rest of us work faster." I have a question. "What shall we call this trunk?" Nina smiles a wicked smile. "How about the torture chamber? It's where we put the SmartHome stuff to the test." There is a murmur of approval, and much nodding. Nina looks satisfied. She goes to her laptop, opens up Inkscape, and quickly makes a drawing with the words "SmartHome Torture Chamber" laid out nicely and using a the Comic Sans font. She punches a key combination, and the printer in a corner of the lab spits out a few sheets. Nina gets the sheets, which turn out to be A4 size labels, with the Inkscape design now printed on them. She peels off the labels and attaches them to four sides and the top of the trunk. "OK then, there's documentation in the internal wiki, and if your question's not answered by that, ask on IRC, though I'll be at home sleeping for the next 24 hours or so. Now, who'd like to carry this to the server cabinet?" We have a few servers we run in the office. Cloud computing is all very well, but it requires good Internet connectivity to use it for development, and when we need to work from customer premises, that doesn't always exist. We keep the servers in a small room that may have been a child's or servant's bedroom in prehistoric times. Andy and Bert, our two strongest members with the least back problems, carry the SmartHome trunk there. They place it next to our development infrastructure trunk, and connect power and Ethernet. The development infrastructure trunk is outwardly similar to the SmartHome one that Nina has built, but the contents are quite different. The rack contains several 1U servers, on which we can run quite computationally intensive tasks, such as compilation, automated tests, and continuous integration. There's also plenty of storage. We have a git server in there, plus space for backups of each of our work laptops. This is important so that if we're stuck on a client site with bad connectivity, we can have everything we need locally in our trunk. There's even local copies of Wikipedia, Stack Overflow, and the Debian package archive. As much as possible, anything we may need while at the customer site, we try to have a local copy of. The trunk also contains a 4G modem, plus a router, so that we can, if necessary, use that for Internet access. When we do go to work on-site at a customer, we bring the development infrastructure trunk with us, take over a meeting room, and set it up there. It needs power, plus optionally an Ethernet connection, and we're ready to start work. The trunks were originally Nina's idea. Before that, we tried to have much of the same functionality and data on laptops, plus USB drives, but it was always quite cumbersome. The trunks work much better, especially after the first couple of iterations of the design. -------------------------------------------- After the demo, when Nina has gotten the new trunk installed and connected it up in the server room, I quietly ask her to step into my office. "Good work with the torture chamber, Nina. I guess you worked around the clock for two days, is that right?" "Yeah, Anna, that's right. I went a little overboard. But don't worry, I'm going to go home and rest and recover next." "Good, that's what I want to hear. While we don't track work hours here, we don't ever want to see someone burn out. Me and Robin have both done that at least a couple of times each, and we won't let it happen to anyone in the Team." "Understood." "So I don't want to see you working at all before Monday, OK?" "Yeah. I'm going home, I'll have some food, and sleep and binge on the new season of Agent Carter. See you on Monday!" Nina gets up and walks to the door. "Wait! What did you think of the young man from SmartHome, Nick?" Nina turns around. "He's OK, I guess. A bit clumsy, maybe a bit inexperienced, but at least he seems to not have a big ego that ruins everything. I can work with him again." I'm surprised. That's the most positive appraisal I've ever heard Nina give of someone outside the Team. "Good to hear. Bye now." ------------------------------------------------------- Next day in the afternoon I walk to Andy's and Bert's room. "Hi guys, how is it going?" Andy looks up and takes his hands off the keyboard. "All good now. We've gotten the torture chamber to build and install a kernel from our own git repository to a test board, and run some tests against that board. All going well, now we just need to finish adding the rest of the board support, missing drivers, etc." "So it's plain sailing now?" "Yep, until we hit the first unanticipated and unforeseeable snag. You know, the submerged trap that universe always likes to throw at us." "Yeah, those. Can't help them, just have to allow for some of them in the schedule." "If we don't hit on too many snags, I'm sure we'll have a working kernel end of next week, and after that we'll start porting our platform to the SmartHome board." "Excellent. Tell me at once if you hit a snag, OK?" "Will do." Andy turns back to his laptop, and lifts his hands on the keyboard, even though he doesn't start to type yet. I know what he's doing. I interrupted his concentration when I came in and interrupted the two, and now they need to get back all the details of what they were working into their short-term memory. "Enter the flow" or "go into hack mode" as we call it. Technically, I should've asked, on IRC, Andy and Bert to come visit my office, when they're next taking a break from concentration anyway. I did wrong. I go out, closing the door quietly behind me. I go to the kitchen and put in a five euro note into the jar marked "unwarranted hack mode interruptions". It's a large glass jar, almost half-full with five euro notes. When it's full, we'll take out the money and have an office party. ------------------------------------------------------- When I get back to my own desk, and check my email inbox, there's a mail from Sam. He's used the subject line "Is RPM a possibility?" and he wants to know if we could support RPM packaging for their code, instead of Debian packaging. He says their guys are familiar and comfortable with RPM and say it is more secure, because packages can be digitally signed, unlike packages in the Debian format. This is a snag. This is the client having ideas of things beyond their understanding. It usually happens in every project. While they do not mean ill, the end result is still that if we accommodate them, it's not just shooting our collective foot with a shotgun, it's surgically amputating both feet, while running, and putting in prosthesis made out of dynamite, with the fuses lit. The problem isn't that the client has ideas and opinions and requests and suggestions. The problem is that the client doesn't know what they're talking about, and doesn't even suspect that they don't know. This particular type of snag needs to be stopped early and thoroughly. It will need to be handled with careful diplomacy so that they walk away from the confrontation feeling good about themselves. It'd be easy to just show how utterly wrong they are and drag their self-esteem through a pile of dung and dance a fandango on their ego with high heels until they weep, but that would just make it harder to finish the project together. Every client project needs the client involved and eager to help if it is to succeed. Also, they need to think they have all the control, even if they can't be allowed to have any control. A project actually controlled by the client is doomed. They should have a little influence, but their control should be limited to a fairly loose setting of scope and constraint. I'm going to have to deal with this, but it's getting late, and I'm tired. Diplomacy requires a lot of energy and time. I send a quick reply to Sam, so he doesn't worry if my response takes a while, but I don't say anything except that I'll respond properly tomorrow. I tell everyone I'm leaving for the day on the company IRC channel, shut down my laptop, tidy up my desk, and go home. I too want to see the new season of Agent Carter. Maybe with some take-out food, curled up under a blanket on my couch, with my cat purring in my lap, or on my shoulder.