Sometimes, the Architect wins
Jul. 2nd, 2008 06:27 pm![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Continuing on from the previous thought...
It really is rather strange, being a nearly one-man shop. In particular, being *both* the CEO/Product Manager and the Architect/programmer requires a strange sort of schizophrenia to do well, because of the enormous tensions between those roles. The Product Manager wants "now", and the Architect wants "good". And the CFO (also in there for the time being) insists on "cheap". As any decent programmer knows, you don't get all three, at least at any given moment. So there are these loud arguments playing out in my head pretty much every day, which mostly show up as lost sleep.
I've been tending to let the Product Manager win for the moment, on the grounds that I need to figure out exactly *what* I'm building here before I spend a lot of time making the code beautiful. (Indeed, both sides engaged in a detente last week, agreeing that I need to stop worrying so much about scalability for a while. If I can get people going, "y'know, this is pretty cool", *then* I need to pause and figure out the fine details of how to scale it up correctly. But first I've gotta get the ideas straight.) So the Architect has spent a bunch of time steaming over the fact that there's a good deal of code here that I wouldn't be willing to show as a coding sample.
That said, there are reasons for the code-then-refactor discipline, and I just hit one: getting this thing really talking to *both* Facebook and Jabber requires a lot of code cleanup. This morning, the Architect put his foot down and declared that it's time to take a couple of days out for a massive refactor; the CEO is sulking, but agreed that, if it's the only way to get the features he wants, he'll live.
After the first day of refactoring, it's quite suddenly looking like something I'm willing to have on my resume again. The enormous and ornate CreateConversation() method that had been living up at the API tier has been shoved down into the system core, and all the cruft has been broken out into properly-decoupled listeners, each in the right basket. Having gotten the structural changes done through that, I expect to be able to clean up the rest of it tomorrow; after that, getting the rest of the initial Jabber functionality in should be easy.
It's not final yet, of course -- it's all still in-process, so there are still big changes to come when we do scale it up and make it internally cross-process and API-based. But the Architect part of my brain is feeling happy for the first time in weeks, so the CEO can suck it up for a while in the interest of peace in the company...
It really is rather strange, being a nearly one-man shop. In particular, being *both* the CEO/Product Manager and the Architect/programmer requires a strange sort of schizophrenia to do well, because of the enormous tensions between those roles. The Product Manager wants "now", and the Architect wants "good". And the CFO (also in there for the time being) insists on "cheap". As any decent programmer knows, you don't get all three, at least at any given moment. So there are these loud arguments playing out in my head pretty much every day, which mostly show up as lost sleep.
I've been tending to let the Product Manager win for the moment, on the grounds that I need to figure out exactly *what* I'm building here before I spend a lot of time making the code beautiful. (Indeed, both sides engaged in a detente last week, agreeing that I need to stop worrying so much about scalability for a while. If I can get people going, "y'know, this is pretty cool", *then* I need to pause and figure out the fine details of how to scale it up correctly. But first I've gotta get the ideas straight.) So the Architect has spent a bunch of time steaming over the fact that there's a good deal of code here that I wouldn't be willing to show as a coding sample.
That said, there are reasons for the code-then-refactor discipline, and I just hit one: getting this thing really talking to *both* Facebook and Jabber requires a lot of code cleanup. This morning, the Architect put his foot down and declared that it's time to take a couple of days out for a massive refactor; the CEO is sulking, but agreed that, if it's the only way to get the features he wants, he'll live.
After the first day of refactoring, it's quite suddenly looking like something I'm willing to have on my resume again. The enormous and ornate CreateConversation() method that had been living up at the API tier has been shoved down into the system core, and all the cruft has been broken out into properly-decoupled listeners, each in the right basket. Having gotten the structural changes done through that, I expect to be able to clean up the rest of it tomorrow; after that, getting the rest of the initial Jabber functionality in should be easy.
It's not final yet, of course -- it's all still in-process, so there are still big changes to come when we do scale it up and make it internally cross-process and API-based. But the Architect part of my brain is feeling happy for the first time in weeks, so the CEO can suck it up for a while in the interest of peace in the company...