Have everything written down in paper

At the beginning of a new project everyone is super energized, hopeful and ready to bleed for the end goal. Hopefully those days will never end but if they do, you have to be prepared and protected.

You have to do an explicitly targeted work to keep the relationship with your business partners healthy. You have to truly care about their wellbeing and you have to mean this. It has to come from the inside and you have to make time to talk about it regularly.

The above advice will keep you from ever having to recur to the legal papers I’m talking about here. The order is important. Invest in your relationships first so that you don’t have to fall back to the legal documents ever.

Having said that, every aspect of your business deal must have a paper counterpart. How much everyone owns, vesting periods, what happens if someone decides to leave, how to decide if someone is no longer a fit and what to do about it, how is decision power divided, how to fire a cofounder, how to handle dividends, how to decide if you want to sell the company, etc.

This post is not about creating a comprehensive list of the things you need to consider for the contract between you and your partner. It’s more about bringing to your attention that you need to protect yourself and everyone involved by having all rules of the game very clear from the very start.

Remember that creating a startup is already stressful. You don’t need yet another worry to your anxiety bucket if for any reason something unexpected, like a cofounder wanting to leave, happens.

Who to take startup advice from

Everyone has an opinion on everything and a reason to think they are right and that you are wrong. Ironically enough, this post can very well be one of them, but I’ll let you make that decision yourself ;-).

When I was going through Wayra, the startup accelerator Toky was part of in 2014, the advisors hired to help us were coming mostly from the corporate world. They all had relevant roles and academic titles proving on paper that they made the time to learn what they came to advise, but the disconnection between how they did things at their jobs and how things can be done in a tiny startup that is more dead than alive, didn’t seem to be evident to most of them.

I remember being forced to make a huge spreadsheet with user acquisition projections, how much we were going to make in sales, and how things would look like in 5 years. It made complete sense to them that we should be spending time on multi-year projections instead of on building a product and actually selling it.

On another occasion, I remember we were having meetings and attending law firms to meet Intellectual-Property lawyers who were helping us patent everything we built. The only problem was that we didn’t really have anything worthy of a patent at that time but they were following a timeline that I’m sure made sense on paper but in reality, was completely useless and a waste of time.

Why weren’t we meeting product people and working all the time on user acquisition? Why no one was noticing that we didn’t have an infinite runway and that we should be focusing on improving our metrics to look more appealing to potential investors so that we can survive another year? Why was all advice assuming we had a huge budget of millions to pay people to come to visit us and buy our product?

I’m sure everyone there had good intentions and really wanted to help. I met great people there and I know one of the reasons we still exist as a business is because they gave us the seed money we needed to take off. The last thing I want is to sound ungrateful.

My point is that you should listen to every piece of advice and opinion you can, but giving your maximum attention to the ones coming from people who had been in your shoes before or that are in a place where you would like to be in the future.

Like making charity with other people’s money, throwing startup tips from the comfort of a safe corporate salary, is just too easy to not do it. Always take them with a grain of salt.

Picking your startup idea

There’s plenty of advice out there about how to do it, but based on my own experience, it all comes down to two fundamental things: how much you love it and how are you going to make money with it.

The idea—the product you are going to build—is going to stay with you for years to come so you better feel passionate about it and be ready to think about it every day for years.

In my case, it felt natural to start a telecommunications startup because that’s what I have been doing for the past 6 years at that point. I liked it, I felt passionate about it and learning new things on the subject became like a hobby of mine.

Obsession is a strong adjective but it pretty much describes my feelings towards this industry and how much I like it.

Toky’s first office in 2014 was the kitchen in my apartment. We were enjoying ourselves just as much as we do it today—it never felt like work.

My point is that your likelihood of succeeding with your startup increases significantly if you are building on top of something you truly love, being in an industry you find interesting and when working on your product doesn’t feel like a burden. You have to love doing it.

Then, there’s the ability of your idea to generate money. You must think about this early on even if you are living with your parents today or have no responsibilities with other people like significant others for example.

Doing it for the money as motivator is debatable and I’m not saying that. What I am saying is that the discussion about how you are going to turn your time and expertise invested in your idea into tangible wealth must be addressed since the very beginning with yourself and with everyone else involved in the risks you are going to take.

The thrill of starting something new and those days of working tirelessly with an excitement expression on your face are going to, undoubtedly, dry out some day and when that day comes you will want to have the assurance you can pay your rent, health and food while you rest and recharge energies.

In the perfect world, your skills, your idea and the industry where your product is going to exist all intersect at a point where making a sustainable stream of income is possible.

When we started Toky we were completely ignorant of how to run a business and we barely talked about how the product was going to make money. It seems like I didn’t follow my own advice and you are absolutely right to think that.

What saved us was that we picked the right idea where our combined skills made it possible to actually build something useful inside an industry that was growing at an accelerating pace. We basically jumped on top of a wave that carried us with it and that ended up compensating for the many things we disregarded during our early days as a company.

It wasn’t luck how we chose the idea, product and the industry—that we did well because it was an informed decision—but it was definitely luck how the industry was growing so fast that admitted so many products to coexist without saturating the customers and allowing us to make money in the process.

So don’t be us and don’t rely on luck so much. Have the idea, product, industry and money conversation early and as often as necessary.

Repurposing this space: how I got where I am today

In July this year, my blogging career will turn 10 years. I still remember how excited I was when I wrote my first post and when I decided to “turn pro” by purchasing this domain 😂.

Looking back you can see things in perspective people say, and I can clearly see now how life changing that decision was.

I didn’t know back then but this blog fundamentally changed the course of my life for the better and I want to share with you what those things were.

Organizing ideas

Communicating ideas is hard. Communicating ideas in writing is even harder.

Writing regularly helped me structure my thoughts in a way that was easier for people to digest and when people can follow what you are trying to say, you unlock a new level in living life.

English

I don’t suck at English as much as I used to.

I was never good at learning languages and I think that remains unchanged, but forcing myself to write in English and making a plethora of mistakes in the process, made me decent enough to be able to communicate with a wider audience and thus increasing the amount of opportunities I had access to.

Contributing to open-source

After getting used to writing in English I was finally comfortable with writing publicly accessible emails, reading documentation in this language and speaking it without being so afraid.

This step led me to contribute to the Kamailio open-source project with a module called CNXCC.

Contributing to open-source is the best form of curriculum-vitae a programmer can have which takes me to the next part …

My first remote job

I met Carsten in 2012 after his company was hired by the company I was working for back then in Asunción, Paraguay. He is a cool and a very smart guy and after a while working side by side with him, he offered me a position at his company working remotely.

I resigned to the “safe” job I had and went to work for him and his company in Germany from the comfort of my home in Asunción. I did this against the advice of my parents and this is also another big learning for me: friends and family always want the best for you and they usually advise you against taking big risks but at the end of the day, rewards that are worthwhile only come from taking those risks.

Anyway, the module I wrote served as a proof I’m technically capable of doing the things I said I could and that landed me the best job I ever had (after Toky 😜).

He took a chance with me and I’ll forever be grateful to him for that.

The very last picture at my, then, previous job.

Moving countries

Months after starting working remotely my then girlfriend (today wife) got promoted to a position that required her to move to Mexico.

I didn’t take it easily but I ended up moving with her and I’ve been living in Mexico since 2014.

In retrospective, I know my decision to follow her was easier to make because I would not be resigning to a career in Paraguay and because I could take my job with me by continuing working remotely. This wouldn’t have been possible at all if I wouldn’t have taken the risk of working for Carsten in 2013. Win-win.

By this time in my life I was already very comfortable with taking risks. I was young and naive but somehow, the decisions I was making were surprisingly right and I was getting along with uncertainty.

First 5 seconds in Mexican soil. I was moving to Mexico City without ever having been to this city before.

Founding Toky

We are now in September 2014 and about to make the single biggest decision in my professional life.

Being the risk taker I was (am?) I was looking for the next big challenge and against all reason, Oscar (my cofounder) and I decided to start a company, Toky.

He moved to Mexico and I resigned to that lovely job I had and it took all of me to be able to do it. I really loved it and I doubted doing it until the last minute.

Neither of us had any idea about how to run a business but we did it anyway. The only thing we were sure of was that we were very good at the things we specialized at: me at telephony and him at product design.

This part requires a lot of elaboration and I’ll do it in future posts but what I can tell you right now is that so many things happened between then and today that the overused saying of “roller coaster of emotions” falls short compared to what we went through.

The next chapter of this blog

If you look at my previous entries you will notice this blog was about technical topics regarding telephony.

I still am an engineer and a programmer at heart but I feel like this time around I should blog about my six years of experience running a company that had very few chances of succeeding but did it anyway.

I’ll be telling anyone willing to read me how I did it in the hope of helping other people do the same.

An update after almost 2 years without posting

I can’t believe it’s been almost two years since my last post, time flies.

I’m gonna make this short and concise:

  1. I started my own company, I am now a startup CEO and cofounder 🙂 .
  2. A previous post is the project that started it all. It has mutated quite a bit and turned into Toky, a product that was built from scratch and that I am proud of, specially in the technical POV.
  3.  I don’t blog anymore, as a matter of fact, I spend my days coding and coding with not much time to write about anything other than Toky. You can find my recent posts in the Toky Blog.
  4.  I no longer maintain my opensource projects. I’m really sorry about this but I don’t have the time to do it anymore.
  5. I don’t reply emails about questions on these projects. I used to reply them with apologies for not being able to help them, but the number of emails kept increasing that they became a burden so I simply stopped replying. Again, I’m sorry about this, it’s not personal.
  6. I may go back to blogging soon.

BRB 😉

 

 

Three months at ng-voice

ng-voiceFor those who follow me and didn’t notice my new job, it has been 3 months already. Three great months :). I switched from a regular commuted job at Conexion, to a full-time telecommuting job for a company located in Hamburg, Germany, which is 6 hours away from my timezone.

Timezone was never a problem. When I am about to start here, they are about to have lunch. It sounds rough but it is not when a perfectly built schedule and task list is given to you, and when you work with very talented and disciplined professionals.

And speaking about talented people, well, I work with the best in the industry. No exaggeration.

My work is very diverse and exciting and although it’s been only 3 months, I already worked with:

  1. Mobicents: I wrote an Online Charging Server based on Mobicents OCS following the Diameter Credit Control Application specs.
  2. Kamailio IMS modules: I bug fixed and extended the ims_charging module.
  3. CSipsimple: I created a custom version of the famous Android SIP phone which can be found here.

Three different VoIP related technologies in three months, and it’s getting better every day :).

Dinstar SMS API update #2

A few updates has been committed to the main github repository a few weeks ago:

– Support for USSD messages

– Several bug fixes

– Windows support is now available upon request via email.

– Updated sample applications.

I can count more than a dozen of people reporting that they have been using the library successfully.

If you are planning to use it, please don’t forget to report bugs or to give general feedback :).

 

Gone for a while…

gone from blogging, but not from working 😉

I’ll, eventually, explain these projects with more detail, but for now, I will just enumerate them so people can have a clue of what I’ve been working on:

1. cnxcc: this is a credit control module for Kamailio which deals with customers credit information to monitor the calls and hang them up if necessary.

2. cnxcc-db-sync: a php script to query the previous module (via xmlrpc) in order to feed a database with information coming directly from the module’s internal memory, really fresh and real time information.

3. cnxcc-web: a web based management interface for cnxcc.

4. webrtc + websockets: I’ve been reading a lot about this subject. I’ve even bought a book 😀

Dinstar SMS API client

I just committed the project that uses libdwgsms to send/receive text messages through Dinstar’s branded gateways.

The code goes as simple as follows, and you can check it from my github account:

/*
 * main.c
 *
 *  Created on: Sep 19, 2012
 *      Author: caruizdiaz
 *      		caruizdiaz.com
 */

#include "dwg/dwg_util.h"
#include "dwg/dwg.h"

#define LISTEN_PORT		7008
#define SEND_SMS_PORT	0

void new_sms_handler(str_t *gw_ip, dwg_sms_received_t *sms)
{
	LOG(L_DEBUG, "[%.*s] Encoding: %d, From: %s, Len: %d, Text: %.*s\n", gw_ip->len, gw_ip->s,
										sms->encoding,
										sms->number,
										sms->message.len,
										sms->message.len, sms->message.s);
}

void status_handler(str_t *gw_ip, dwg_ports_status_t *status)
{
	int index = 0;

	LOG(L_DEBUG, "\t[%.*s] Number of ports: %d\n", gw_ip->len, gw_ip->s, status->size);

	for (index = 0; index < status->size; index++)
	{
		LOG(L_DEBUG, "\tPort%d: %d\n", index, status->status_array[index].status);
	}
}

void msg_response_handler(str_t *gw_ip, dwg_sms_response_t *response)
{
	LOG(L_DEBUG, "\t[%.*s] ACK response from %s\n", gw_ip->len, gw_ip->s, response->number);
}

int main(int argc, char** argv)
{
	dwg_message_callback_t callbacks	= {
				.status_callback 		= status_handler,
				.msg_response_callback	= msg_response_handler,
				.msg_sms_recv_callback	= new_sms_handler
	};

	LOG(L_DEBUG, "%s: Setting up sever... \n", __FUNCTION__);

	dwg_start_server(LISTEN_PORT, &callbacks);

	LOG(L_DEBUG, "%s: Server listening at port %d\n", __FUNCTION__, LISTEN_PORT);

	str_t des = { "59598146623", sizeof("59598146623") - 1};
	str_t msg = { "test from PY!", sizeof("test from PY!") - 1 };

	for(;;)
	{
		getchar();
		dwg_send_sms(&des, &msg, SEND_SMS_PORT);
	}

	return 0;
}