Posts

How to Communicate Your Process Visually using BPMN as Code

When you have multiple participants in a process, and we often do, you realize that you're dealing with a lot of miscommunication / misalignment issues. It's so hard to remember who was doing what and when, furthermore it's even harder to make some optimization in the process itself as you lose the control over it.  Besides you'll need to group all the participants together for them tell their opinions. Processes are long and complex, but they're there even if you don't formalize them. So, why don't we find a way to approach it in an easy way? First thing each of us would do in such a situation is drawing some boxes and lines, a.k.a. diagrams. Today, we're going to talk about ways of drawing some diagrams, in a comprehensive yet simple way. Business Process Model and Notation (BPMN) BPMN diagram is like Flowchart , but the tasks (activities) are grouped by the participants. It can be drawn / read by both business or technical people as the main purpose i

Linode, Firewall, Cloudflare Full (Strict) with Terraform Cloud

Image
You built your application and now looking for a way to deploy it with a managed security? You'd like to have a simple yet powerful enough solution that can extend later on? We have an example web server setup in this article that provides you that. At KelebekLabs, whenever we choose to go with a basic server setup, not PaaS or Kubernetes, we follow these principles. Cloudflare Application Security  gives us a lot of services for free , such as DDoS protection, managing bad bots, rate limiting, free SSL certificate and many others. What we need to do is to make sure all the connections to our servers are going through Cloudflare and only . We're going to configure a firewall at our server provider side to make sure we only allow connection from Cloudflare  so that the people who knows our IP address won't be able to bypass our security. You can think this as almost hiding your servers from the internet as Cloudflare will be the only door to your servers. In our example, we

Load Testing with Ruby-JMeter

Image
You're ready for your product's launch, you'd like to show your customers finally there's a solution for their pain. You expect 1000 people using your service per hour, you made all the calculations and somehow you're confident. But, are you? Load Testing is here to simulate the traffic, 1000 people using your service per hour, and increase your confidence on launch day(and after). The story for FolderCode, a temporary file uploading service, was exactly like above, and just to show how it was addressed in its backlog, see the picture below. Designing your JMeter Test Plan JMeter is a well-known tool for load or stress testing, it basically sends requests to your application within the given time, according to the behaviour plan you provided. The plans are designed to be detailedly configurable and focused on load-testing jargon. That makes the JMeter a comprehensive solution, however makes it a bit hard to understand & focus on the well written tests. Here com

Using Notion as a Content Management System (CMS) for your applications

Image
Recently while developing GarajApp, a car magazine app, we had a need to use a CMS to add content such as News, Campaigns and static pages like Guides. We considered several options like Strapi, Contentful or even implementing a simple enough markdown editor with WYSIWYG editor. Choosing the right CMS Founder of GarajApp tried using Strapi earlier and it ended up a maintenance burden with updates, errors, and not-so-easy development flow. We needed something simple enough, yet production ready. We just needed to serve some content from our database to the mobile app, how hard it could be? We were leaning towards implementing a very simple page with a good WYSIWYG editor, perhaps with markdown support, that simply retrieves a page record and updates when we click save. It really looked easy but we had some concerns like adding a login, uploading the photos, managing the pages etc. Ok, so it wasn't so easy, then should we go with a full-scale content management system that supports a

Finding Spikes in Your Plans

Image
Spikes are for research, design, investigation, exploration . The purpose is to gain necessary knowledge to better understand a task and to work on that. Word definition The word spike comes from rock climbing activities. While climbing, we might stop to force a spike into the rock face, which is not actual climbing but by doing this we are making sure that future climbing will be smooth and easy.  Spikes as the Solution Problem: We have a lot of uncertainties in our plans It's demotivating when we're doing our tasks and we don't even understand why we're demotivated before doing it We can't see the risks earlier, we can't say how long something will take We don't know if we should spend time on something, what happens if we won't need it at the end? Solution: Let's use Spikes! We do the initial research early and our expectation is actually to "Learn" and "Understand" before we "Do" something Spikes allow us

Auth0, Hasura, Social Media Login

Image
We all want a super simple login and sign up system, so that our customers can become our members in a second and keep logging in without any hassle. Today we're going to talk about how to do it in the projects when we're using Hasura and Auth0 . Setting Up a Table in Hasura First we need to have a users table in our Hasura, our unique key on email helps our users to login with different providers to the same account. Auth0 Configuration There's not much to add except following any Quickstart , I prefer disabling email&password login and only allowing login via Google and Apple (because for our case it was an iOS project). It gives a really simple experience to our customers. Auth0 Rule for Syncing Users to Hasura This is the most important part, it should be added as a Rule under Auth Pipeline. Whenever a successful login happens at Auth0 end, this code below runs. This code communicates with our Hasura via API and injects the just logged in user to our table that we