JP Boily Founder of Metrics Watch. Jack of all trade SaaS consultant (but mostly code, analytics & marketing) http://jipiboily.com/ Fri, 09 Jul 2021 20:02:55 +0000 Fri, 09 Jul 2021 20:02:55 +0000 Jekyll v2.5.3 From starting to shutting down Simple Segment...the story...and what's next for me? <p>TL;DR: In June of 2017, I started a second SaaS, Simple Segment. I&#39;ve shut it down a few days ago. I&#39;m doubling down on <a href="https://metricswatch.com/">Metrics Watch</a> and still do consulting (a lot of Google Analytics consulting and also building SaaSes and web apps, <a href="mailto:jp@metrics.watch">reach out and say hi</a>!)</p> <h2>What made me start Simple Segment</h2> <p>I wanted to be able to sync my email marketing automation tool with custom audiences on Facebook Ads. Why? That way I could do highly targeted and personalized ads, giving an incredible return on investment.</p> <p>There are already a few apps like this on the market. So I tried the ones that supported <a href="//drip.pxf.io/c/1213670/390571/5674">Drip</a>. Honestly, the integrations with <a href="//drip.pxf.io/c/1213670/390571/5674">Drip</a> were not great. I wanted to be able to target people with specific tags, but not others and possibly people that had specific values in custom fields.</p> <p>Nothing was satisfying.</p> <p>It was Friday evening, in early June 2017. I had told my wife I wanted to hack on a project just for fun this evening.</p> <p>I started to have conversations with a handful of advanced Drip users that had the same need...and were willing to pay.</p> <p>So I decided that I would play with Drip&#39;s API and Facebook Ads&#39; API too to see how easily it would be done.</p> <p>It turns out that after a couple of hours, I had a (shitty) PoC of the integration between the two. It was not an app yet, it was just a pile of shitty lines of code that ensured me I could do it nicely and easily.</p> <p>As the evening passed, I had a couple of people confirming me they would pay. And I needed it myself. Why not build it, right?</p> <h2>The very early days</h2> <p>For better or worst, I decided to build it. Not without reaching to Drip first. I got introduced with someone there that told me it was on their radar, but I couldn&#39;t get anything more specific (I think it just wasn&#39;t planned, as that person could not tell me if it would be a matter of weeks or years).</p> <p>I was already fully booked with consultation...but I talked with my wife and she agreed: I would work late evenings until it&#39;s done. 3 weeks later, and maybe about 30 hours later...I had a full SaaS working with billing (well, I extracted that from my other SaaS, <a href="https://metricswatch.com/">Metrics Watch</a>, so that was trivial), online and...with people paying for it!</p> <p>It was a blast. People were easy to convince as they could see the value. Telling someone they&#39;re gonna make more money is a pretty easy sell.</p> <p>Then, Drip/Leadpages became customers. That was awesome. A nice proof that I did a good job and people were willing to pay. A bunch more customers came.</p> <p>The plan was to add other integrations for other platforms and scale revenues while starting to make it even more powerful.</p> <p>Then I left for vacations. Did a pre-launch with Product Hunt&#39;s Ship landing page. It was the early days of PH Ship during my vacations, and they were adding only a handful of products per week...and they featured me. It was nice. I saw a lot of interest and curiosity.</p> <h2>The beginning of the end</h2> <p>After my vacations, I had insider information that Drip&#39;s native integration would be coming around September.</p> <p>I understand. It&#39;s a highly requested feature, and honestly, not so hard to build. Well, it&#39;s always harder when you try to squeeze things into an already existing app and all that jazz. But it&#39;s not rocket science.</p> <p>I decided to reach out to maybe 20 other platforms to see what were their plans. About half told me it was in their short to medium term plans. The other half...they had no clue what I was talking about (mostly the bigger ones with dedicated support staff, I think?).</p> <p>It became clear to me I should not spend more time on this.</p> <p>I decided I would keep it alive as long as it was doing some profit and not requiring any or very minimal support. I had other clients coming in, but besides onboarding people, I did nothing.</p> <h2>The actual end</h2> <p>A couple of weeks ago, I lost two clients. Which made the profit drop to the threshold I had fixed. It was time for a shutdown.</p> <p>I&#39;ve reached out personally to all my clients. Issued partial refunds to annual subscribers. Everyone moved very quickly. I gave them over a month...they all did it within a week or two.</p> <h2>What did I do wrong?</h2> <p>What should I have done differently? Did I do something massively wrong?</p> <ul> <li>I started by having conversations with potential customers first. So that&#39;s good. ✅</li> <li>I built a very very basic version while having more conversations. ✅</li> <li>I listened to what people said as a whole, but not necessarily all feature requests. ✅</li> <li>I made money. ✅</li> <li>I&#39;ve looked at the competition and what could destroy such an app (including contacting the right people at Drip). ✅</li> </ul> <p>Honestly, I don&#39;t think I did a lot of things wrong.</p> <p>I gave myself until the end of the year to acquire solid revenues, add integrations and other features to prevent a fatal blow by a single provider. They were much quicker than I thought, which killed my enthusiasm but also, I think, made the project non-viable or hard to make viable at least.</p> <p>So, that&#39;s the end and it&#39;s ok! :)</p> <p>Oh, one super positive side effect: by building Simple Segment, I&#39;ve known a bunch of people I would never have met otherwise. Some even became consulting clients! (hi Chase from <a href="https://www.carthero.io">CartHero</a>).</p> <h2>What&#39;s next for me?</h2> <p>Well, I still run <a href="https://metricswatch.com/">Metrics Watch</a>. It&#39;s <strong>white-label marketing reports specifically designed for agencies, delivered by emails</strong>. It supports Google Analytics, Adwords and Facebook Ads (and more to come). I&#39;m doubling down on it and massively improving it as we speak in terms of design, and then integrations.</p> <p>For about two and a half years, I&#39;ve been freelancing for startups and agencies from all around the world. That won&#39;t change.</p> <p>I&#39;m a doing a lot Google Analytics and Google Tag Manager consulting nowadays.</p> <p>I&#39;m also building SaaSes and web apps for entrepreneurs that want to get started in the SaaS business. Mostly in Ruby on Rails.</p> Thu, 08 Mar 2018 00:00:00 +0000 http://jipiboily.com/from-starting-to-shutting-down-simple-segment-and-what-s-next-for-me http://jipiboily.com/from-starting-to-shutting-down-simple-segment-and-what-s-next-for-me remote Stop getting screwed to build your startup’s MVP (minimum viable product) <p>So you have this new business idea. Are you ready to get your MVP (minimum viable product) built by a contractor? Congrats!</p> <p>Now hold on for a minute.</p> <p>I don’t want you to get screwed. In fact, you would be screwed by your inexperience partially, and your vendor’s inexperience and/or lack of pragmatism and/or need to make as much money from you as possible. I would bet the first two are the main reasons in general.</p> <p>Just to be clear, I don&#39;t think there are bad intentions in most cases.</p> <p>Agencies and contractors often don&#39;t have the required context, experience, and pragmatism.</p> <p>What you want and need is the best return on investment possible.</p> <p>How do we get there?</p> <h2>Forget about your long term vision (for now)</h2> <p>So, you know where you’re going, and how your business idea will change the world and you have a five-year plan to IPO? Awesome. Put it in a drawer for now.</p> <p>What you need is to start from the basics. You need to build the most simple version you think you can sell to your potential customers. At least, that’s the goal.</p> <p>This first version is often referred to as a minimum viable product.</p> <p>You should never build your ideal version or your vision of what you think it should be. You will spend a ton of money and are likely to be unsatisfied.</p> <p>It should not be your first step.</p> <p>Before starting to build the MVP, try to figure out what is the most minimalistic version of your vision you can get built that will be interesting enough for people to spend money.</p> <p>Think about it for a moment.</p> <p>You have a rough idea of what it could be? Awesome. Make it even more simple. Repeat. Again. And again.</p> <p>I would bet I can still identify many things you don&#39;t need yet and maybe never will.</p> <p>Can you remove more features or details and still make it useful? Awesome! You just did a great first step.</p> <p>What you need is to scope the first version and make sure there is nothing that is not 100% required to be able to sell it to customers.</p> <p>Challenge all the suggestions you get to add features or improvements. Refrain from adding anything if at all possible.</p> <h2>Why starting with something basic is better?</h2> <p>To get to a viable product, many people will tell you that you need a lot of features, perfect design, a kick ass logo, a super flexible billing system and whatnot.</p> <p>Don’t listen to them. Save money and get to market faster. This is what I want to help you do here. Save money, and do more money, faster.</p> <p>First thing, you should do it in multiple tiny steps or iterations. This will help you avoid getting too far from what your customers need. Why? Look at this little graph I made with all my non-existing designer skills:</p> <p><center><img src="/img/mvp-trajectory.png" alt='MVP trajectory'></center></p> <p>The black line is what you think you need to build. It’s the direction you’re heading. The orange line is what you need to build to be successful.</p> <p>You want to start with something super basic so that the time between A &amp; B is as short as possible.</p> <p>Point B is where you will show your MVP to your customers. They will like it or not, but it will not be 100% perfect. If you build a big product and take six months, it could be six months going in the wrong direction.</p> <p>To be as effective as possible, you need to adjust your trajectory often.</p> <p>To do that, you need to shorten the time between each iteration.</p> <p>Some people will tell you they need six months to get from A to B. It’s way too long in most case.</p> <p>What you can do is take a month, for instance, to get from A to B. You will show it to customers, and potential customers and they will tell you it’s not useful enough because of X, Y, and Z. Fair enough, you did not get it right the first time. It’s fine.</p> <p>Now let’s get closer to what they want. Points B to C might be a couple of weeks or more, but at least, it will be focused on the feedback you got, so you can get closer to having satisfied customers as fast as possible.</p> <p>You always want to work so that you get as close as possible to what the customer want, as fast as possible.</p> <p>This is what will make customers happy and help you grow and make more money faster.</p> <h2>How to move fast and save money?</h2> <p>Are you sold on the fact you should build something very basic first? Awesome. If you’re not, <a href="mailto:jp@metrics.watch?subject=MVP">shoot me an email</a> ;)</p> <p>How can we get there?</p> <p>Remove everything that is not <b><u>absolutely</u></b> required. I’ll say it again. Remove everything that is not <u><b>ABSOLUTELY</u></b> required.</p> <p>Let’s say you want to build an application that will send alerts to your customers when they have a lot of visitors on their site.</p> <p>What do you need?</p> <p>You need a way to create an account, somehow.</p> <p>You will need a way to get the visits from your customer’s website.</p> <p>You will need a way to create the said alerts.</p> <p>You will need a way to send emails.</p> <p>You will NOT need a way to send those alerts via SMS. You can build that later if required.</p> <p>You will NOT need a way to send those alerts via Slack. Not yet at least.</p> <p>You will NOT need to have all sorts of configurations for the alerts, like disabling them at night or weekends.</p> <p>You will NOT need it to be in real-time. Would it be better? Hell yeah. Required? Nope.</p> <p>You will NOT need a way for your customers to see their past invoices.</p> <p>You might not even need any billing system to start with. You could ask for payments via wire transfer, or via your PayPal account for now.</p> <p>Do you need a mobile app? Hell no.</p> <p>Do you need to support CSV upload so that your customers can create 10 or 20 alerts a time? Nope. If they want to do it, they can send you the CSV via email and you can create them manually for them.</p> <p>Do you need an API so that your customers can create and modify alerts via their internal tools? Nope. Certainly not.</p> <p>Do you need an administration section for you so you can see all the users and modify things for them? Nope.</p> <p>You get it right? You don’t need that much to start with.</p> <p>Oh, and never say “well, while we’re at it, we should probably…” NOPE. You should not. Not even for a tiny thing.</p> <p>Whatever can be done manually for a while, should be done manually. Not forever, but for the foreseeable future. If you take 5 hours to automate something right now that is not going to take you more than a couple of hours per month, don’t do it.</p> <p>You can even disable the accounts after a trial manually. I know, I did that for a while for <a href="https://metricswatch.com/?utm_source=jipiboily&amp;utm_medium=blog&amp;utm_campaign=mvp">Metrics Watch</a>!</p> <p>It’s almost 100% sure you will be wrong in many aspects:</p> <ul> <li>how people will use your application</li> <li>what features are the most valuable</li> <li>what you think you will have to do support for</li> </ul> <p>Consider you’re wrong on almost everything.</p> <p>Your only goal at this point is to verify your theory, and how far you are from it. Verify that people want to pay for what you offer and that you can turn this into a profitable business. This should be your only focus.</p> <p>What you want to avoid is wasting time and spending money on building the wrong thing. If you build something super simple and move from there, the delta between your theory and the reality will be easier to fix and improve.</p> <h2>Need a hand for free?</h2> <p>You are about to get an MVP built and you think what I just said is all exaggerated? I can challenge your ideas in a free 15 minutes call. Just add your email in the box at the top right corner to register for it.</p> <p>Speak soon!</p> <p><strong>PS</strong>: what is your experience with building or getting an MVP built? Leave a comment and let me know.</p> Fri, 30 Sep 2016 00:00:00 +0000 http://jipiboily.com/stop-getting-screwed-to-build-your-startup-minimum-viable-product http://jipiboily.com/stop-getting-screwed-to-build-your-startup-minimum-viable-product remote Canadian working remotely for a US company: how do taxes work? <p><strong>Important disclaimer</strong>: I am NOT a lawyer. This is based on my personal experience and my understanding of the law.</p> <p>I get asked that a <em>lot</em>, so I thought I would write it down so people can refer to it. Questions I often get are generally related to visa and/or taxes. This post is going to talk about taxes.</p> <p>Let&#39;s start with some context: I live in Canada, and never lived anywhere else. I had to travel for meetings and stuff like that in the past, but that&#39;s about it. I am a software developer, and this applies to my very specific case. So keep this context in mind as you read through this.</p> <p>Welcome in a world of grey zones.</p> <p>Let&#39;s dive right in.</p> <h2>Taxes</h2> <h3>Where will I pay taxes?</h3> <p>It depends™. In theory, according to the treaty between Canada and US, you could pay taxes... in one, both, or none of the countries. Yes, all those are possible! Don&#39;t worry though, in all cases, at the end of the year, you will pay the same thing, at least, in theory.</p> <p>Before landing my first remote job, I called the Canada Revenue Agency (CRA)...I ended up talking with a department called something like &quot;the foreign incomes department&quot;. Here is what they told me, after having to wait while the woman was looking at my case, or at least, how I am paraphrasing it several years later: &quot;OK, so my understanding is that you should pay taxes in Canada, not in the US...but you could pay in the US too, or just in the US. It depends on the payroll system of the company. In all cases, the US taxes would be transferable to Canada and if you pay taxes in both countries you would be able to transfer the US taxes to Canada and it would end up being the same numbers as you would have a return. This is MY understanding of the treaty and is not usable in court, so I am going to refer you to the treaty [of income something something] at this URL [...]&quot;. I hang up and go to the URL. The treaty between Canada &amp; US she referred me to is...over 200-300 pages! Obviously, not written in friendly terms, I was lost after well under a page.</p> <p>I took the job, it should be fine after all? In theory. It ended up always being fine by the way.</p> <p><strong>Fun story</strong>: I called back for followup questions a few times, and they don&#39;t have a direct number, so you need to go through the usual CRA number. Most of the time people were like &quot;sorry, this department doesn&#39;t exist&quot;...to what I answer &quot;well, I just talked to someone from that department, so you should double-check&quot;. Sometime I had to hangup and callback to get a different agent, until I found someone who knew about it. Interesting huh?</p> <p><strong>Less fun story</strong>: my understanding, based on my experience working for two different US based startups, is that they need to have a Canadian entity of some sort to be able to pay you and withhold taxes and all that jazz on your pay. It&#39;s a ton of paper work. When I went to the office <a href="https://handwriting.io/">Gracious Eloise</a> in New York City, <a href="https://twitter.com/frenchpinkhas">Paul</a> (the COO) showed me two piles of documents. One was 2 or 3 times bigger, or something like that. The big pile was the paperwork for me. Only me. The other one was the paperwork for all the US employees (around 10 I think at the time?), TOGETHER!</p> <p><strong>Weird story</strong>: at the end of the year, we have a T4, right? In Quebec, we usually have &quot;Relevé 1&quot; too, which is the equivalent at the provincial level. I never had a &quot;Relevé 1&quot; when working for a startup, and the <strong>province showing on my T4 was &quot;ON&quot; (Ontario) for the first job, and &quot;US&quot; for the second one</strong> .Yes, &quot;US&quot; is technically a valid province for a T4. It&#39;s all fine, tax software can work with it, &quot;everything&quot; is transferred automatically between all the level of taxations, nothing major. There was just one exception, which was the parental leave thing in Quebec, which is around $200-300/year, no big deal.</p> <h3>How is tax calculated?</h3> <p>On the total of Canadian dollars you do. Not an approximation, it HAS to be changed 100% (or that&#39;s what I was told at least). There is no way to keep it in USD. If you want it in USD, change it in CAD then back in USD, but there are fees, so probably not a good idea.</p> <h3>What if I am hired as a freelancer?</h3> <p>I&#39;m not 100% sure, but I think you will have to take care of everything: you send an invoice, they send money, you pay taxes at the end of the year (or every quarter or whatever the rules are in your province, for your case). That&#39;s about it. I don&#39;t see how or why it would be any different than this.</p> <h3>What about X?</h3> <p>There is a lot more to say.</p> <p>I wrote about <a href="/people-who-change-your-life-and-how-I-landed-my-remote-jobs-and-contracts/">people who change your life and how I landed my remote jobs and contracts</a> and I might write about more remote-related subjects. Feel free to poke me on Twitter if you have more questions.</p> <p><strong>I am consulting for distributed teams and nomad workers</strong>, so if you want to hire me for a 1-on-1, help with your distributed team or as speaker on the subject, <a href="mailto:j@jipi.ca?subject=Remote">just drop me an email</a>.</p> <p>Feel free to ask questions in the comments.</p> Sun, 07 Feb 2016 00:00:00 +0000 http://jipiboily.com/canadian-working-remotely-for-a-us-company-how-does-taxes-work http://jipiboily.com/canadian-working-remotely-for-a-us-company-how-does-taxes-work remote How to know which Jasmine specs are slow? <p>So you have this nice Jasmine suite that&#39;s very useful and maybe even proud of...<b>but it takes over a minute to run?</b> It seems to get stuck at one or a few specs but you can&#39;t figure out which one? I had that exact problem this morning while working on my SaaS, <a href="https://metricswatch.com/?utm_source=jipiboily.com&utm_medium=blog&utm_campaign=jipiboily.com-jasmine-slow-specs">Metrics Watch</a> (email-based marketing reports for agencies &amp; real-time alerts for Google Analytics).</p> <p>Let me help you!</p> <p>Add this helper:</p> <div class="highlight"><pre><code class="language-js" data-lang="js"><span class="c1">// This works under Jasmine 2.3</span> <span class="kd">var</span> <span class="nx">slowSpecsReporter</span> <span class="o">=</span> <span class="p">{</span> <span class="nx">specStarted</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">result</span><span class="p">)</span> <span class="p">{</span> <span class="k">this</span><span class="p">.</span><span class="nx">specStartTime</span> <span class="o">=</span> <span class="nb">Date</span><span class="p">.</span><span class="nx">now</span><span class="p">()</span> <span class="p">},</span> <span class="nx">specDone</span><span class="o">:</span> <span class="kd">function</span><span class="p">(</span><span class="nx">result</span><span class="p">)</span> <span class="p">{</span> <span class="kd">var</span> <span class="nx">seconds</span> <span class="o">=</span> <span class="p">(</span><span class="nb">Date</span><span class="p">.</span><span class="nx">now</span><span class="p">()</span> <span class="o">-</span> <span class="k">this</span><span class="p">.</span><span class="nx">specStartTime</span><span class="p">)</span> <span class="o">/</span> <span class="mi">1000</span> <span class="k">if</span> <span class="p">(</span><span class="nx">seconds</span> <span class="o">&gt;</span> <span class="mf">0.5</span><span class="p">)</span> <span class="p">{</span> <span class="nx">console</span><span class="p">.</span><span class="nx">log</span><span class="p">(</span><span class="s1">&#39;WARNING - This spec took &#39;</span> <span class="o">+</span> <span class="nx">seconds</span> <span class="o">+</span> <span class="s1">&#39; seconds: &quot;&#39;</span> <span class="o">+</span> <span class="nx">result</span><span class="p">.</span><span class="nx">fullName</span> <span class="o">+</span> <span class="s1">&#39;&quot;&#39;</span><span class="p">)</span> <span class="p">}</span> <span class="p">},</span> <span class="p">}</span> <span class="nx">jasmine</span><span class="p">.</span><span class="nx">getEnv</span><span class="p">().</span><span class="nx">addReporter</span><span class="p">(</span><span class="nx">slowSpecsReporter</span><span class="p">);</span> </code></pre></div> <p>In my case, I am using <code>jasmine-rails</code>, so to have this helper running I had to create a file named <code>specs/javascripts/support/jasmine-slow-spec-reporter.js</code> and edit the <code>jasmine.yml</code> so it looks more like this:</p> <div class="highlight"><pre><code class="language-text" data-lang="text">helpers: - &quot;helpers/**/*.{js.coffee,js,coffee}&quot; - &quot;support/jasmine-ajax.js&quot; - &quot;support/jasmine-time-reporter.js&quot; </code></pre></div> <p>Now you&#39;ll get console outputs on slow spec with the full name of the spec, you can now find out those slow specs and get your suite to run in <b>less than 5 seconds instead of over a minute</b>!</p> <p><b>That&#39;s the easy part though</b>, the hard part is usually to figure out <b>WHY</b> your specs are slow, at least, in my case it was not that obvious. Want to know how I made it faster? Subscribe to my email list (the box at the bottom right) and I&#39;ll let you know how I did for my React &amp; Redux project soon! You don&#39;t want to figure it out and need a hand now <b>speeding up your test suites</b> (Javascript or Ruby)? <a href="mailto:j@jipi.ca?subject=Hi">Hire me ;)</a></p> Thu, 14 Jan 2016 00:00:00 +0000 http://jipiboily.com/how-to-know-jasmine-specs-are-slow http://jipiboily.com/how-to-know-jasmine-specs-are-slow jasmine javascript testing People who change your life and how I landed my remote jobs and contracts <p>There’s some people who will change your life, some will know it and change it radically. On the other hand, there are the people that you meet and actually change your life quite a bit too, but might not know, because they only said one sentence that triggered a life change, or they introduced you to someone who changed your life. I had a lot of those moments, like everyone, but I’m going to tell you a few stories. Why? I want you to have a better life, whatever that means for you, by meeting people. Meet people. If you meet people and have honest discussions and relations, I think a lot of great things will happen to you.</p> <p>Some people will network with tactics, specific objectives or people in mind. I don’t. I never networked in a calculated way. I guess I was just lucky enough to meet a bunch of people with whom there was a fit. Here are some stories I find interesting.</p> <h2>Spreeconf and landing a remote job</h2> <p>In early 2012, I went to the first Spreeconf in New York (that I mostly paid by myself by the way). I learned a ton of stuff which was relevant to my work and helped our Spree project to be a success. It&#39;s not all though, I met a bunch of people. In all those hours of meeting people and talking about Spree, there is this dinner…a dinner where I was with a few other guys, we had beers, food and fun. It was just that, a bunch of geeks together having fun. It turns out that I stayed in touch with most of them to a certain degree. First, we all stayed in touch through Spree&#39;s chat, helping each other and the community. But there’s more than that. There is one guy, <a target="_blank" href="https://twitter.com/msevestre" target="_blank">Michael</a>, a guy from France now living in Canada. We got along really well, he’s now maintaining a blog engine I originally wrote. We have occasional Skype calls (been too long now!). There also Josh with whom we almost landed a pretty big contract at the time with the agency I was working with (didn&#39;t work out for some reason). Another one, <a target="_blank" target="_blank" href="https://twitter.com/GeekOnCoffee">Andrew</a>, who referred me to his friend who was looking for a remote developer, I had the job. It was a long time after, and not related to the conference per se but the time I’ve put on my own personal time on the Spree community, helping people. So, <b>I’ve landed my first remote job</b>, in English (I am French Canadian, I had an awful accent at the time, got much better). The product was impressive (and is still, check them out at <a target="_blank" target="_blank" href="http://handwriting.io">handwriting.io</a>). That’s pretty life changing, right? I&#39;m very thankful to him, <a target="_blank" target="_blank" href="https://twitter.com/groveriffic">Sam</a> (his friend) and Eloise (founder of Handwriting.io) for making that happen.</p> <h2>World is small</h2> <p>During that same dinner at the Spreeconf, I also met <a target="_blank" href="https://twitter.com/binaryphile">Ted</a>, from Florida. We spent part of an evening working on something together. Fast forward a year and a half later. I met someone at another conference (<a target="_blank" target="_blank" href="http://www.burlingtonrubyconference.com/">Burlington Ruby Conference</a>, awesome conference, you should go!), <a target="_blank" href="https://twitter.com/rwjblue">Robert</a>, who was from Florida, but not even the same city…and I was like: “<em>well, I know one guy in Florida, you probably don&#39;t know him but here&#39;s his name just in case</em”…and I gave it a shot, told his name…and the guy was like “<em>Really? Sure I know Ted, he’s going at the Tampa Ruby meetup, seeing him every…</em>” (or something along those lines). Wow, world is sooo small. Or is it Florida? I met those two guys again at another conference almost 2 years later, together! We had burgers that night in Miami Beach. Delicious burgers.</p> <h2>Helping organizing a conference</h2> <p>In late 2010, I started to get involved in the organization of the Web à Québec, it was going to be the first edition. I met a shit ton of great people then. It was not calculated. I just wanted to meet people who, like me, enjoyed the web. This is when most of my network in Quebec City as it is right now started to develop. I&#39;m so thankful for everyone I&#39;ve met and had thoughtful and engaging discussions with.</p> <p>I&#39;ve also spoke at that conference for the last 3 years, but that&#39;s another story! :) I spoke about <b>distributed teams and startups</b>. By the way, I&#39;m going to do <b>free email courses about those subjects, subscribe to my blog to receive the announcements</b> before everyone else. First one is launching soon! Ok, let&#39;s get back on track now...</p> <h2>Landing my best job ever</h2> <p>RubyConf, 2013. My wife was pregnant but I decided that I was due for a conference (and she was fine with it). My employer at the time told me they could not pay for a conference but that I could take a few days off...fair enough, I decided to go on my own! It was awesome. November here in Quebec is starting to get cold and snowy, so Miami for a week would be awesome for that too, but meeting people and working from Miami would be terrific! It happens that I met a bunch of people there, some that I&#39;ve met online before (IRC, email, Hangout with beer &amp; whiskey) and some new friends. I&#39;ve solidified relationships with people I knew before from the Washington DC area, New Zealand, Mississipi, Toronto, Orlando, UK, SF, Boston...you get it right?</p> <p>I also met new people, two of those were <a target="_blank" target="_blank" href="https://twitter.com/rhs">Russ</a> and <a target="_blank" target="_blank" href="https://twitter.com/smathieu">Simon</a>, respectively co-founder and first employe at <a target="_blank" target="_blank" href="https://www.rainforestqa.com/?utm_source=jipiboily.com&utm_medium=blog&utm_campaign=meeting-people ">Rainforest QA</a> (continuous QA as a service from the <a target="_blank" href="http://www.ycombinator.com/">YC</a> S12 batch). I had a ton of fun with them! I also thought their product was awesome, I loved it. I was not looking for a job, they were looking for people, but in SF. I didn&#39;t care, we got along really well and had quite a few beers (English guy + 2 Canadians = lot of beers as you can imagine). Fast forward a month or two later. They made TechCrunch, and I reached out to Russ...something like &quot;<em>Hey, congrats on making TC and launching!</em>&quot;. Then we exchanged a few more Twitter DMs. I ended up telling him something like &quot;<em>if you&#39;re ever looking for remote people, think about me! :)</em>&quot;. I guess that worked out well as I ended up being employee #2, first remote employee of a now successful team distributed on 4 continents. Best job ever. The team was awesome from the start, the product was awesome, the guys were flexible. Remember my wife was pregnant? Well, they were ok with my paternity leave only a few weeks after I joined (they knew before hiring me) and my first week was going to be mostly spent at a conference I was talking to.</p> <p>I learned a lot while working at Rainforest. I joined early enough that we didn&#39;t know what we were doing in so many ways. I did code, hiring, support, I was involved in positioning and marketing sometimes, I blogged about different things bringing a ton of traffic and so much more. We made some mistakes, but I guess we still did not do too bad as they are growing like crazy now (a pre-nicorn, like <a target="_blank" target="_blank" href="https://twitter.com/jasonlk">Jason Lemkin</a>, one of the main investors, would say. You know, the <a target="_blank" href="https://www.saastr.com/">SaaStr</a> guy?).</p> <p>I&#39;ve learned so much...it helps me with my clients as a SaaS consultant (<a target="_blank" href="/hire-me/">you can hire me</a>) and it helps me a lot to build my own bootstrapped startup, <a target="_blank" target="_blank" href="https://metricswatch.com/?utm_source=jipiboily.com&utm_medium=blog&utm_campaign=meeting-people ">Metrics Watch</a> (we do alerts for Google Analytics, to save you time so you can do other stuff than looking at metrics for unusual things). I also gave a talk last year called &quot;Startups: errors and hints we rarely talk about&quot; which was mostly learnings from mistakes we did at Rainforest QA and how to (hopefully) avoid them. (I would love to give this talk again, <a href="mailto:j@jipi.ca">please get in touch</a> if you have suggestions of conferences where I could give that talk).</p> <p>I have more <a target="_blank" href="https://www.rainforestqa.com/about/">friends all around the globe now</a>, it&#39;s up to me to visit them in their respective countries.</p> <h2>Meeting a friend and client through THEIR support</h2> <p>That one is pretty cool! More than a year ago, I had an issue while using <a target="_blank" href="https://gemnasium.com/">Gemnasium</a>. I reached out to their support. They not only fixed my issue, but the founder jumped on the email thread and was like &quot;<em>hey, I see you&#39;re in Quebec, I just moved in Quebec City from France...</em>&quot; and I don&#39;t remember the specifics, but I suggested a call on Google Hangout where I could tell him more about the community in Quebec City, the events, the people, etc. We&#39;ve met a few times since and became friends. Well, it turns out that when I announced I was leaving Rainforest to focus on <a target="_blank" href="https://metricswatch.com/?utm_source=jipiboily.com&utm_medium=blog&utm_campaign=meeting-people ">Metrics Watch</a> and do some freelancing for a while, he had a need for someone like me. So, in less than 24 hours, I&#39;ve landed a really fun contract! We are working on an <a target="_blank" href="http://enterprise.gemnasium.com/">enterprise version of Gemnasium</a>. Pretty cool right? Always be ready to make friends and contacts, always!</p> <h2>How the passion of some people can change you radically?</h2> <p>I could tell you about how a consultant (and now friend, <a target="_blank" href="http://marcpearson.ca/">Marc Pearson</a>) motivated me to surpass myself in 2008. He motivated me so much, he had no idea. His passion, his knowledge and his happiness were super motivating! Which reminds me I should thank him again... I also did an interview at Mirego around 2010. I screwed it up badly, but you know what? The interviewer, which was a co-founder, had an intense passion for what they were doing, which gave me another solid kick to get better, spend more time investing on me, building more things for fun. I started to learn Ruby on Rails on my own and Titanium Mobile not too long after that. I was more motivated than ever before to kick ass.</p> <p>Those are just two examples...there&#39;s more, but let&#39;s keep going.</p> <h2>Entrepreneurs tour</h2> <p>Last summer, a bunch of entrepreneurs from Montreal came in my area as part of &quot;La tournée des entrepreneurs&quot; (Entrepreneurs tour)...we were maybe 50% local, 50% from Montreal or elsewhere. That was not only informative and very useful to talk with other entrepreneurs with different businesses and backgrounds, but guess what? I made friends! Some of them actually had me in Montreal a few weeks ago either in their house or in events or for drinks. I was there to meet people but turns out that it might turn into business in some cases. I&#39;ve referred potential clients to some people and got referred by others. I made connections.</p> <h2>So many more...and more to come!</h2> <p>There&#39;s so many more...like <a href="https://twitter.com/aspleenic" target="_blank">PJ Hagerty</a> whom I didn&#39;t met at the RubyConf where we were both but he was traveling to meetups to give talks, and I got in touch on Twitter while on the plane...well, it turns out he came where I live, in the middle of nowhere, during the freezing cold month of January...to give a 15-20 minutes talk at one of the meetups I&#39;m running. We&#39;re now friends, we had so many beers in DC last summer...which brings me, I met again with a bunch of people from Ruby Hangout and Rubyconf that are from the DC area, UK and other places while I was in DC.</p> <p>I think I&#39;ll stop here...there are so many more stories, but you get it, right? And there&#39;s more to come, because you know what? I enjoy meeting people now more than ever, it&#39;s enriching and always surprising!</p> <h2>Go out and talk to people.</h2> <p>Just meet people, it will change your life. Not everyone you meet will do, but as you meet more and more people, the likelihood that someone will drastically change your life increases. It might take hours or years before they do.</p> <p>I am preparing a <strong>follow up post about my top tips to meet people and expand your network</strong>. Subscribe to my newsletter to know when it happens. Also remember my free email course...sign up, and I&#39;ll give you my tricks about hiring, managing remote teams and working remotely as only the first remote employee of a YC-backed &#39;pre-nicorn&#39; can tell it.</p> Wed, 09 Dec 2015 14:00:00 +0000 http://jipiboily.com/people-who-change-your-life-and-how-I-landed-my-remote-jobs-and-contracts http://jipiboily.com/people-who-change-your-life-and-how-I-landed-my-remote-jobs-and-contracts remote conference I am now a freelancer, and a bootstrapper <p>Now. Now is the time. September 16th will be my last day at <a href="http://rainforestqa.com">Rainforest QA</a>. I decided to leave and start doing freelancing while bootstrapping <a href="https://metricswatch.com">Metrics Watch</a>.</p> <h2>Hire me</h2> <p>This means you can hire me. I am building web apps (internal apps or SaaS). I also have experience in infrastructure work and automating stuff and that&#39;s also something I would be interested in doing. I have a ton of experience building web apps with Ruby on Rails, I have very good JavaScript and CoffeeScript chops, I would <strong>love</strong> to do more Go and maybe even some Node! I am totally open to jump on the frontend with React (which I touched a bit at Rainforest QA) or some frameworks. I did quite my share of PHP back in the days, so I could do that, too. I also did a couple of iPhone apps and multiple windows apps.</p> <p><a href="mailto:j@jipi.ca">Feel free to email me! :)</a></p> <h2>Why now?</h2> <p>Why now? Things are going very very very well at Rainforest, why leave now? I&#39;ve always wanted to do that, and I feel like it&#39;s the right time for me to do it, now!</p> <p><em>“The best time to plant a tree was twenty years ago. The second best time is now.”</em> - someone (but my friend <a href="http://twitter.com/jmlacroix">@jmlacroix</a> served it to me one day).</p> <p>Thanks Rainforest QA, Russ, Fred and the team, for the best ride ever!</p> Thu, 03 Sep 2015 14:00:00 +0000 http://jipiboily.com/i-am-now-a-freelancer-and-a-bootstrapper http://jipiboily.com/i-am-now-a-freelancer-and-a-bootstrapper metrics-watch freelancing Metrics Watch: Alerts for Google Analytics (and other metrics sources) <p>I have been working on a project for a few months now that I am about to launch in a few weeks: <a href="https://metricswatch.com/?utm_source=jipiboily.com&amp;utm_medium=blog&amp;utm_campaign=jipiboily.com-blog-post">Metrics Watch</a>. What is it doing? Alerts for Google Analytics (and other metrics sources).</p> <p>You want to know if your pageviews have gone above 5000 today as you might want to do something sooner than later? We can do that! You want to know if your bounce rate changed too much recently? There is possibly something wrong if your bounce rate has bumped by 10% in a week! We can tell you that, too!</p> <p>We are going to focus on Google Analytics first, but we&#39;ll add more metrics sources.</p> <p>Interested in being part of the beta or learn more at launch? Here you go: <a href="https://metricswatch.com/?utm_source=jipiboily.com&amp;utm_medium=blog&amp;utm_campaign=jipiboily.com-blog-post">https://metricswatch.com</a>.</p> <p>Enough words, here is a screenshot of what an email alert look like: <div class="screenshot-center"> <img src="/img/metrics-watch/email-preview-1.png" alt="Metrics Watch sample email"> </div></p> Thu, 05 Feb 2015 12:00:00 +0000 http://jipiboily.com/metrics-watch-alerts-for-google-analytics-and-other-metrics-sources http://jipiboily.com/metrics-watch-alerts-for-google-analytics-and-other-metrics-sources metrics-watch Introducing early version of Fourchette: test PR against a fork of your Heroku app <p><strong>UPDATE</strong>: this is now used in production by many well known companies!</p> <p>As some of you might have noticed, I recently changed job and I am now working at <a href="https://www.rainforestqa.com/">Rainforest QA (check us out if you do anything web-related!)</a>. Why am I telling you that? Because I am introducing you the result of the test project I made before joining the fine folks of Rainforest: Fourchette.</p> <h2>What is Fourchette?</h2> <p>&quot;Your new best friend for isolated testing environments on Heroku.&quot;.</p> <p>Basically, when you create a new PR on GitHub for your project, Fourchette will fork your Heroku app (QA, staging or prod, whatever you want!) and create a live copy of your PR for you to test. Isn&#39;t that amazing? I think it is!</p> <h2>Early version: help me test it</h2> <p>It is a very early version but I would love it if some people could try it out, help me fix bugs and maybe even write some specs (there are very few right now).</p> <p>Want to give it a shot? <a href="https://github.com/jipiboily/fourchette">Head this way: https://github.com/jipiboily/fourchette</a></p> <p>If you love working on this kind of stuff too, I work on it as part of my day job and <a href="https://jobs.lever.co/rainforest/">we&#39;re hiring</a>! ;)</p> Mon, 31 Mar 2014 12:00:00 +0000 http://jipiboily.com/introducing-early-version-of-fourchette-test-pr-against-a-fork-of-your-heroku-app http://jipiboily.com/introducing-early-version-of-fourchette-test-pr-against-a-fork-of-your-heroku-app fourchette ruby heroku github Hey Rubygems, do not include your stuff implicitly (and don't class_eval Class!) <p>A lot of great gems do this: they automatically include themselves into ActiveRecord::Base, or even worse, into Object or Class directly. I am looking at you, <a href="https://github.com/pluginaweek/state_machine">state_machine</a>. In some cases, it is enough for me to not use it (still looking at you, state_machine).</p> <p>I love people giving their time &amp; code, I <strong>really</strong> do and appreciate the work. That said, please, let me include your awesome work explicitly where I want/need to.</p> <p>Having code that speaks by himself and is clear in it&#39;s intention is worth a whole lot. Code where you explicitly include modules is much more clear and easy to maintain too! Using gems that play it nicely and don&#39;t pollute anything else that is not required is wayyy better in my opinion.</p> <p>I prefer:</p> <div class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">class</span> <span class="nc">DockerCreator</span> <span class="kp">include</span> <span class="no">MyAwesomeStateMachine</span> <span class="n">states</span> <span class="ss">:created</span><span class="p">,</span> <span class="ss">:booting</span><span class="p">,</span> <span class="ss">:stopping</span><span class="p">,</span> <span class="ss">:stopped</span><span class="p">,</span> <span class="ss">:exploded</span><span class="p">,</span> <span class="ss">:deleted</span><span class="p">,</span> <span class="ss">:archived</span> <span class="n">transition</span> <span class="ss">from</span><span class="p">:</span> <span class="ss">:created</span><span class="p">,</span> <span class="ss">to</span><span class="p">:</span> <span class="o">[</span><span class="ss">:booting</span><span class="p">,</span> <span class="ss">:exploded</span><span class="p">,</span> <span class="ss">:deleted</span><span class="p">,</span> <span class="ss">:archived</span><span class="o">]</span> <span class="n">transition</span> <span class="ss">from</span><span class="p">:</span> <span class="ss">:booting</span><span class="p">,</span> <span class="ss">to</span><span class="p">:</span> <span class="o">[</span><span class="ss">:stopping</span><span class="p">,</span> <span class="ss">:exploded</span><span class="p">,</span> <span class="ss">:deleted</span><span class="p">,</span> <span class="ss">:archived</span><span class="o">]</span> <span class="n">transition</span> <span class="ss">from</span><span class="p">:</span> <span class="ss">:stopping</span><span class="p">,</span> <span class="ss">to</span><span class="p">:</span> <span class="o">[</span><span class="ss">:stopped</span><span class="p">,</span> <span class="ss">:exploded</span><span class="p">,</span> <span class="ss">:deleted</span><span class="p">,</span> <span class="ss">:archived</span><span class="o">]</span> <span class="k">end</span> </code></pre></div> <p>over:</p> <div class="highlight"><pre><code class="language-ruby" data-lang="ruby"><span class="k">class</span> <span class="nc">DockerCreator</span> <span class="n">states</span> <span class="ss">:created</span><span class="p">,</span> <span class="ss">:booting</span><span class="p">,</span> <span class="ss">:stopping</span><span class="p">,</span> <span class="ss">:stopped</span><span class="p">,</span> <span class="ss">:exploded</span><span class="p">,</span> <span class="ss">:deleted</span><span class="p">,</span> <span class="ss">:archived</span> <span class="n">transition</span> <span class="ss">from</span><span class="p">:</span> <span class="ss">:created</span><span class="p">,</span> <span class="ss">to</span><span class="p">:</span> <span class="o">[</span><span class="ss">:booting</span><span class="p">,</span> <span class="ss">:exploded</span><span class="p">,</span> <span class="ss">:deleted</span><span class="p">,</span> <span class="ss">:archived</span><span class="o">]</span> <span class="n">transition</span> <span class="ss">from</span><span class="p">:</span> <span class="ss">:booting</span><span class="p">,</span> <span class="ss">to</span><span class="p">:</span> <span class="o">[</span><span class="ss">:stopping</span><span class="p">,</span> <span class="ss">:exploded</span><span class="p">,</span> <span class="ss">:deleted</span><span class="p">,</span> <span class="ss">:archived</span><span class="o">]</span> <span class="n">transition</span> <span class="ss">from</span><span class="p">:</span> <span class="ss">:stopping</span><span class="p">,</span> <span class="ss">to</span><span class="p">:</span> <span class="o">[</span><span class="ss">:stopped</span><span class="p">,</span> <span class="ss">:exploded</span><span class="p">,</span> <span class="ss">:deleted</span><span class="p">,</span> <span class="ss">:archived</span><span class="o">]</span> <span class="k">end</span> </code></pre></div> <p>Common, where is that coming from? Seriously? On Class? On Object? In this case, this is <a href="https://github.com/pluginaweek/state_machine/blob/159bd964e7a7435d92edca4a7dfc458598a6234b/lib/state_machine/core_ext/class/state_machine.rb">Class</a>.</p> <p>Please, please, don&#39;t do this. Thanks!</p> Sun, 30 Mar 2014 12:00:00 +0000 http://jipiboily.com/hey-rubygems-do-not-include-your-stuff-implicitly-and-don-t-class_eval-class http://jipiboily.com/hey-rubygems-do-not-include-your-stuff-implicitly-and-don-t-class_eval-class ruby rant From zero to fully working CI server in less than 10 minutes with Drone & Docker <p>What is <a href="https://github.com/drone/drone">Drone</a>? The official description is: &quot;<em>Drone is a Continuous Integration platform built on Docker</em>&quot;.</p> <p>What is <a href="https://www.docker.io/">Docker</a>? Again, official description is :&quot;<em>Docker is an open-source project to easily create lightweight, portable, self-sufficient containers from any application</em>&quot;.</p> <p>10 minutes. This is all you need. In fact, there is an extra buffer in those 10 minutes to get your configuration working.</p> <p>10 minutes is by order of magnitude less time than it would take you to get a Jenkins server up &amp; running. I have never been a fan of Jenkins, and probably won&#39;t ever be, but let&#39;s keep this for another post, maybe.</p> <h2>Requirements</h2> <p>We will assume that you have a Ubuntu 13.04 (64 bit) server with a routable IP or address. On Digital Ocean, which I love (<a href="https://www.digitalocean.com/?refcode=9b3537dd733f">referral here, you get $10 of free credits...thanks!</a>), you can even have a VPS pre-built with Docker, 0.8 as of time of writing.</p> <p>You can also use a Ubuntu 12.04 64 bit box in theory for Drone.</p> <p>Your application needs to be hosted on GitHub. BitBucket coming soon apparently, but for now, this works only with GitHub which is fine by me. I love GitHub.</p> <h2>Step 0: install Docker (optional, skip if Docker is already installed)</h2> <p>On your Ubuntu machine, run this:</p> <div class="highlight"><pre><code class="language-bash" data-lang="bash">curl -s https://get.docker.io/ubuntu/ <span class="p">|</span> sudo sh </code></pre></div> <p>You can verify the installation with:</p> <div class="highlight"><pre><code class="language-bash" data-lang="bash">sudo docker run -i -t ubuntu /bin/bash </code></pre></div> <h2>Step 1: install Drone</h2> <p>This is very simple to install!</p> <p>You gotta do:</p> <div class="highlight"><pre><code class="language-bash" data-lang="bash">wget http://downloads.drone.io/latest/drone.deb sudo dpkg -i drone.deb </code></pre></div> <p>The README also adds <code>sudo start drone</code> but it was already started for me.</p> <p>To finish the installation, navigate to <code>http://my-server-ip-or-addr:80/install</code> and follow the steps in the wizard (account creation). Once logged in, keep that browser tab open.</p> <h2>Step 2: Register a new application on GitHub</h2> <p>You now have Drone up and running, but we need to configure GitHub access so that it can setup hooks to build your code after code push or pull requests. First step for that is to register a new application on GitHub. <a href="https://github.com/settings/applications/new">It is done right here</a>.</p> <ul> <li>Pick up a name you, it could be &quot;my Drone server&quot; or whatever makes sense to you</li> <li>Set the homepage URL to <code>http://my-server-ip-or-addr/</code></li> <li>The description is up to you, just like the name</li> <li>The authorization callback URL should be set to <code>http://my-server-ip-or-addr/auth/login/github</code></li> </ul> <h2>Step 3: get your GitHub client ID &amp; secret configured in Drone</h2> <p>After the registering your new app on GitHub, you were given a client ID and secret, copy them in the &quot;GitHub OAuth Consumer Key and Secret&quot; section of <code>http://my-server-ip-or-addr/account/admin/settings</code></p> <h2>Step 4: link your project</h2> <p>Click on the &quot;New Repository&quot; button (which will get you to <code>http://my-server-ip-or-addr/new/github.com</code>), click &quot;Link Now&quot;, accept and then once on the &quot;Repository Setup&quot; page of Drone, you get to fill the repository details (GitHub owner + repository name).</p> <p>Boom! Your project is almost ready to be built. You need only one final step now...</p> <h2>Step 5: configure your .drone.yml</h2> <p>The <code>.drone.yml</code> file is the configuration file for the build steps, services, notifications, etc.</p> <p>Here is a simple example for a Ruby on Rails project:</p> <div class="highlight"><pre><code class="language-yaml" data-lang="yaml"><span class="l-Scalar-Plain">image</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">ruby2.0.0</span> <span class="l-Scalar-Plain">script</span><span class="p-Indicator">:</span> <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">cp config/database.drone.yml config/database.yml</span> <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">bundle install</span> <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">psql -c &#39;create database test;&#39; -U postgres -h 127.0.0.1</span> <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">bundle exec rake db:schema:load</span> <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">bundle exec rspec spec</span> <span class="l-Scalar-Plain">services</span><span class="p-Indicator">:</span> <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">postgres</span> <span class="l-Scalar-Plain">notify</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">email</span><span class="p-Indicator">:</span> <span class="l-Scalar-Plain">recipients</span><span class="p-Indicator">:</span> <span class="p-Indicator">-</span> <span class="l-Scalar-Plain">email@example.com</span> </code></pre></div> <p>You are wondering what that database.drone.yml file contains? <a href="https://gist.github.com/jipiboily/0cad2550be91f5c9b5d9">See this gist.</a></p> <p>There is a variety of images for Go, Python, Haskell, PHP, Scala, Node, etc. Drone provides us with <a href="https://github.com/drone/drone#images">official images</a> but you are not restricted to only those.</p> <p><a href="https://github.com/drone/drone#databases">There is also a bunch of services available to you.</a></p> <p>All the details on how to configure your <code>.drone.yml</code> file can be found in the <a href="https://github.com/drone/drone#builds">README</a> and <a href="http://drone.io">drone.io</a>&#39;s <a href="http://docs.drone.io/">documentation</a>.</p> <p>When you are done, commit, push and watch the build. Rinse &amp; repeat until your <code>.drone.yml</code> is working just fine.</p> <p>For your information, I noticed that the first build takes a few minutes.</p> <h2>Extra, extra!</h2> <p>Here a few things that you might want to consider that Drone offers you:</p> <ul> <li>Email notifications (SMTP settings at the bottom of <code>http://my-server-ip-or-addr/account/admin/settings</code>)</li> <li>SSL is available to you and you should really consider it (at the top of <code>http://my-server-ip-or-addr/account/admin/settings</code>)</li> <li>HipChat notifications</li> <li>Continuous deployment is also available to you</li> </ul> <h2>Conclusion</h2> <p>That&#39;s it, it just works. Should you use that instead of Jenkins, Codeship or other hosted CI as a Service? It&#39;s up to you. This project was just publicly released a week ago so I am not sure that I would use that for my job&#39;s code just yet, but I will pay close attention to this.</p> <p>Let me know if you like it or not!</p> <p>If you love Docker and Heroku-like PaaS, you might also be interested by <a href="http://jipiboily.com/2013/install-dokku-postgresql-with-docker-for-your-rails-app-or-whatever-else-almost">my post about getting Dokku (your very own Heroku-like setup) installed</a>.</p> Thu, 13 Feb 2014 12:00:00 +0000 http://jipiboily.com/2014/from-zero-to-fully-working-ci-server-in-less-than-10-minutes-with-drone-docker http://jipiboily.com/2014/from-zero-to-fully-working-ci-server-in-less-than-10-minutes-with-drone-docker docker drone