Food Rolodex

I should have listened to my gut and my brain. On hindsight there were so many obvious signs that it’s a bad idea and a bad business relationship. But my heart wanted to really make it work.

My heart can go take a bench break.

So back in October 2013, my soon-to-be Troublesome Business Partner (TBP) convinced me and the soon-to-be Amiable Business Partner (ABP) of forming a company. The business: to have an app where people can browse food items of an eatery place, be it a cafe or restaurant or anything in between.

My instincts and gut feeling told me that was a bad idea. My brain figured out that there’s no real business. The app users must be able to use the service for free. For that kind of service, fremium would drive people away unless there’s something compelling. During the late quarter of 2013, there were already food related services (FoodPanda was one of them I think. We’ll get to that in a future post). That idea alone was not enough of a business model.

Social media was so rampant that just being able to browse food items of an eatery place was laughably ignorable.

Profit would have to come from the eateries themselves, cafes and restaurants and whatnot paying us money to list their business in our app. Or from advertisements and sponsors. As a newcomer in the arena, I did not see how we could compete since we had no competitive advantage.

But ABP agreed to TBP’s idea, and I was blinded by the fact that I found people willing to do business together with me.

Lesson: Do not let your heart run your business decisions. Your heart can take a bench break.

Despite what my gut instincts and brain were telling me, I chose to try to make it work. My two business partners (we formed a company soon after), TBP and ABP have… shall we say qualifications that added some letters before and after their names. Who was I to judge?

I confirmed with TBP if TBP had any further ideas, such as monetisation or marketing the app or getting initial customers or … anything at all. TBP had no further ideas beyond the original idea.

My gut shot that red flag to my brain so quickly I nearly choked but my heart brushed it aside just as quickly. (I was really lonesome for like-minded people)

Alright, I’m going to try to describe the app as best as I can and you can judge it on its own merit. I named it FoodSkim. My two business partners were next to worthless when it came to naming, and I had to do something (I was the CEO after all).

So you would go to your favourite cafe Mooncoin, fire up the FoodSkim app, select Mooncoin as the eatery, select your favourite beverage CinnaSoyLattecino Triple Shot with the signature Coin Cake, and then send it off as an order.

FoodSkim would send your order to Mooncoin’s corresponding FoodSkim server on Mooncoin’s computer for processing (probably in the kitchen or something). Mooncoin would still need you to pay at their cashier counter, but you know, that’s just a minor inconvenience compared to Oh Em Gee you can rate the food item and share your opinions on the food/eatery on your favourite social media sites!

It must have been a superbly brilliant idea because I couldn’t get TBP and ABP to see the practicality of convincing businesses to do business with us based on that.

How were we to convince them of setting up our FoodSkim server program on their computer? Do they even have a computer? “If they don’t, we provide them with a (cheap) computer.” I’m flabbergasted.

How were we to interface with their Point-Of-Sales (POS) system? Can we interface with their POS? Should we interface at all? Would they allow us to interface? How difficult would it be to interface? (Because no interface means the customer, that’s you, would still have to go queue up and pay at the cashier, which defeats the purpose of choosing food items at your leisure)

TBP also suggested we allow FoodSkim users to preorder food before they’re at the eatery.

How could the eatery trust that the customer would show up, because they have to prepare the food (no payment yet, remember)?

“Oh we put GPS location lock on the customer and the eatery location.”

That meant we had to enter the eatery GPS location into our database. What if they move (they’d have to inform us, and why would they think it’s important to inform us?)? Data maintenance would be a problem.

Despite me bringing up those questions of practicality, I was brushed aside. Ok, how about the initial set of businesses? Neither TBP nor ABP did anything to get eateries to list their businesses with us.

I actually went out to a few eateries to talk with the owners. I asked them if they’d be interested to be listed. I gave them my name card. No one contacted me. I wasn’t surprised, but I did the leg work. I tried to make it work and give it my best effort just in case it did.

Finally, I couldn’t take it anymore. It was almost two years after the company was formed. TBP was nowhere to be seen nor heard from. TBP just disappeared without telling me. ABP told me that both of them were still in contact, and ABP told me TBP was afraid of me.

Really? I wonder why.

Coward.

I wound up development on FoodSkim. At that point, I was forking out my own money to keep the company and the FoodSkim project going. TBP and ABP didn’t offer any money at all to help.

I could no longer tell myself my company and FoodSkim were going to work.

I told ABP of my decision and ABP was ok with closing the company. Then I went through a long process of terminating the funding agreement with the venture capitalist organisation. Even the liaison from the venture capitalist organisation disappeared and didn’t help me or give me advice.

The termination took a few months to finally get settled. Then I went through the long process of closing my company.

During that entire period of time, I kept telling myself that, in five or ten years time, Future Vincent would look back on the memory of this period and laugh. Because Present Vincent was in a lot of emotional pain and stress. Without any self-motivation and self-talk, Present Vincent would have had a nervous breakdown.

I still look at that period of time as a learning experience. I still feel bittersweet when I think of the times when I did payroll. The sense of responsibility of taking care of the company bank account. Swallowing my pride when talking to potential customers. Putting up a face of calm when presenting to the VC.

I’m also more cynical of people now, and hopefully a better judge of character.

I paid a hefty price for that experience, in terms of money, of sweat and tears, of lost opportunities, of loss of time.

It took me 3 years to recover to the point where I’m able to talk to you about it. I hope you learnt something from my experience, and that you have a better time than me.

Closing my company was painful

I never thought closing my company would be such a relief.

Three years ago, about this time of the year, I was preparing the final documents for the very last Annual General Meeting for my company. I was doing so as both the (sole) company director and the CEO. Before that, I had already sent the accountant all the payment receipts, invoices, the company cheque book and other finance related documents for review and to generate the financial statements (to be presented to the stakeholders during the AGM).

The only agenda of the AGM was to accept or reject the closing of the company.

On the fateful day of the AGM, I waited in the appointed room for the other two stakeholders. They were business partners only in name, but legally speaking they were considered stockholders.

There was one particular business partner that I hoped fervently did not appear for the AGM.

When the other business partner arrived, I breathed a small sigh of relief. I needed *this* business partner to appear and that the other business partner to *not* appear.

If at this point you’re thinking that I’m doing some sort of subterfuge, you’re right. I hated to have to do it, but it was necessary because that other business partner had been giving me trouble to no end.

Legally speaking, I needed a majority from the stockholders to approve of the closing of the company before I can proceed to close it. You’d think I have the majority of the stocks but you’d be wrong. I was fairly sure I could convince the amiable business partner to agree, since we’ve already decided beforehand that it was best for the both of us and for the company.

I told my secretary the amiable business partner had arrived. That business partner, my secretary and I waited in the room. 15 minutes passed the appointed time. Half an hour passed the appointed time. I called for the AGM to proceed without all the stockholders present.

I presented to the amiable business partner the financial statements of the company. The partner reviewed the documents, and asked me and my secretary questions, including why the other business partner wasn’t present.

I’m not going to tell you how I managed to get the other business partner to not appear. It’s still painful (even after 3 years) and I hope I never have to do something like that ever again. Well maybe in a future post, I’ll talk about it…

In any case, the amiable business partner agreed to the closing of the company. I closed off the AGM and thanked the business partner for coming. I discussed with my secretary the final document preparation of the closing of the company. Then I left the office.

I don’t remember what I did after that, but I *do* remember the immense weight that was lifted off my shoulders. I might have stood still and shivered. I might have cried a little.

Because it was the first time in a long time that I felt… free.

Don’t get me wrong, I don’t regret running the company. I had to work with the venture capitalist organisation that funded the company project. I had to make payroll (it was sobering to see how much money was draining from the company bank account every month). I learnt to do company taxes and all sorts of company admin work (that only I as the CEO/director could do).

I was also doing consultancy work and running my own private business at the same time. Because I didn’t get paid anything for being the CEO nor being the company director. I was doing the equivalent of three jobs. I had trouble sleeping. I had to sometimes consciously remind myself to breathe because my breaths were so shallow. And my blood boiled every time I thought of that troublesome business partner.

It was not a good way to live.

Next time, I’ll tell you of the heart attack I almost got when the bank closed the company bank account with a final figure that did not tally with that from my accountant.

How to found a company

Just do it.

But jokes aside, the bigger question is not how. It’s why.

[Disclaimer: any information you read here pertains to Singapore laws and regulations. Your country’s laws and regulations might differ.]

I have people emailing me “Wow Vincent, you’re running your own business! That’s totally awesome. I wish I could do something like you did.”

Or “I don’t really have a product to sell.”

Or “I have this small thing that I’m working on, but it’s too early to tell.”

Or “I have a family to take care of.”

Or “I’m scared.”

All perfectly valid reasons. And at some point in time, all of them were applicable to me. And I’m still working for myself now.

Now for the big news. I founded a company! Yay! (ok I co-founded a company, but the circumstantial details are more complex than I’d like it to be. I might talk about it in an email. Sign up on the right side bar [or wherever it might be in case the position is changed]).

So about the how thing. It’s not hard. It’s just frustratingly tedious. Mostly because I don’t know what forms to fill in, in what sequence, and “Is there anything else I need to do because I don’t wanna get sued and go to jail!”.

Also, because I’ve never done it before. Most people will feel scared if they’re doing something they’ve never done before. So they find it frustrating and tedious and moan and groan and go drink a bottle of whiskey and go to bed.

You go to ACRA, come up with a company name, decide on the shares allocated to each share holder (probably decide beforehand and not on the spot), put in share holder details, company official member details, pay ACRA for the registration and you’re done!

There’s also quite a bit of legalese and fine print. Since I don’t want to get sued and go to jail, I read them. You might want to go on the wild side and just skip them. To each his own.

So it’s not so much the how. Find a strong enough reason for why, and you’ll just do it.

By the way, I founded a company! The company name is One North Soft. I have a secret project in the works. Tell you more in future.

Financial reports must be untouched by human hands

People handling billing or financial data are usually very uptight. Especially when it comes to numbers. If you thought mathematicians, statisticians or economists were protective of their numerical figures, go talk to someone who works in the financial department.

PI is an elegant number. It goes to about 3.14159265, and describes the ratio of the circumference of a circle to its diameter. It doesn’t mean much to a finance person though.

But the bits have mercy if their report shows that there’s a $3.14 missing.

Sometimes, in the course of my work, I get requests to dump data from the database. Well, more like generating ad-hoc reports based on whatever was needed. Excel seems to be the preferred output format, since it displays all the data in nice little columns and rows. And let’s face it, the user is probably more skilled in Excel macros and functions than you and I are. Let them do their little calculations and predictions and pie charts, I say.

But noooo… Finance people will have none of that.

“I cannot manipulate data.” was the usual answer.

Wait, when I churned out those data, wasn’t I manipulating data, of sorts? I was doing SUMs, GROUP BYs and ORDER BYs with the database queries. If the user wanted a sum over that particular column, and I didn’t provide it, just use the inbuilt Excel sum function.

“Oh no, I cannot manipulate data.”

Apparently, whatever financial reports must be completely generated by the computer. All financial reports must be untouched by human hands. Let’s hope you got that algorithm right. Wait, aren’t you human? Would that mean the reports went through human hands?

If not using the database, please disconnect

I’m maintaining some Windows programs created by the PowerBuilder software. The original developer didn’t plan for the programs to be used by many people. So the instant one of the programs was run, a database connection to the Sybase database was opened. And left there.

As more programs were created in this manner (and added to the suite of programs my team is in charge of), the number of total users also increased. Since the connections were held in place, table locks between users became a real problem, because a user could be done with an operation, but still hold onto the table. This also meant the database became clogged up with connections, usually non-active.

The better solution is to open the connection when you’re going to do any database operation, and then close it once you’re done. But the original programs were developed like eons ago. If I understand it correctly, client programs back then assumed they had total control over the database. Contrast that with the web applications of today, and let me just say that, I have my work cut out for me…

I decided to write something on this after reading Raymond’s article on cookie licking. So if you’re not using any database functions, please disconnect.

FAHTR aka Free And Happen To Remember

The following completely fake conversation was inspired by an actual conversation with an internal company user.

User: The web application doesn’t let me do XYZ. I can’t download ABC data for customer PQR.
Me: Well, your customer database don’t have JKL. The code changes will take some time.

User: So how long will it take?
Me: It’s not urgent, right?

User: Well…
Me: Then I’ll do it on a FAHTR basis.

User: What father?
Me: FAHTR. It means I’ll do it when I’m free and I happen to remember to do it.

Satellite and maritime data calls

Let’s talk maritime communication data. That’s what my users work hip-deep in.

“Wait! Didn’t you say you’re in the satellite business the last time?”

Oh yeah… so, to me (and my users), they’re effectively the same thing. You see, out at sea (ooh, alliteration), captains and sailors still need to talk with their loved ones back on terra firma. And surf the Internet (for you know, uh stuff…). And send (short message service) SMSs to their friends (and sweet phone messages to lovers). And report back to headquarters of course.

[actually they probably don’t frivolously send love notes. Because their company is paying for it, and paying close attention to their usage. See below…]

They do that by using a device, which sends data up to space to one of the supporting satellites (not our moon, one of those man-made ones), which then sends it back to Earth to be received by a satellite dish, which then relays that data out the normal way. Here’s a simple diagram to show how it works:

Basic land-sea data transfer via satellite

I totally suck at drawing diagrams…

The ships are equipped with a terminal (no it’s not installed at the fore of the ship like in the diagram. It’s probably in the command centre or communication centre or… you know, I have no idea where they install it…), which contains one (possibly more) subscriber identity module card or SIM card. These SIM cards aren’t the kind we use in our mobile phones though.

And each SIM card has one, possibly more, mobile numbers. And each mobile number is tied to a specific service, such as voice call, or SMS, or fax. These mobile numbers are used to track usage. What do I mean by that?

For the purposes of our discussion, the word “call” refers to any initiated communication. So an SMS is a call. Browsing to a particular website is a call. Faxing a piece of paper is a call.

And each call comes with associated data, and the entire thing is referred to as a call detail record, or CDR (or call record in short). There’s a lot of data in one call, so I’m going to tell you about the ones my users and customers care most about (because they track usage religiously. I know, because I wrote the web application for it.) You may encounter other similar terms.

  • Calling number – the mobile number making the call
  • Called number – the name’s a bit misleading. It can actually be an IP address or URL, other than a receiver’s mobile number or fax number. It’s also known as destination number.
  • Unit type – “messages” for SMS, bits/bytes/KB/MB (and other variants) for IP data, sec/min for voice data
  • Call duration – a value corresponding to the related unit type, such as 2.13 MB or 27 seconds
  • Call start date/time – when the call was made

The calling number is the unique identifier. The main thing it identifies is the company to whom the billed is sent (very important, this billing thing). The calling (mobile) number is tied to a billing account in the billing system.

The call duration is especially important, because the customer is billed accordingly. This is why I’m adamant about the use of fixed point database types such as numeric(12,4). The floating point errors will scale out of hand otherwise (millions of these call records are created every month). Which will cause the total billed amount to the customers to be out of hand. Money is a very serious topic… Do not underestimate the power of 2 numbers not tallying by a difference of 2 cents in the billing report…

That’s the basics of satellite data. Oh right, the terminals…

There’s this service called Broadband Global Area Network, or BGAN for short (pronounced bee-gan), and I even presented at a product launch hosted by my employer. The BGAN service is provided by Inmarsat, a satellite telecommunications company, and they provide me with most of the data I work with. And they (and their data servers) are based in London. Which is why I obsess over timezones and formatting dates and times.

So (customer) companies buy these BGAN terminals and install them on their ships. And the captains and crew members get to communicate with people on land, and even with other ships. All made possible by routing data through the satellites.

And my users sell these terminals, associated paraphernalia (such as the SIM cards), and data usage (where price plans come in). Inmarsat deals with telecommunications companies (like my employer), and the telecommunications companies take care of the customers.

There are other types of terminals of course. Which means different services, and different types of data. Which gives my team many headaches. Because my users will be telling the customers “We support this!”, and turn to my team to actually support the new data, new price plans, new billing calculations, new entries in bills, new everything. There are now more than 10 sources of call records which we handle every day…

I believe that’s enough information for now. Any questions?

Are corporate programmers also polymath programmers?

I’ve been writing for more than 2 years now, and I realised that I never told you much about my professional job. Let’s start with a brief summary of how I started…

Beginning of professional career

I started working a few months after I graduated in 2002. I had a science degree in applied mathematics and computational science, but that didn’t stop me from applying for the software engineer, software developer, application programmer, systems analyst and other confusing variants of the job title. I like programming.

Once, I worked in a startup company, writing software to deal with patents. One of the requirements was “must know regular expressions”, used for searching through the patent text, so I put my mind to learning it. I got the job. The funny thing was, the CEO handed that part of the coding to an intern. Oh wait, a PhD intern. Maybe I wasn’t qualified to touch regex…

Somewhere in that career history of mine was a software development house. The team I was in, was assigned to develop an enterprise product for a Japanese company. It’s an internal website, and handled work flow processes, task assignment and other enterprisey functions.

Half the time, I was helping to complete some sections of a business class. A third of the time, I was doing the testing, because I seem to be the only (expendable) one with more than coding skills. Because I had experience talking with users, coming up with specifications, database design, setting test environments and oh yeah, coding.

They even offered me a role in translation, after they heard I knew Japanese. Correction I told them, I knew a little teensy bit of Japanese. They had an overflow of programmers I guess… (it was a team of 10 programmers. Or was it 12?).

In the present

Currently I’m working in a telecommunications company in Singapore. Actually, I started my first job in the same company too. After the first few years, I joined the startup. Then left and joined the software house. Then left, and rejoined my current company, but in a different team (still in the billing support department though).

The interesting thing is that I’m dealing mostly with satellite data, not mobile phone data (one of the core business of telecommunications companies). And my users are like a complete company, albeit on a small scale.

They have their own departments on customer service, marketing, sales, and to a certain extent, their own IT team. And that IT team is composed of 3 people. And I’m one of them. I have a supervisor and a colleague who handles the backend programs (mostly C and C++ on Unix).

Me? I’m the frontend guy, and the everything-else guy.

Because of the unique service (compared with the rest of the company) dealing with satellite data, my team is involved with everything from the call records of the customers, to the configuration of their price plans, to billing the customers, to settling profit with the satellite providers. The satellite business is quite interesting, and I’ll tell you more in a future article.

The other team mates focus on collection of the raw file containing the call records, processing them, calculations of the bills and other backend stuff. I handle all the stuff that users will see and interact with, like Windows applications and web applications. And I manage the Windows servers the web applications are running on. And there’s the updating of the SSL certificates for the web applications. Once I was at the data centre during a power maintenance, because someone needed to be there to flip the on-off switch of the servers and check on the equipment.

My work is seen by a lot of people, which includes the customers, the sales staff, the marketing staff, the product managers, the administrative staff and the customer service officers. This means I get a lot of queries.

If a number doesn’t tally with the total, someone sends me an email.
If the font size is too small, someone sends me an email.
If the Excel download fails, someone calls me.
If the data cannot be found, someone calls me.
If they can’t open an FDF file, they call me.
If the offshore Chinese colleague have questions on business logic or web design or code design, he/she calls/emails me.

If [something happens], someone [calls/emails] me.

In short, I get interrupted a lot. Nice private offices? Not a chance.

And I still have to write code so the projects actually ship before deadlines.

There was once where I had 1 month to come up with a new website for the customers to view their call records (brand new .NET web application, new user interface, completely new database schema). That was a December (the sales people had to move fast to get that contract before the start of the next year, which meant I had to work fast). And another colleague from another team was reassigned, and his work was handed to me (basically I was covering for 2 teams). And I received calls and queries from the users of both teams.

And the new website was out in the world on time. *whew*

Do programmers who work in a corporate environment go through similar experiences? Do they handle many non-programming related work? Are corporate programmers also polymath programmers?

I’m stumped, since I probably have this naive notion of programmers just programming (to a large extent). My friend once asked me what I do at work. I didn’t know how to answer, so I rattled off a few tasks mentioned above, and he’s surprised I do so many different tasks. Particularly when I sometimes have email correspondence directly with customers, which I try to avoid for business reasons. The sales and customer service teams are supposed to be the frontline, not me.

Helping corporate programmers on time management

This brings me to a personal project. I’m creating a product about time management for corporate programmers, working title “Time management for corporate programmers – Handling interruptions, removing distractions and getting the Flow”. Or some such.

All the writings and articles on this site will continue to be free. I’m writing an ebook to help fellow corporate programmers (maybe even programmers in general) with what I know. And this endeavor might just be able to support this site. The articles are fun to write, and I love the brilliant comments by you (even the ones that tell me I’m wrong. Those are awesome).

Actually “time management” is too specific. I’ll be writing on discipline, control and health. There will be some quick tips on data migrations and doing your miscellaneous tasks with free tools (because you know, companies are always cutting the budget). My notes actually look like a jumbled mess, but maybe that’s the nature of polymaths… or just me.

So do you have any questions about time management in a corporate setting? Or even time management in general? What are the typical tasks you do? How can I help you do your job, the tasks you really want to do (it’s coding and shipping software, right?), better?

*whispers* Psst, it’s ok if you’re a student/coder. I was a student/coder once. Just ask.

Let me know in a comment, or if you’re shy, use my contact form to email me privately. You can also talk with me on Twitter (@orcasquall).

I’m really excited about this project.

Certifications, standards or just codswallop?

Recently, I attended a 1 day course on Information Technology Infrastructure Library or ITIL. It’s just an awareness course, so I only learned what it is, what it’s used for, why it should be used and so on. Basically ITIL is a set of best practices for doing IT work.

Truth be told, I didn’t want to attend the course. Due to management targets and budget considerations, I was “strongly encouraged” to attend the course (it is the end of the financial year…). Ah well, so I did. Man, did I have to rearrange my coding deadlines… One never knows how much 1 day of coding means, till one loses that 1 day…

Anyway, I learnt what ITIL is, and what the associated ISO 20000 is too. ITIL, as my instructor mentioned, is “documented common sense“. Also, an organisation (or process) can’t be certified in ITIL, as there might be some recommendations that conflict with each other within your business scope. An individual can be ITIL certified though.

Businesses can be ISO 20000 certified. The process of certification, as I understand it, is tedious. You need documentation of processes, and you need proof that you’ve been following the standards and your own documentation. And the first thought that came to my mind was Evidence Based Scheduling and FogBugz. I talked with the instructor and he agreed that, having a system that’s part of the workflow, and that it captures proof as it goes, is the best solution. And you need at least 3 months worth of proof.

I can see 2 benefits to certification. Boost in credibility (people trust companies with certifications?) and actual improvements in financial bottom lines (whether it’s cost savings or profit).

Frankly speaking, I don’t know why I’m attending the course. That I’ll push for a more structured IT environment back at work, following ITIL recommendations? That I can be part of the certification process team? I’m a messy person. What do they think I can do?

Ok, the course wasn’t a complete loss for me. At least I learnt about the certification process. Still, I keep wondering, could the entire thing be condensed into the Joel Test?

At the team I’m working at, we’d maybe pass 3 out of the 12 points on the check list. If we can’t pass that, we can’t pass ITIL, and we certainly can’t pass ISO 20000. I’m just saying…

[Vincent is currently preparing to go to the land of the rising sun, and hopefully see sakura blossoms. Comments and responses will be slower. I’ll be taking over for a while, and remember, I’m just a blog.]