I already mentioned Cap Rate in this other post as a comparative metric for Cash-on-Cash. As a reminder, the formula for the Cap Rate is: $$ Cap \space Rate = \frac{Net \space Operating \space Income \space (NOI)}{Property \space Price} $$ This is another handy metric that allows you to answer the question “How good is this property independent of my financing?”, or putting it in a…
I’ve been wanting to dive deep into better understanding the world of real estate investing taking a more analytical approach. Here in Spain, despite the housing crisis that we are going through, real estate or “el ladrillo 🧱” as we call it, remains the number one asset and generally the most popular of all when it comes to parking our money. It is ingrained in our common…
There are many variations of this sentence I hear when talking with people about getting a mortage: At first you’re paying mostly interest but over time you pay less interest and more goes to the house. But I never really stopped to understand what does it mean exactly. Enter the French Loan Amortization System. What is this? When you get a mortage loan (or any loan) with a fixed interest…
What is it? The Discounted Cash Flow valuation method is a way to determine the intrinsic value of a startup based on its expected future cash flows. The idea behind the DCF method is that the value of an asset or business is the sum of all of its future cash flows, discounted back to their present value (so future earnings are worth less today than in the future). It can be applied for both…
What is it? The Liquidation Value valuation method shares some similarities with the Book Value method, but the way they arrive at a final valuation is fairly different. The fundamental difference between the two methods is: The Book value is calculated by subtracting the total liabilities from the total assets. Book Value = Total assets (tangible + intangible) - Total liabilities Thus the Book…
What is it? In the public and profitable companies universe, the book value of an asset represents the price as purchased in the balance sheet with it’s accumulated depreciation subtracted. In the case of a whole company, it represents the total sum of assets, tangible (machinery, real estate, materials) and intangible (patents, copyrights, brand value, network) less the liabilities…
What is it? The Gross Profit x Competitor’s Multiple method is based on a simple formula: Gross Profit (i.e. Last 12 months) x Competitor's Multiple It is thus evident that this method is to be applied to startups that have already conquered the no-revenue threshold and are growing at a healthy pace. The idea behind this simple formula is to use the Gross Profit magnitude as a solid…
What is it? The 5x Your Raise valuation method might be one of the simplest ones to understand, almost feels tongue-in-cheek, because it leaps over any quantitative or qualitative methods to evaluate the startup and it simply bases itself in a simple assumption: Most investors whant to see the valuation for their money representing around 20%-25% of the post-money valuation So for any particular…
What is it The First Chicago valuation method differs from other methods I’ve listed up until now, like Scorecard, Berkus or Venture Capital, in the fact that not only qualitative analysis come into play, but additional financial projection is needed to implement it. While other methods are fundamentally pre-revenue and rely more on market analysis, comparison with other startups or risk…
What is it? The last one of the pre-money, pre-revenue startup valuation methods I’ve been covering, the Venture Capital method is the preferred method for VCs all around (that’s pretty much from where it got the name). Deal sourcing entails a long process of discovery and analysis of potential startups to incorporate to a VC portfolio. When it comes to pre-revenue startups there is…
This past Saturday 17th September I had the chance of assisting to the Nosday 2022 edition in Santiago de Compostela, Galicia, Spain. It’s been around 6 months since I came to live back to my hometown in Galicia after so long living in Belgium. After some time here I started connecting back to old university classmates. Some I contacted directly, some I just stumbled upon in the street, it…
What is it? Still, amongst the pre-money, pre-revenue startup valuation methods such as the Scorecard or Berkus methods, falls the Risk Factor Summation valuation method. It is a valuation method that emphasizes the risk associated with creating a startup in a given industry and location. Much like Scorecard, the Risk Factor Summation method uses a base value extracted from averaging out…
What is it? By using the Valuation-by-Stage, we grok the possible valuation of a startup by pondering the risk that is still present in the current stage of a startup. The further a company is in their development, the (theoretically) less possible disastrous outcomes are prone to materialize. It is a “rule-of-thumb” approach that can be used by assigning a valuation range to each…
What is it? Quite straightforward, the Cost-to-Duplicate approach to value startups focuses on the costs & expenses that took to create the startup. It measures how much it would cost to recreate the company from scratch. The idea behind it is that a potential investor wouldn’t allow a higher valuation than the aggregate sum of the expenses that took the company to get to that point. This is…
What is it? The Berkus method is a pre-revenue valuation approach based solely in qualitative methods, much like the Scorecard Valuation Method discussed before. Few startups manage to meet their financial projections especially in very early stages, so valuation approaches like the Berkus method is a sound way to provide a valuation when the economic metrics are still not solid, or enough, to…
What is it The scorecard valuation method is a technique formulated by Bill Payne, a US angel investor in 2001 to approximate the valuation of pre-revenue startups for possible investment rounds. It is based purely on qualitative methods since at that stage of the life of the startup it doesn’t have enough financial data to make economic projections. How it works The scorecard valuation…
With Twilio Conversations SDK 2.0 release there is a new way of creating the client and setting up the event handlers. As stated in the documentation and contrary to previous versions, when the client is created in order to guarantee it has been properly initialized we must wait for the stateChanged event to fire and check the passed state to verify the initialization was completed: import {…
Introduction Going from being an employee my whole professional career to cofounding TheGoodPsy in 2020 meant transitioning from focusing solely on the responsibilities directly pegged to my software engineering role to a whole slew of business concepts I needed to get acquainted with. In Spanish we have the expression Por la cuenta que me trae, which could roughly be translated to because now you…
Recently in TheGoodPsy we experienced an uptick in the number of signups & concurrent users. This is generally a good thing, an increase in traffic means that a project is gaining traction (or a DDoS attack but we surely hope it wasn’t that and those kind of attacks would generate way more traffic than the numbers we were experiencing). Our backend is in node.js and we deploy in the AWS…
For convenience, Psychologists in TheGoodPsy are able to connect to their Google Calendar to see their events along with the appointments local to the platform in order to prevent clashes between the two. It is quite easy to add an appointment with a patient in one calendar and propose an appointment in the other without noticing. Google Identity Services became the new authentication flow…
There are multiple places where we load data asynchronously in TheGoodPsy, so we use the ReactLoading package to show a spinner while the data is being downloaded and processed in the frontend. There is a common block of code that gets repeated: {loading ? ( <ReactLoading className='chat-loader' type='spin' color={COLOR} /> ) : <>whatever content here</>} Sometimes the loader needs to be wrapped…
Over the course of TheGoodPsy’s life, there have been countless changes. In order to verify assumptions, we’ve tried different marketing strategies, UI changes, user flow tweaks, and anything to verify what works and what doesn’t when it comes to user acquisition and retention. We started out using a simple WordPress to test out the idea and add personalized logic with…
A basic user flow in TheGoodPsy is to allow patients to book appointments directly from the chat. In order to do so, we have a Calendar component inside the application that wraps a FullCalendar component and extends its functionality with our custom logic. We mainly use the day view where the patient has a glimpse of the slots available with their psychologist 24 hours from the current moment.…
Choose the hacky-unelegant-put-together solution before the good, well-thought one. There are plenty of times where there’s a need for a feature to be shipped, as we’re receiving pressure from stakeholders to have it available as soon as possible, or we have a deadline for an integration with a partner and they make a last minute change that in their eyes is “just this small tweak”. A good…
It becomes harder to keep your technical skills up to date. As the main technical person of the company, it can be a contradictory statement. Since I have to wear many hats, even if those hats are limited to the technical domain, there’s little time I can devote to experimenting. Learning a new language or framework consumes time that could be better employed in improving the current state…
One can’t expect people to have the same level of investment as you have in your own startup. It might happen, but one cannot assume. There are multiple dimensions to this. It’s not realistic for an employee (less a freelancer) to have the same level of dedication and nurture you exert. A certain level of motivation can be instilled in a person, and that varies depending on the kind of work,…
As a developer, your work is structured, at least most of the time. A regular working day used to start by arriving at the office (remember?), getting your coffee, checking some emails, doing your daily standup where you get a grasp of what’s going on for everyone during that day, you expose your work as well: what did I do yesterday, what am I doing today, what are my blockers. Then you sit…
Normally I would be working on a non-tech related task, such as writing an entry in Notion for a new feature for a developer to implement, or dealing with the back & forth of expectations when hiring a freelancer for a given task, and it strikes me: “I could write a nice blog post about the lesson I’m taking out of this”. So I jot the learning down, try to add a couple more…
Another year another corny-ass new year’s resolutions post! It seems to make no sense to state the word “another” in the first sentence, but the crushing reality is that for the last two years I sought out to write my new year’s resolutions blog post around 28th December and by the 10th January of the next year my best intentions already faded and those posts were never…
For React applications I often use Redux as my state management library of choice because of its simplicity, stability, added plugins, and predictability. I find it easier to reason about data flow if I imagine it as a set of snapshots that are computed from the previous one depending on the actions the user or the business logic takes. That notion of immutability has had a beneficial impact on…
Introduction Recently this week I was discussing with a friend whether Wordpress could be a viable choice for a web application over a custom solution in order to have a working MVP as fast as possible. This app would include some more complex features such as in-app video chat & messaging. Ideally the huge amount of available plugins combined with the ease of installation and minimal code would…
Dubbel? Tripel? Quadrupel? Don’t belgians have enough by having over 1600 different beers to confuse and marvel us? What are those denominations we constantly hear the moment we step foot in this lovely country? There’s a lot of folktales around the specific origin of such terms with not much agreement. Some say it’s due to being double, triple or quadruple fermentation, some…
Such a symbol of belgian tradition must not remain unexplained. What is indeed, a Trappist beer? Trappist beers constitute the flagship or belgian beer. The name references a type of beer brewed by a given catholic order of monks denominated as Trappist (or officially known as Order of Cistercians of the Strict Observance). They stand as a religious order of cloistered monks that branched from the…
For the last 8 months I have been working at Beer Planet and I took over the task of improving the shop’s online presence in Instagram and Facebook. I am still thinking of a comfortable way of using Twitter and Linkedin and ads for the matter, but that’s a future endeavor. Every once in a while I redact informational posts I might find interesting based on common questions many clients…
After reading Jezen Thomas’ cool blog post about Showing Weather in Tmux, I tried it in my computer and loved the result after minor tweaks: From that moment it also occurred to me that next to the weather, date and time I would love to have a greeting sentence in my local language, galician, to bring back the warm and fuzzy feeling of being at home after being away already for five years.
Introduction After being quite disconnected from the technology world for months and pretty much limiting my interactions to my working schedule, I decided to go back into setting up my personal workstation with the minimal memory footprint and using as little privacy-invading technologies as possible. One step of this process meant setting up again my GPG keys to be used while signing my emails.…
It is the second time at work that I spent some minutes wondering why I was not properly receiving POST arguments in a view when testing it from django. Let’s have a little more context, imagine a very simple Django view where you want to print the value of a POST parameter in the console and return it. class MyView(views.APIView): def post(self, request): param = request.POST.get('param',…
Introduction Nowadays is not uncommon that web applications include full text search features. There are already well known solutions working out-of-the-box that provide the needed functionalities, such as ElasticSearch or Apache Solr. Having used ElasticSearch at work a couple of times I wondered how it achieved fast searches and what mechanism empowered that, so reading up a little on the topic,…
Introduction Besides the day-by-day work, I like to always have an ongoing side project to keep my skills sharp. These don’t have to be necessarily useful or directly linked to my current job, but serve as a distraction to throw some spare hours into. Normally those projects have a bunch of common traits: They are purposely small. They focus on a single defined task. I try to add at least…
Introduction I never quite got what was the requestAnimationFrame function I kept seeing while reading web articles since I never really dove deep in graphics in the browser. Still, I think it will be a good exercise and reminder for the future to write a small article to structure and understand the basic concept and usage of the function. Overview For the human brain to be fooled into thinking…
Every time a new year passes by I feel a mix of two reactions: on one side, my first impression is always of a slight disappointment, as if I had not accomplished anything worth mentioning or hadn’t made much more of a change compared to how I was when the year first started. Then, I try to keep a cold mind and start enumerating the nice, interesting things I have done and learned, as well…
Introduction As part of the process of working in node.js applications, developers usually use additional libraries and frameworks to ease and speed their development time, and more than often the number of libraries they rely upon is quite high. It is also not uncommon to need to modify any of those libraries to fix a bug, or fork them to add additional functionality required for the project they…
Problem I am currently working on an issue in a very old Ember.js application (version 1.13.0 of the ember-cli). After performing the regular ritual: npm install; bower install; ember s --proxy <proxy> I was presented with the application’s login screen, but what was my surprise that after introducing a valid set of credentials, the next http call invariably failed. Client -> POST /sessions…
Overview I’ve had the intention of writing an article about PGP for a long time, but every time I started reading about the topic I almost immediately brushed the idea off. I believe this is spurred by the fact that understanding it is not quite simple. Just as monads, once you get the hang of it it becomes evident and you automatically lose the ability to communicate the concept to others.
Problem It’s been a while since I don’t write any posts, so I thought that even though the idea might be initially quite silly, it will help me to kickoff again the habit by writing about a small problem I encountered the other day. I was developing a very simple microservice that would receive a GET request with two parameters, issue a SPARQL query to a Virtuoso store and then,…
While working in the functionality for getting a docker-compose path from the cursor position, I realized at some point I was writing constantly code like this: let first_result = func_call1(val); let second_result = func_call2(first_result); let third_result = func_call3(second_result); ...etc... This is not necessarily bad, it improves code readability and helps to reason about the flow of…
How do you handle exceptions in express.js? If you’re anything like me, you start coding your application with your best intentions and favor readability, simplicity, and separation of concerns. At the beginning I tend to split the app with a MVC structure featuring routes, middleware, controllers and I make use of services to group related pieces of functionality, trying to follow best…
In a previous article I explained our approach at work to deploy an Ember.js application in an nginx server running on docker. Today I had to integrate an instance of that application to communicate with another microservice using WebSockets. All this services run using a docker-compose script like this one (it is a very simplified version): docker-compose.yml: frontend: image:…
In the Big Data Europe framework, the Big Data Integrator is an application that can be thought as a “starter kit” to start working and implementing big data pipelines in your process. It is the minimal standalone system so you can create a project with multiple docker containers, upload it & make it run using a nice GUI. Architecture You can think of the Big Data Integrator as a…
Introduction Recently I faced a problem where I had two nginx servers connected sequentially, the first one acted as a proxy (let’s call it nginx-proxy) between the frontend and another nginx server (let’s call it nginx-server). All services were running in docker containers using the docker-compose script. The nginx-proxy service would route (or dispatch, however you want to call it)…