Posted by Matthew Bloch
Sat, 30 Aug 2008 07:52:00 GMT
The cliché goes that you can develop software quickly, cheaply and properly - but you can only pick two. My problem to date as joint MD, co-owner and software architect is that I want our customers to love us, to leave our profits intact, and also to make perfectly-designed software with abstractions in all the right places. So we’ve done a lot of software properly and cheaply (because I’ve done about 30-50% of it myself, and supervised the rest), but boy has it been slow. The code that runs bits of Bytemark is often the kind I’m not proud of, that staff don’t like very much, and that the customers (thankfully) don’t see. I find user interfaces stressful to get right. And by and large, I refuse to buy software that we could (eventually) develop ourselves because I like to keep our business independent, and proprietary software compromises that. So all of this had conspired to make software development at Bytemark a stately affair.
But I’m starting to look up this year because we’ve started to deploy little components that have been in a state of undress for the last few years; they swirl around our laptops being improved bit by bit while we get on with our day, finally to emerge months later doing something useful. So you can now use our control panel to renew domains which relies on our open-source OpenSRS interface library, probably the simplest possible interface to register domains.
Another recent release sprung from years of telling our customers how to set up their servers in very very similar ways: bytemark-vhost is a straitjacket for your Debian GNU/Linux server which turns it into a flexible and easy-to-use hosting environment. You simply configure it by creating directories and files, and there is integration with our DNS service so that domains "just work". You don’t even need to use the shell; once installed you can administer the system fully through secure FTP. Thanks to Pat and Steve, this went from concept to production in about three months earlier this year, and is still being improved with customers’ feedback.
Finally back in January I started a new script for our phone system. It matches up inbound callers to the staff that they’ve been dealing with, tells you when staff are on holiday, when they’ll be back, who can deal with your call instead, and so on. We recorded a couple of hundred voice prompts for it in a studio with my voice artiste sister. But it had stalled on the small detail of needing a completely custom calendar package writing, because it needed to know who was on holiday, and we had never been very organised about that. I like to think these things ought to be simple with the right talent and time, even if I can’t quite do it yet, so it sat on the shelf for a few months waiting. Nick wrote that calendar program in about 4 weeks, and we’re using it now, so next-but-one on my list will be to get this phone system deployed so our customers get laser-guided, prompt-free phone service, and our staff don’t hear a ring unless it’s (almost) certainly for them.
It will be a while before we do big launches, because I prefer this bubbling-to-the-top approach to quality software development, and our business model can (thankfully) support this. But we are approaching a critical mass of developers in the company now, and the bubbles are starting to move fast enough for some more interesting plans 
no comments
Posted by Matthew Bloch
Sat, 16 Aug 2008 20:41:00 GMT
After investing more money in a core routing infrastructure than I paid for my flat, we thought it was quite important that, if the equipment went wrong, we could lean on our vendor to help us with immediate delivery of spare parts, 24/7 technical support and all the other stuff that goes with a proprietary piece of kit that is business-critical. Cisco do this kind of service, it’s called SMARTnet, and you renew the contract annually for a small % of your equipment cost.
Now the contract on one of our £20k core routers got renewed a couple of months back, but our dealer with whom we renewed the contract (who shall remain nameless) decided that we didn’t need SMARTnet direct from Cisco, but we would do just as well with a cheaper alternative contract called Shared Support, a contract where you lean mostly on your dealer for assistance. They act as a middleman to Cisco and raise tech support cases on your behalf. My cynical side suspects they make more of a margin on it. Thanks but no thanks guys, our core routers are the four beating hearts of our network. If they need surgery, we don’t want a single junior doctor, we want Cisco’s crack surgeons on the case.
So we said please give us the SMARTnet contracts that we paid for. And the dealer said, well shared support is practically the same, we can help you out with any problems! We said no really, you quoted us for SMARTnet and then gave us something else, stop messing us about and give us the contract we paid for. They said please, look, we’ve already paid for the Shared Support contract and can’t get our money back, please go with the Shared Support. And we said, that’s not our problem - how about giving us a refund instead, and we’ll buy from someone else next time? They went away, they fixed their mistake, eventually, three weeks after our router had started crashing, and one week after the old contract was up.
Here was the point where we were expecting Cisco to blow us off - our dealer had ordered us the wrong contract and was wasting our time trying to persuade us to keep it. One of our core routers was crashing every week and it left us exposed. (Of course!) we have a second router for backup on each site, but running without two, and worrying about crashes makes for a lot of wide-eyed ceiling staring at night. Tentatively Pete asked to raise a tech support case with Cisco, without a valid contract, explaining the situation, and they said… Sure, so what’s the problem?
Within a couple of days they had escalated the case to their BGP experts - we’d found a new bug - and within a couple of days, they had suggested a workaround which stopped the router from crashing any more. We (heart) Cisco for because they bypassed their big company bureaucracy to get our little company network back on its feet, and we knew that our bug got the attention it needed to get fixed in the next software release.
While I was writing this I remembered a case a few years ago when we weren’t even an even smaller firm, we had spent a few thousand pounds on a Cisco supervisor card off eBay - a colossal amount of money back then. Cisco’s policy is (still) that if you buy second-hand gear, you don’t even have the right to use it without ‘relicensing’ at a price that was usually 70-100% of the original purchase cost. We’d configured this card in such a way that it had fallen foul of a documented, obscure, hardware bug. It was causing us problems. But we asked Cisco about it; since they had acknowledged it was a faulty card, could we (pretty) please send it back for repair? And they said… sure, though we don’t have any of the old ones left, so we’ve sent you this brand new, faster upgraded one, is that OK? I think back then we had only been a Cisco ‘customer’ through second hand goods, so they’d not seen a penny from us (directly). Blown away.
When we’ve had to make big purchasing decisions about networking kit, we decided they had very little in the way of technical competition, so that kind of corner-shop, take-the-next-one-off-the-shelf repair service is even more impressive. We’ll remember to stay as nice to all our customers when we’re Cisco’s size :)
no comments
Posted by Matthew Bloch
Thu, 07 Aug 2008 00:17:00 GMT
I’ve had a lot of reasons not to launch our new control panel over the last 6-8 months that I’ve been working on it: not good enough yet, useless contractors, distracted by marketing, overambitious design that I just had to get right however many months it took, and so on… today I got tantalisingly close but came up with a new reason: water coming through the walls! After 20 minutes of monsoon in central York this afternoon, about six feet of carpet became… squelchy. We’ve shuffled our desks over to one side of the office, huddled together closer than usual while our landlord’s minions start to fix it for us. Nice to find out today that this had happened before in our office, and the site owners continued to hope for good weather rather than making their shonky building watertight :) My only real worry was for the server building, but we have aircon & dehumidifiers working overtime, plus there is a lot of soggy carpet dumped on the front step ripped up and dumped on the front step.
Since it really is quite close now, our new control panel will adds one simple, but hard-to-get-right feature: domains. Registering, renewing, editing, automatically, with automatic billing. We’ve been handling domain requests manually pretty much since day one, but they’re probably the largest number of support tickets we handle, and they really needed some automation. First we needed an accounts system that didn’t suck, followed by a lot of web services glue in the middle, a Ruby library to talk to OpenSRS, some guesstimated matching of domains to accounts, and finally a control panel that didn’t actually punish its users for making a mistake in a form. A lot of bootstrapping has gone on in the last 9 months in terms of rewrites of group development practices; while it’s been slow to deliver, I’m starting to get a warm glow about it all again.
I’ll make a fuller post once the panel is (re) launched, and will also spill the beans on some more of our hand-built systems that are dangerously close to being useeful.
no comments