<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title><![CDATA[Glints Tech]]></title><description><![CDATA[All about tech at Glints and more]]></description><link>https://tech.glints.com/</link><image><url>https://tech.glints.com/favicon.png</url><title>Glints Tech</title><link>https://tech.glints.com/</link></image><generator>Ghost 4.48</generator><lastBuildDate>Sun, 17 May 2026 19:26:42 GMT</lastBuildDate><atom:link href="https://tech.glints.com/rss/" rel="self" type="application/rss+xml"/><ttl>60</ttl><item><title><![CDATA[Security Roadmap, Strategies and Challenges]]></title><description><![CDATA[In this series, we will discuss developing a security roadmap, which usually happens after asking some relevant questions. It's hard to make a good roadmap if you don't know what you're aiming for. I'll also talk about what good security looks like. Let's start from where we are and work our way up.]]></description><link>https://tech.glints.com/security-strategies-and-challenges/</link><guid isPermaLink="false">62f3bfd9bf8ca300011ee1f6</guid><category><![CDATA[Engineering]]></category><category><![CDATA[security]]></category><dc:creator><![CDATA[Avinash]]></dc:creator><pubDate>Thu, 11 Aug 2022 04:43:14 GMT</pubDate><media:content url="https://tech.glints.com/content/images/2022/08/d-1-8.png" medium="image"/><content:encoded><![CDATA[<!--kg-card-begin: markdown--><img src="https://tech.glints.com/content/images/2022/08/d-1-8.png" alt="Security Roadmap, Strategies and Challenges"><p><em>It&apos;s hard to develop a cybersecurity roadmap since several elements need to be considered, such as compliance and risk posture, policy framework, detection and response capabilities, resilience and recovery after a breach.</em></p>
<p>Let&apos;s discuss what executives typically ask...</p>
<blockquote>
<p>Are we Compliant?</p>
</blockquote>
<p>You can be compliant, but that doesn&apos;t mean you&apos;re secure, but you can get there and there&apos;s a lot in compliance requirements and standards etc. that&apos;ll help you out. In the end, it won&apos;t make a lot of difference unless you live and breathe it.</p>
<blockquote>
<p>Are we Secure?</p>
</blockquote>
<p>In the same token, you can be compliant and still be secure, and we see that quite a bit of the time, when people have very good security practices and operations in their organization, but they&apos;re bad at documenting stuff, so from a compliance standpoint, they won&apos;t be compliant but still secure.</p>
<blockquote>
<p>How much progress did we make in making us more secure?</p>
</blockquote>
<p>How did we do compared to last year? That&apos;s a tough one since the landscape in which we worked last year was different. As you know, the attacks that we saw last year might have been a few, but now we may see attacks that are vastly different from what we saw in the past. Information Security is a dynamic discipline, which means that everything changes and everything stays the same, so all the processes, procedures, and things we do from an operational perspective don&apos;t really change that much over time. However, attacks, how we respond to them, do change every day, so it&apos;s a bit of both.</p>
<p>In the last 12 months if you didn&apos;t change your security effort, you were doing a great job dealing with the types of attacks you were seeing, but if you&apos;re still doing the same thing, then there&apos;s a fair chance that the attacks have outpaced you.</p>
<blockquote>
<p>What would we do in case of a breach?</p>
</blockquote>
<p>This is a great question because they&apos;re trying to figure out if you&apos;re prepared for an attack since their awareness has been raised. Whenever there&apos;s an incident, we see people like you asking this question.</p>
<p>When executives ask all these questions above, there&apos;s actually a subtext to the questions that they&apos;re actually asking.</p>
<p><em>When they ask for &#x201C;Are we compliant?&#x201D; they&apos;re really asking...</em></p>
<ul>
<li>In order to achieve or exceed our goals, what standards must we meet?</li>
<li>Have we met them yet?</li>
<li>How are we doing? Do we continue to meet with them?</li>
</ul>
<p><em>On the similar footsteps &#x201C;Are you secure?&#x201D;</em></p>
<ul>
<li>What are the current risks and how well do we understand them?</li>
<li>Are we aware of our key assets?</li>
<li>What are we doing to protect those key assets?</li>
</ul>
<p>That&#x2019;s the question really being asked!!</p>
<p><em>&#x201C;How much progress did we make in making us more secure?&#x201D;</em></p>
<ul>
<li>Over the past year, what has changed?</li>
<li>What are we doing to meet these new challenges?</li>
<li>What are the areas where we need to improve?</li>
</ul>
<p><em>&#x201C;What would we do in case of a breach?&#x201D;</em></p>
<ul>
<li>How have we handled incidents that have actually occurred?</li>
<li>What did we learn and how are we adapting?</li>
<li>Were there any changes we made to ensure we met the challenge?</li>
</ul>
<p>In essence, that&apos;s what the executive is asking when he&apos;s asking any one of these four questions, but if you ask them on their own they can be difficult to understand, but if you combine them, they give you a clearer picture of where the organization fits into the security structure.</p>
<center><img src="https://tech.glints.com/content/images/2022/08/d-2-1.png" height="50%" width="50%" alt="Security Roadmap, Strategies and Challenges"></center>
<h2 id="what-does-good-security-look-like">What does good security look like?</h2>
<blockquote>
<p>Good security needs to be proactive</p>
</blockquote>
<p>In a lot of companies, security teams are purely reactive, they react to new features and projects request for assessment. We&apos;ve all probably run into the situation where someone comes up to your desk just before the weekend and says &#x201C;hey, this project needs to go live in a few hours, can you please approve it? &#x1F630;&#x201D;. Our security team needs to change from a reactive to a proactive one.</p>
<blockquote>
<p>Security should not be Obstructive.</p>
</blockquote>
<p>Often, in-your-face security generates obstacles to the business, so our role as security team is to ensure that the business is able to do what it needs to do in a secure manner. Nobody has ever thanked a security team for saying &quot;No&quot; constantly. Obviously there are times when saying No is the right thing to do because there are plenty of things from a security perspective that are bad ideas, but ideally you&apos;ll have a security team that can actually contribute to the success of the organization.</p>
<blockquote>
<p>Security Coverage is one of the main pillars.</p>
</blockquote>
<p>The right coverage needs to happen,with tools and solutions that are in place, we let it run and then in many organizations it is just there for the rest of the year. We come across systems that after it&apos;s been implemented it&apos;s never been touched, well it does what it&apos;s supposed to do but they do need kind of a little bit of love.</p>
<blockquote>
<p>Implement technology/controls correctly</p>
</blockquote>
<p>If your organization is at the point where you have firewalls and anti-viruses - for instance, if you have firewalls, then your next purchase won&apos;t be one that grabs everything and analyzes it all - there is probably a technology use between the two that you will want to consider.</p>
<blockquote>
<p>Minimize the Risk</p>
</blockquote>
<p>There is a need for us to understand what the risks are. We need to understand what we will be able to do about these risks in order to minimize them as much as possible.</p>
<blockquote>
<p>Cost Effectiveness</p>
</blockquote>
<p>Security solutions must be cost-effective. If it is going to cost 2-3 times as much as the annual revenue of the company, it is probably not going to be of much use to the company.</p>
<blockquote>
<p>Responding to current threats</p>
</blockquote>
<p>Having an understanding of what&apos;s going on in the world right now will give your security team a competitive edge towards proactiveness.</p>
<blockquote>
<p>Repeatable process</p>
</blockquote>
<p>You must be able to repeat whatever you do. If you discover an XSS, you may be able to find the same issue anywhere with the help of tools and scripts sooner, so you can focus on more interesting things rather than sweating over finding the same issue on different instances a week later.</p>
<blockquote>
<p>Detailed documentation</p>
</blockquote>
<p>Documentation is important and we all kind of stink at it a little bit. but it&apos;s okay to start small and then build slowly.</p>
<center><img src="https://tech.glints.com/content/images/2022/08/d-3-1.png" height="50%" width="50%" alt="Security Roadmap, Strategies and Challenges"></center>
<h2 id="what-does-it-take-to-get-good-security">What does it take to get good security?</h2>
<p>In an organization, four main functions must take place:</p>
<ul>
<li>
<p>Make sure you&apos;re taking some sort of <strong>Risk and Compliance/Governance</strong> to help identify what you need to protect. To do this, you need to know your assets, your risks, your controls, your metrics, your policies, etc., all documented in a rinse, lather, repeat manner.</p>
</li>
<li>
<p>There is typically some sort of <strong>Security Architecture and Design</strong> component within an organization, this is a team that liaises with the business more closely to understand what the requirements are, what the impacts are, how I will protect it and how will I know it&apos;s being done well. We can&apos;t emphasize enough how important it is to get into a project earlier. Instead of finding out at the end that someone has put a database somewhere in the internet and you&apos;re connecting to it over HTTP. Or, code has been downloaded from a Russian website and embedded into your core application, it would be nice to find out at the beginning rather than at the end.</p>
</li>
<li>
<p>The <strong>Security Administration</strong> function is all about adding users, giving them access, taking it away, and doing some reviews. In order to succeed in security administration, you typically need to have some defined processes, regular review, and maintenance procedures.</p>
</li>
<li>
<p><strong>Security operations</strong> role is to detect,respond and identify any threats. The goal here is to gain visibility on network servers and endpoints, and make sure that the tools that cover what you&apos;re supposed to cover are configured appropriately. Respond to threats, manage them, and analyze them.</p>
</li>
</ul>
<p>Skills and services for all of these requirements are not necessarily confined to your organization, and it&apos;s fine to get someone else to assist you. You don&apos;t necessarily have to run a security business but some of these functions must be performed and they must be handled by someone, which you can outsource easily.</p>
<center><img src="https://tech.glints.com/content/images/2022/08/d-4-2.png" height="50%" width="50%" alt="Security Roadmap, Strategies and Challenges"></center>
<h2 id="where-are-we-in-terms-of-security-maturity">Where are we in terms of security maturity?</h2>
<p>There&apos;s different ways of doing it and it&#x2019;s obviously a very high level and to be honest the more immature you are the easier this process..</p>
<ul>
<li>
<p><strong>Non-Existence</strong>:  we have a Firewall we have AntiVirus if that&apos;s the answer to the question of what are you doing for information security then you&apos;re probably going to be in that non-existent. However, that makes life easy because your roadmap can take in whatever direction you want to be with minimal friction from the stakeholders.</p>
</li>
<li>
<p><strong>Immature:</strong> In general, you will have a Security Administration function and you may have some policies, or you might not have any policies at all but people just know what to do. People seem to know what to do quite naturally when it comes to this. You might have some technical controls beyond your firewall or your antivirus in place within the organization, you might do some threat management, we&apos;re still a fairly immature organization, there&apos;s no real strategy.</p>
</li>
<li>
<p><strong>Doing our best:</strong> In this case, the Security Admin function is pretty good, and you can add/remove users, modify policies, or even develop a little bit of a risk and compliance or security operations tool, these technical controls with some customization. In contrast to the default tools you bought on day one, these have actually had some thought and configuration assigned to them.</p>
</li>
<li>
<p><strong>Getting there:</strong> Everyone is aware of the Security Administration&apos;s policies. As part of security operations, you&apos;re getting some visibility into the network, you&apos;re having some logs and cloudtrail set up, and you&apos;re reviewing those logs. Your risk and compliance function is taking place throughout the year, and you&apos;re analyzing where you sit for the most significant risks. Getting involved in projects means you know it may not be at the end, maybe you&apos;re in the middle, but the objective is to get there as soon as possible.</p>
</li>
<li>
<p><strong>Mature:</strong> You start adding to get established and you&apos;ve got things documented. Security operations are improved on your visibility. The policies are in place and they&apos;re regularly being reviewed. The technical controls are in place.</p>
</li>
<li>
<p><strong>Very Mature Organization:</strong> You&apos;re doing everything you were doing before, but now that you have metrics, you can determine whether or not things are working as they should. Your security architecture is documented. You have invested resources in automating some administrative or operational tasks. You&apos;re reducing the time it takes you to respond to incidents and noticing them more often. Perhaps you are evaluating the advanced tools deployed within your organization now that the policies are in place.</p>
</li>
</ul>
<p><em>The next post - &quot;part ii&quot; of this series will discuss ways to improve security and the roadmap.</em></p>
<p>&#x1F64F;</p>
<p>References:</p>
<ul>
<li><a href="https://www.mcafee.com/enterprise/en-us/assets/data-sheets/ds-strategic-security-roadmap-plan.pdf">McAfee</a></li>
<li><a href="https://purplesec.us/learn/cyber-security-strategy/">PurpleSec</a></li>
<li><a href="https://www.techtarget.com/searchsecurity/tip/How-to-develop-a-cybersecurity-strategy-Step-by-step-guide">TechTarget</a></li>
<li><a href="https://www.shearwater.com.au">Shearwater</a></li>
<li><a href="https://www.goodreads.com/book/show/49883665-tribe-of-hackers-security-leaders">Tribe of Hackers Security Leaders</a></li>
<li><a href="https://www.goodreads.com/book/show/23201316-cybersecurity-leadership">Cybersecurity Leadership</a></li>
<li><a href="https://www.goodreads.com/book/show/52431662-a-leader-s-guide-to-cybersecurity">A Leader&apos;s Guide to Cybersecurity</a></li>
</ul>
<p>This article is cross-posted from avinash&apos;s <a href="https://avicoder.me/2022/08/06/cybersecurity-strategies/">blog</a>.</p>
<!--kg-card-end: markdown-->]]></content:encoded></item><item><title><![CDATA[Fireside chat: From bootcamp to Glints]]></title><description><![CDATA[On today’s fireside chat, we have with us Robert Kolsek, a Full stack engineer for our Marketplace team. In this article, we’ll be talking about his experiences during the journey from being a German teacher to a bootcamp student to joining Glints as a software engineer.]]></description><link>https://tech.glints.com/fireside-chat-from-bootcamp-to-glints/</link><guid isPermaLink="false">61f91b38b2c3520001009748</guid><category><![CDATA[bootcamp]]></category><category><![CDATA[Engineering]]></category><category><![CDATA[Glints]]></category><category><![CDATA[Hiring]]></category><category><![CDATA[General Assembly]]></category><category><![CDATA[Bootcamp success]]></category><dc:creator><![CDATA[Shubham Padia]]></dc:creator><pubDate>Mon, 07 Feb 2022 03:39:53 GMT</pubDate><media:content url="https://tech.glints.com/content/images/2022/02/rob-1.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://tech.glints.com/content/images/2022/02/rob-1.jpg" alt="Fireside chat: From bootcamp to Glints"><p><strong>What was your career like before switching to tech?</strong></p><p>When I moved to Asia from Germany, my primary source of income was the German language. I&#x2019;ve worked as a translator, transcriber and language teacher for few years before making a switch.</p><p><strong>What made you think about a career switch to tech?</strong></p><p>Before switching to tech, I was working as a freelance German teacher in Singapore. Being a teacher was fun, but the job didn&#x2019;t really challenge me anymore. I was always teaching the beginner level of students and it being language teaching, the knowledge required to teach becomes fairly constant over time. The job didn&#x2019;t challenge me anymore.</p><p>Apart from job dissatisfaction, another factor that contributed to my decision was that with teaching, there was an income ceiling that I reached and I was looking for something new with growing responsibilities at home.</p><p>As to why I chose tech, I was always the computer kid of the block, burning CDs, building my own PC. I started building video game guide websites when I was 14-15 using HTML and inline CSS. This was pre-2000s, so I don&#x2019;t think stylesheets were a thing back then. I continued developing some Wordpress websites later on here and there e.g. for my Gym.</p><p><strong>How did you start your journey of a career switch?</strong></p><p>Around 2018 or 2019, I really took serious the idea of a career switch to tech. I started self studying with some Udemy courses and other resources like FreeCodeCamp. After about 6-9 months of self-study, I thought to myself, I really want to do this now.</p><p>I was looking up bootcamps and the teacher of my Udemy course was a bootcamp instructor for General Assembly in U.S and that&#x2019;s how I got to learn about General Assembly and I enrolled in their Singapore chapter for a 3 month Full time program</p><p><strong>What benefits you got after enrolling in a bootcamp vs self study from online courses?</strong></p><p>I think what really set apart bootcamp and self study from online courses was the intensity. If you&#x2019;re at home studying, you maybe watch 30 minutes or 1 hour of videos for the day and get done for the day. But with bootcamps, you&#x2019;re kind of forced to code more than 8+ hours per day. It helps put drastically more time into coding to hone my skills.</p><p>In addition to that, you have an actual class environment &#xA0;where other people are there physically (this was pre-covid) and if you have problems, there&#x2019;s people to help you. They guide you in your mental model in terms of approaching programming. Otherwise, you have to figure out all these things by yourself.</p><p><strong>What was the balance between theory and practice in the bootcamp?</strong></p><p>It&#x2019;s a good mix. There&#x2019;s theory sessions on premises for 5-6 hours with little exercises or mob/pair programming mixed in. After the class we have some homework exercises which was basically solidifying this work. In addition to that, we had a daily standup which helped us raise problems daily and get advice on solving them.</p><p>In parallel to that we had a project we were working on throughout the bootcamp with a total of 5 projects with one of them being a group project</p><p><strong>Taking Glints as a reference, what were some of unexpected differences b/w bootcamp and the real job?</strong></p><p>The first thing that really stood out to me was on the first step, the technical assignment. In the assignment project I had to deal with a data set of ~ 5000 rows, but in bootcamp projects, we dealt with I dunno - maybe 10 or 20 rows. Working with this huge dataset was like, wow, how to do that.</p><p>After joining, the codebase itself was overwhelming to me because it looked so gigantic compared to what we did in the bootcamp. With my bootcamp experience, it looked similar to what we learned, but since the size was so big in comparison, it was a different experience going through the codebase. I slowly figured those things out by some improvisation and help from my coworkers.</p><p>Another aspect that is not discussed really is the communication part of the job. We got together to discuss technical plans, details, product features and making plans for delivering those features. This was quite unexpected because I didn&#x2019;t hear in bootcamp and there weren&#x2019;t much resources on Google highlighting this aspect of collaborating with the team. Its the opposite of the stereotype of the typical programmer being alone, just doing their own thing. But I have to say, this kind of worked into my benefit since communication is one of my stronger suits.</p><p>Another surprising thing was the focus on error handling. In bootcamp, error handling was not a priority but at Glints, working on production applications, there was an increased focus on well defined errors.</p><p>One thing though that bootcamp helped a lot is the awareness of tools and what to search in the first place. Knowing that something like react dev tools exists makes a huge difference in understanding bigger codebases later on.</p><p><strong>What is your definition of success from a bootcamp program and the qualities needed to achieve this success?</strong></p><p>Taking the bootcamp as a means to gain independence in programming. I feel if you just sit in there and you expect the instructor to deliver everything and make you a good programmer, that would be an unrealistic expectation. The instructor can teach you all the concepts and everything, the syntax and the grammar for everything. In detail, but if you yourself, don&apos;t pick up your ass and like walk these steps, you will never become proficient.</p><p>At some point in the bootcamp, there&#x2019;s gonna be moments when you feel like banging your head on the table because of some things not working. The definition of success from the bootcamp would be the ability to rely on my knowledge and the ability to work through these challenges.</p><p>P.S. This blog post is a summarised version of a fireside chat type call between Shubham and Robert.</p>]]></content:encoded></item><item><title><![CDATA[Engineering Culture at Glints (as an Intern)]]></title><description><![CDATA[This post attempts to describe some of the cultural practices at Glints through the lens of a software engineering intern at Glints.]]></description><link>https://tech.glints.com/engineering-culture-at-glints-as-an-intern/</link><guid isPermaLink="false">6147f5c21f98e400011832d6</guid><category><![CDATA[Engineering]]></category><category><![CDATA[Startup]]></category><category><![CDATA[Glints]]></category><category><![CDATA[Remote work]]></category><dc:creator><![CDATA[Carey Lai]]></dc:creator><pubDate>Mon, 20 Sep 2021 02:56:03 GMT</pubDate><media:content url="https://tech.glints.com/content/images/2021/09/glints_tech_blog_engineering_culture.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://tech.glints.com/content/images/2021/09/glints_tech_blog_engineering_culture.jpg" alt="Engineering Culture at Glints (as an Intern)"><p>As an aspiring software engineer, I am always on the lookout for interesting opportunities that would help me build practical knowledge, cultivate good engineering habits and expand my wisdom on managing domain-specific burnouts. Here are the 3 practices that I was able to apply to my life after my 5-month internship at Glints.<br></p><p><strong>Extensive Use of Slack Emojis</strong></p><p>Even though my primary role as an SWE intern was to learn and contribute code, my favourite activity was actually choosing the right emojis to respond to various situations. Emojis are awesome because they allow us to express ourselves creatively and concisely. <br></p><p>At Glints, emojis were used extensively to communicate support, concern, and more. Custom emojis were even created to immortalise memories. I guess in a Covid-19 situation, emojis really help people to connect more deeply. For me, it brightens my day when I see colleagues choose their favourite emojis to welcome newcomers, lighten the mood, or even express dismay tactfully. <br></p><p>Sometimes, emojis were used in a more subtle manner, like through a simple &#x201C;ok&#x201D; or &#x201C;thank you&#x201D; which ended conversations on good terms. An emoji can&#x2019;t speak a thousand words, but it can certainly speak succinctly. It was pleasant to witness how emojis could brighten my day so I am excited to use emojis more mindfully in other areas of my life. <br></p><p><strong>Establishing Active Channels for Support</strong></p><p>Besides the use of emojis, I have benefited much from the active Slack channels established to facilitate communication between teams and allow engineers to seek help. These slack channels bridge gaps in understanding and foster a collaborative culture. </p><p>For instance, posting a challenging frontend bug on the #Frontend channel encourages engineers of various teams to share what they know on the same thread. This cross-team communication allows for engineers with knowledge previously exclusive to themselves to collectively arrive at a solution that 2 engineers could not achieve in a private message space. </p><p>When I was working on the upgrading of Styled Components on the Glints Job Marketplace, I learned much from discussions on the Frontend channel because engineers from other teams shared concerns specific to this task. Discussing approaches to the problem publicly saved me time and allowed me to resolve blockers quickly, while keeping various parties in the loop.<br></p><p><strong>Biweekly Engineering Sharing</strong></p><p>Engineering tech sharing is a biweekly practice meant to encourage engineers to share whatever they feel like sharing with their fellow engineers. </p><p>Such sessions included a Flutter crash course, a proposal of Kafka Stream Optimisation and an SEO introduction. This practice fosters a sense of curiosity and inspires engineers to try new things, be it recreationally or professionally. As an intern, I was also warmly encouraged to do a sharing - I gave a gentle introduction to Google Apps Scripting(GAS). Despite just delivering a high-level overview of what GAS could do, basic syntax and an illustration of small applications, I was pleasantly surprised when the security lead slacked me to clarify a GAS workflow he was implementing at Glints! </p><p>The practice of engineering tech sharing showed me that making time to share knowledge with your team could be an immensely helpful thing to your teammates so I&#x2019;d like to carry on this spirit in my school projects. &#xA0;	</p><p></p><p>The above engineering cultural practices at Glints were just some of the informal observations that stood out to me. As I continue my SWE journey by returning back to school, I feel better equipped with systems to organise learning, handle working relationships in my school projects and add life to my future workplace when I secure a full-time job.</p>]]></content:encoded></item><item><title><![CDATA[How Glints uses Unleash for A/B testing]]></title><description><![CDATA[An overview of how Glints uses Unleash to do A/B tests. ]]></description><link>https://tech.glints.com/how-glints-uses-unleash-for-a-b-testing/</link><guid isPermaLink="false">6114db261f98e40001183087</guid><category><![CDATA[Engineering]]></category><category><![CDATA[Glints]]></category><category><![CDATA[New Blog]]></category><category><![CDATA[Startup]]></category><category><![CDATA[Tech]]></category><category><![CDATA[Feature management]]></category><category><![CDATA[A/B testing]]></category><category><![CDATA[Unleash]]></category><dc:creator><![CDATA[Shubham Padia]]></dc:creator><pubDate>Fri, 10 Sep 2021 09:49:42 GMT</pubDate><media:content url="https://tech.glints.com/content/images/2021/09/unleash_pos.svg" medium="image"/><content:encoded><![CDATA[<img src="https://tech.glints.com/content/images/2021/09/unleash_pos.svg" alt="How Glints uses Unleash for A/B testing"><p>In the beginning of 2020, Glints was in need of an A/B testing platform for us to test out different variants of a feature and we settled on an open source solution - <a href="https://docs.getunleash.io/">Unleash</a>. We evaluated multiple platforms but decided to use unleash because of the following reasons:</p><ul><li> A simple UI for non-tech people to control the experiments</li><li>Language agnostic with client libraries in multiple languages</li><li>Actively maintained project (we started with Unleash v3 and now we are using Unleash v4 with significant improvement in terms of features)</li></ul><h3 id="what-is-unleash">What is Unleash?</h3><p>Unleash is an open-source feature management platform. It provides a great overview of all feature toggles/flags across all your applications and services.</p><h3 id="architecture-overview-">Architecture overview:</h3><figure class="kg-card kg-image-card"><img src="https://tech.glints.com/content/images/2021/09/Unleash-diagram--1-.png" class="kg-image" alt="How Glints uses Unleash for A/B testing" loading="lazy" width="1170" height="688" srcset="https://tech.glints.com/content/images/size/w600/2021/09/Unleash-diagram--1-.png 600w, https://tech.glints.com/content/images/size/w1000/2021/09/Unleash-diagram--1-.png 1000w, https://tech.glints.com/content/images/2021/09/Unleash-diagram--1-.png 1170w" sizes="(min-width: 720px) 720px"></figure><p>This is what our architecture with unleash looks like. We have the unleash server which is responsible for storing all the feature toggles, their strategies and their history along with all the unleash user info. </p><p>We do not directly access unleash via our front end clients. That would expose unnecessary information about the feature toggles that the user doesn&apos;t need to know e.g. which features have been disabled for them. The API server acts as a proxy between the front end clients and the unleash server. </p><p>The Glints API server connects to the unleash server to get the data of existing feature toggles. Using this data, the proxy endpoint gives a list of feature flags that have been enabled for the user along with the variant if it exists when requested by the client. Absence of a feature flag from the list should be perceived that the feature flag has been disabled for that user.</p><p>The API endpoint would return the feature flags based on the <a href="https://unleash.github.io/docs/unleash_context" rel="nofollow"><em>unleash-context</em></a> provided by the front end client.</p><h3 id="would-the-unleash-server-being-down-affect-my-application">Would the unleash server being down affect my application?</h3><p>Not at all. This is one of the things that we love about Unleash.</p><p>All of the Unleash SDKs (<a href="https://github.com/Unleash/unleash-client-node">unleash-client-node</a> in our case) do something called local evaluation. That means that only the information about a feature toggle is stored on the unleash server, but assigning a user to a variant A or a variant B happens via the SDK. This means that if your unleash server is down, your feature flags would still keep on working on the last known state without any updates possible to the existing state.</p><h3 id="does-unleash-come-with-built-in-tools-to-analyse-the-performance-of-each-variant-of-the-a-b-test">Does unleash come with built in tools to analyse the performance of each variant of the A/B test?</h3><p>No, we use <a href="https://amplitude.com/">Amplitude</a> at Glints to analyse how each of our variants in the tests are performing. We think its for the best since Unleash is a feature management platform and it does that 1 thing right instead of trying to dip its toes in multiple places. </p><p></p><p>Checkout <a href="https://docs.getunleash.io/">https://docs.getunleash.io/</a> to get started on Unleash!<br></p>]]></content:encoded></item><item><title><![CDATA[Vietnamese for Engineers]]></title><description><![CDATA[Software engineers have a natural aversion to non-ascii characters. Emoji in variable names? No thanks. However, when dealing with user inputs, this aversion turns out to be a big blind-spot.]]></description><link>https://tech.glints.com/vietnamese-for-enginners/</link><guid isPermaLink="false">60c400bbf9c825000192ba0c</guid><category><![CDATA[Engineering]]></category><category><![CDATA[Glints]]></category><category><![CDATA[UI]]></category><category><![CDATA[UX]]></category><category><![CDATA[Vietnam]]></category><dc:creator><![CDATA[Marco Brack]]></dc:creator><pubDate>Tue, 15 Jun 2021 03:41:00 GMT</pubDate><media:content url="https://tech.glints.com/content/images/2021/06/Hanoi-Downtown.jpg" medium="image"/><content:encoded><![CDATA[<img src="https://tech.glints.com/content/images/2021/06/Hanoi-Downtown.jpg" alt="Vietnamese for Engineers"><p>Software engineers have a natural aversion to non-ascii characters. Emoji in variable names? No thanks. However, when dealing with user inputs, this aversion turns out to be a big blind-spot.</p><p>Many languages use special characters like the Spanish <em>&#xF1;</em>, the German umlauts (<em>&#xE4;</em>, <em>&#xF6;</em>, <em>&#xFC;</em>) or the <em>&#xE9;</em> in <em>caf&#xE9;</em>. Other languages such as Chinese, Japanese and Korean completely rely on non-ascii characters.</p><p>When Glints started operating in Vietnam, this blind-spot became particularly acute. User feedback started rolling in, mostly complaints about location form elements not working as expected.</p><h1 id="the-vietnamese-alphabet">The Vietnamese Alphabet</h1><p>Vietnamese, like English, is based on the Latin alphabet, but uses diacritical marks to form seven additional letters, and to indicate tonality.</p><p>The additional letters are <em>&#x111;</em>, <em>&#x103;</em>, <em>&#xE2;</em>, <em>&#xEA;</em>, <em>&#xF4;</em>, <em>&#x1A1;</em> and <em>&#x1B0;</em>. While pronouncing them as if they did not have any marks works in a pinch, it is not correct. They are not interchangeable with the unmarked letters.</p><p>The same goes for the tone marks: There are six tones in Vietnamese, and they are marked with five diacritics: <em>M&#xE1; </em>(acute), <em>m&#xE0; </em>(grave), <em>m&#x1EA3; </em>(hook), <em>m&#xE3; </em>(tilde) and <em>m&#x1EA1; (</em>dot below). The sixth one is the absence a tone mark. Tone is the curve of the pitch of the voice when speaking a word. For example, the word <em>m&#xE1;</em> is pronounced with a rising pitch, similarly to how in English, to indicate a question, the speaker&apos;s voice rises in pitch towards the end of the sentence.</p><p>It is tempting to just ignore these diacritical marks, but if we want to fix our form inputs, we certainly can not. All marks have a meaning, and omitting them will either produce a non-existing word, or a word with a different meaning. For example, the word <em>con d&#x1EBF;</em> means cricket, but <em>con d&#xEA;</em> means goat!</p><p>As the word <em>con d&#x1EBF;</em> above demonstrates, the additional letters can be combined with the tone marks. So, going from the base Latin alphabet, in Vietnamese letters can have zero, one or two diacritics. That makes for a lot of potential combinations!</p><h1 id="input-methods">Input Methods</h1><p>There are multiple input methods that can be used to type Vietnamese on an (English) keyboard. We&apos;ll talk about Telex here, which is the most common input one, and Vni, which is the default input method for Vietnamese on Ubuntu.</p><h2 id="vni">Vni</h2><p>This one is pretty straight-forward. With Vni, the number- and the square bracket keys are repurposed to either write one of the new letters, or add a tone mark to the last letter. There are some variants of the exact mapping out there, but Ubuntu uses the following:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th>1</th>
<th>2</th>
<th>3</th>
<th>4</th>
<th>5</th>
<th>6</th>
<th>7</th>
<th>8</th>
<th>9</th>
<th>0</th>
<th>[</th>
<th>]</th>
</tr>
</thead>
<tbody>
<tr>
<td>&#x103;</td>
<td>&#xE2;</td>
<td>&#xEA;</td>
<td>&#xF4;</td>
<td>a&#x300;</td>
<td>a&#x309;</td>
<td>a&#x303;</td>
<td>a&#x301;</td>
<td>a&#x323;</td>
<td>&#x111;</td>
<td>&#x1B0;</td>
<td>&#x1A1;</td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>For example, to write <em>d&#x1EBF;</em>, type <code>d38</code>. The <code>3</code> produces &#xEA; and the 8 adds the acute diacritic.</p><p>To write <em>ng&#x1B0;&#x1A1;&#x300;i</em> type <code>ng[]5i</code>. The <code>[</code> produces <em>&#x1B0;</em>, the <code>]</code> produces <em>&#x1A1;</em> and the <code>5</code> adds the grave diacritic to the <em>&#x1A1;</em>.</p><h3 id="installation">Installation</h3><p>This comes pre-installed on Ubuntu (20.04 LTS). To enable it, go to <em>Settings</em> &gt; <em>Region &amp; Language</em> &gt; <em>Input Sources</em> and add <em>Vietnamese. </em>Switch between input methods with <code>super</code>+<code>space</code>.</p><h2 id="telex">Telex</h2><p>The more common input method is Telex, where some letter keys can be pressed twice to produce the alternate version of that letter, and other letter keys are repurposed for adding diacritical marks. The latter works because the Vietnamese alphabet doesn&apos;t use some letters like <em>J</em> and <em>W</em>, and some letters like <em>X</em> can not appear at the end of a word. This is a really smart system!</p><p>The exact specs can be found elsewhere, but here are some examples. To write <em>d&#x1EBF;</em>, type <code>dees</code>. The double <code>e</code> produces <em>&#xEA;</em> and the <code>s</code> adds the acute diacritic. Every word in Vietnamese can only have zero or one tone marks, so the tone mark placement does not really matter, and the rules are somewhat complicated. Luckily, Telex handles this for us.</p><p>To write <em>ng&#x1B0;&#x1EDD;i</em> (person), type <code>nguowif</code>. The <code>w</code> transforms <code>uo</code> into <em>&#x1B0;&#x1A1;</em>, and the <code>f</code> adds the grave diacritic. It is also possible to type <code>nguwowif</code>, transforming the two vowels individually, but Telex allows the shorter <code>uow</code> combination because Vietnamese never uses <em>&#x1B0;o</em> or <em>u&#x1A1;</em>.</p><p>This may seem cryptic at first, but is actually really easy to pick up. If you deal with Vietnamese text occasionally, install Telex and give it a try! You don&apos;t have to be fast with it for it to be useful to you.</p><h3 id="installation-1">Installation</h3><p>To install Telex on Ubuntu (20.04 LTS) run these commands:</p><pre><code class="language-bash">apt install -y ibus-unikey 
ibus restart</code></pre><p>And then go to <em>Settings</em> &gt; <em>Region &amp; Language</em> &gt; <em>Input Sources</em> and add <em>Vietnamese (Unikey). </em>Switch between input methods with <code>super</code>+<code>space</code>.</p><h1 id="mistakes-where-made">Mistakes Where Made</h1><p>When we investigated the bug reports from the user feedback, we found that we had made three specific mistakes when we were coding our forms with English input in mind:</p><h2 id="mistake-1-removing-diacritical-marks">Mistake #1: Removing Diacritical Marks</h2><p>Given that diacritical marks are important for the meaning of a word, it becomes obvious that removing them is not ideal. But this is what we were doing initially: To ensure that when searching for <em>cafe</em> and <em>caf&#xE9;</em>, the same suggestions would be returned, we just removed the diacritics from the search input and the database entries before comparing them.</p><p>This approach is flawed in two ways: First of all, it makes the search less accurate. The user is no longer able to type in precisely whether they are looking for <em>con d&#x1EBF;</em> or <em>con d&#xEA;</em>, since both options will be returned.</p><p>Also, while writing an algorithm for turning <em>caf&#xE9; </em>into<em> cafe</em> is relatively easy, doing the same for all possible combinations of diacritical marks in Vietnamese is not. This problem is exacerbated by the fact that when it comes to diacritics, there are multiple ways to write the same thing.</p><h2 id="mistake-2-not-all-diacritics-are-equal">Mistake #2: Not All Diacritics are Equal</h2><p>Unicode and character encodings are a topic in and of themselves, but let&apos;s take a look at what is actually written to your computer&apos;s memory when you type:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://tech.glints.com/content/images/2021/06/ezgif-3-37e65f4fe1bc.gif" class="kg-image" alt="Vietnamese for Engineers" loading="lazy" width="600" height="378"><figcaption>Writing Latin chars to a file (utf-8) and inspecting their byte values</figcaption></figure><p>Assuming that we&apos;re using the utf-8 encoding, writing the Latin character <em>a</em> to a file, actually writes the byte value of <code>0x61</code> to the memory. For an uppercase <em>A</em> it&apos;s <code>0x41</code>.</p><p>So lets see what this looks like when we try to type <em>&#x1EAD; </em>with the Telex input system:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://tech.glints.com/content/images/2021/06/telex.gif" class="kg-image" alt="Vietnamese for Engineers" loading="lazy" width="600" height="399"><figcaption>Writing Vietnamese to a file (utf-8) with Telex and inspecting their byte values</figcaption></figure><p>Typing <em>a</em> still gives us <code>0x61</code>, but <em>&#xE2;</em> is <code>0xC3 A2</code>, <em>&#x1EA1;</em> is <code>0xE1 BA A1</code> and finally <em>&#x1EAD;</em> is <code>0xE1 BA AD</code>.</p><p>However, when we try the same with the Vni input method, we see a difference:</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://tech.glints.com/content/images/2021/06/tcvn-1.gif" class="kg-image" alt="Vietnamese for Engineers" loading="lazy" width="600" height="399"><figcaption>Writing Vietnamese to a file (utf-8) with Vni and inspecting their byte values</figcaption></figure><p>Here, typing <em>a</em> gives us <code>0x61</code>, but <em>&#xE2;</em> is <code>0xC3 A2</code>, <em>&#x1EA1;</em> is <code>0x61 CC A3</code> and finally <em>&#x1EAD;</em> is <code>0xC3 A2 CC A3</code>.</p><p>The difference becomes clearer when we look at the byte values next to each other:</p><!--kg-card-begin: markdown--><table>
<thead>
<tr>
<th></th>
<th><em>a</em></th>
<th><em>&#xE2;</em></th>
<th><em>&#x1EA1;</em></th>
<th><em>&#x1EAD;</em></th>
</tr>
</thead>
<tbody>
<tr>
<td>Telex</td>
<td><code>0x61</code></td>
<td><code>0xC3 A2</code></td>
<td><code>0xE1 BA A1</code></td>
<td><code>0xE1 BA AD</code></td>
</tr>
<tr>
<td>Vni</td>
<td><code>0x61</code></td>
<td><code>0xC3 A2</code></td>
<td><code>0x61 CC A3</code></td>
<td><code>0xC3 A2 CC A3</code></td>
</tr>
</tbody>
</table>
<!--kg-card-end: markdown--><p>While Telex produces single characters for <em>&#x1EA1;</em> and <em>&#x1EAD;</em>, Vni actually produces the <em>a</em> and <em>&#xE2;</em> character plus a modifier (<code>0xA3</code>)! This explains why some searches come up empty: If the entries being searched in have been written with Vni, but the user writes their query with Telex, the computer compares the byte values and only sees different strings.</p><h2 id="mistake-3-bad-database">Mistake #3: Bad Database</h2><p>This one concerns the city of Dalat, or <em>&#x110;&#xE0; L&#x1EA1;t</em> as it is written in Vietnamese. For some reason, no matter with which input method the users searched for it, with our without diacritics, they couldn&apos;t find it. It was there in our database, but for some reason Sequelize just wouldn&apos;t return it.</p><p>Ultimately we found that for some reason, the entry for &#x110;&#xE0; L&#x1EA1;t in our database used neither <a href="https://unicode-table.com/en/0110/">&#x110; (D with Stroke)</a> nor any combining mark. It was written using <a href="https://unicode-table.com/en/0110/">&#xD0; (Latin Capital Letter Eth)</a>, which looks exactly the same, but as far as a computer is concerned, is a completely different letter.</p><h1 id="solutions">Solutions</h1><p>The fix for Mistake #3 is obvious: Fix the city names in our database by replacing all Eth chars with D with Stroke chars. However, from Mistake #1 we know that we can&apos;t fix Mistake #2 by removing the diacritics.</p><p>To fix this, we should use string normalization: This is an algorithm that is built into most modern languages. It transforms all those different byte values into one canonical version, which can then be used for comparisons.</p><figure class="kg-card kg-image-card kg-card-hascaption"><img src="https://tech.glints.com/content/images/2021/06/ezgif-7-7b5a27e42667.gif" class="kg-image" alt="Vietnamese for Engineers" loading="lazy" width="600" height="376"><figcaption>Demonstrating JavaScript&apos;s string normalization function</figcaption></figure><p>You can find the reference for JavaScript&apos;s normalization method here: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize">https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize</a></p><h2 id="further-reading">Further Reading</h2><ul><li>A good article about the input methods: <a href="https://yourvietnamese.com/learn-vietnamese/type-vietnamese/">https://yourvietnamese.com/learn-vietnamese/type-vietnamese/</a></li><li>The Telex Rules on Wikipedia: <a href="https://en.wikipedia.org/wiki/Telex_(input_method)#Rules">https://en.wikipedia.org/wiki/Telex_(input_method)#Rules</a></li><li>A beautiful web book about the challenges of typesetting Vietnamese: <a href="https://vietnamesetypography.com/">https://vietnamesetypography.com/</a></li></ul>]]></content:encoded></item><item><title><![CDATA[As Glints CTO, this is what I want you to know about building an engineering team in Southeast Asia]]></title><description><![CDATA[<p>There are two lessons that I learned the hard way when building Glints engineering team in this area.</p><p>My philosophy when it comes to building up engineering teams in Southeast Asia can be summed up in two words: intentionality and pragmatism. Five years ago when I first began scaling up</p>]]></description><link>https://tech.glints.com/building-tech-team-in-sea/</link><guid isPermaLink="false">609d6651e540d80001f8ad87</guid><category><![CDATA[Engineering]]></category><category><![CDATA[Startup]]></category><category><![CDATA[Scaling]]></category><category><![CDATA[Hiring]]></category><category><![CDATA[Glints]]></category><dc:creator><![CDATA[Seah Ying Cong]]></dc:creator><pubDate>Thu, 13 May 2021 20:57:00 GMT</pubDate><media:content url="https://tech.glints.com/content/images/2021/05/0D129248-9612-4194-B7A1-8B3BEAEFAAB1.png" medium="image"/><content:encoded><![CDATA[<img src="https://tech.glints.com/content/images/2021/05/0D129248-9612-4194-B7A1-8B3BEAEFAAB1.png" alt="As Glints CTO, this is what I want you to know about building an engineering team in Southeast Asia"><p>There are two lessons that I learned the hard way when building Glints engineering team in this area.</p><p>My philosophy when it comes to building up engineering teams in Southeast Asia can be summed up in two words: intentionality and pragmatism. Five years ago when I first began scaling up the engineering team in this region, I had only the vaguest ideas of the frequently irreversible decisions that lay ahead of me.</p><p>Some of the painful results from these misguided decisions include my Indonesia engineering team quitting one after the other due to disengagement, simmering tensions and frustrations due to inter-country teams&#x2019; <a href="https://www.businesstopia.net/communication/language-barriers#:~:text=Language%20barriers%20are%20the%20most,misunderstandings%20and%20misinterpretations%20between%20people.&amp;text=Not%20using%20the%20words%20that,prevents%20message%20from%20being%20conveyed." rel="follow">language barriers</a> and <a href="https://hbr.org/2020/07/5-tips-for-managing-an-underperformer-remotely" rel="follow">persistent underperformance in remote teams</a> left to fester over quarters.</p><p>I had some abstract ideals about the perfect team I wanted to build. But at the end of the day, I am at a company with a budget, hiring against a tight timeline in a constrained talent market with a thin history.</p><p>There are realities to contend with, many of which are unique to the fragmented and multi-cultural context that is Southeast Asia. If I could hop on a Zoom call with that eager hiring manager from five years ago, here&#x2019;s where I would focus his precious and soon-to-be-frayed attention.</p><p><a href="https://www.linkedin.com/in/reidhoffman/" rel="follow">Reid Hoffman</a> famously quipped that building a startup is akin to assembling an airplane in mid-flight. While flying by the seat of your pants is frequently the <a href="https://e27.co/behind-the-scenes-how-f10s-accelerator-programme-helps-founders-go-from-ideation-to-market-ready-stage-20210324/" rel="follow">optimal strategy for finding product-market fit</a>, designing and building a high-performing engineering organisation takes a great deal more intentionality.</p><p>Here are a couple of things I learned in building an engineering team in Southeast Asia.</p><h3 id="work-out-the-nature-and-scope-of-engineering"><strong>Work out the nature and scope of engineering</strong></h3><p>Critically, the time to scale the team is after you have found <a href="https://a16z.com/2017/02/18/12-things-about-product-market-fit/" rel="follow">product-market fit</a>, which is also the time to plan out a longer-term <a href="https://www.productplan.com/learn/what-is-a-product-roadmap/" rel="follow">product roadmap</a>. Armed with this product roadmap, walk up the dependency graph to chart out the corresponding engineering roadmap, from which you can work backwards to figure out the engineering bandwidth and skill set required. This is necessarily a blunt operation, but the broad strokes alone will give you much-needed clarity downstream in the hiring.</p><p>A word of advice here is to be clear-eyed about the actual engineering bandwidth and skill set needed. While many startups pride themselves on proprietary, cutting-edge technology, don&#x2019;t underestimate the long shadow of relatively ho-hum infrastructural and product engineering that trails behind these core asset developments. Plan for the manpower accordingly.</p><h3 id="split-teams-by-communication-lines"><strong>Split teams by communication lines</strong></h3><p>If you plan to scale the team past eight people, you will almost certainly need to split them up into sub-teams. The best way to do this is to group members with the most frequent and complex communications into the same teams. Frequently, you will find the most natural seams between teams to be product scopes.</p><p>At this point, you also have to decide if you are going for a fully remote or a multiple-hub hiring strategy. Both have its pros and cons, the important thing is you decide, and provision supporting processes and tools. If it is a hub strategy, then ideally each team is colocated for more spontaneous and high-bandwidth communications. If it is remote, then think through language requirements and market context.</p><h3 id="map-out-the-regional-talent-market"><strong>Map out the regional talent market</strong></h3><p>Though relatively young as a whole, the Southeast Asia <a href="https://e27.co/is-sea-facing-a-tech-talent-crisis-in-the-midst-of-rapid-growth-20210421/" rel="follow">engineering talent market</a> differs in skillset concentration, culture and size. It is crucial that you get a sense of both the top-down view and anecdotal, on-the-ground reviews of the different talent market.</p><p>When I was sussing out both the Vietnam and Indonesia engineering pool, it was incredibly eye-opening to speak to other engineering leaders who have built substantial teams over a multi-year period over there.</p><p>It gave me a pulse of the difficulty of hiring for different skill sets, and what candidates respond to. Quantitatively, I would also research on LinkedIn where the bigger companies are building their engineering hubs, including the tech stack, functional roles and seniority levels of each hub. The output of this research and the organisational design is that I can map out the most suitable region to build out each team.</p><h3 id="start-by-hiring-the-leader"><strong>Start by hiring the leader</strong></h3><p>If you realise that you can hire a full engineering team in just 1 country, you are in luck. In fact, there will be so much less complex that you should try to optimise for this arrangement if possible.</p><p>Practically, due to talent scarcity, required market context or simply cost, most engineering leaders will have to hire across at least 2 markets.</p><p>If that is your case, learn from the two painful lessons that I picked up the hard way. First, always hire from the top down, which means starting with the engineering leader.</p><p>There is frequently a huge pressure to hire individual contributors who can immediately add to product development bandwidth. Resist that temptation. I made that mistake by hiring a small team of engineers in Indonesia without a manager. In between managing the Singapore team and hiring in Indonesia, I was stretched too thin to properly manage that Indonesia team, which is crucial in the early stages of team formation.</p><p>Almost immediately, problems cropped up. The team was frequently unsure of the full product context, resulting in delays. They were also apprehensive about how to adapt to the backdrop of Singaporean workplace culture in the bigger team.</p><p>Eventually, they became increasingly disconnected from the company they were so excited to join in the first place, disillusioned that they were unable to make many meaningful contributions.</p><p><a href="https://e27.co/video-ace-grab-engineering-interview-20180122/" rel="follow">Investing the necessary time to hire the right engineering leader</a> would have gone a long way to avoiding that outcome. Not only would they share the immense workload of bootstrapping a team, they would also help you solidify the desired cultural foundation through further hiring and personal influence.</p><p>Secondly, when building out a new engineering hub, that should be your sole focus, which almost always means you would need to be stationed there physically (after the pandemic, of course). It is already a tough sell for a candidate to join a company they have never heard of, much less a foreign one where they hadn&#x2019;t even shaken your hands in person. Make that sell easier by sharing your plans for the team while looking them in the eye.</p><p>Much as Zoom and Google Meet are great products, nothing beats face-to-face rapport when it comes to trust-building. The same goes for onboarding the first few hires. Spending a prolonged amount of time in person with your critical first hires will set the cultural tone for a long time to come.</p><p>Eventually, of course, once you are confident of the hiring bar and management capabilities of your first engineering lead, you can increasingly peel yourself off for other priorities.</p><p>Even with the best-laid plans and the benefit of hindsight, building up an engineering team, especially as a startup in Southeast Asia, will never be easy. There are times when it feels like a grind and other times when it seems like there are no good options. At the end of the day, what you need is a clear-eyed appreciation of the realities on the ground, and the very real trade-offs you have to make.</p><p>My only hope is that you make these trade-offs consciously, and not bumble through them as I did five years ago.</p><p>Cross posted from <a href="https://e27.co/how-to-build-an-engineering-team-and-other-hiring-tips-from-glints-cto-20210504/">https://e27.co/how-to-build-an-engineering-team-and-other-hiring-tips-from-glints-cto-20210504/</a></p>]]></content:encoded></item><item><title><![CDATA[An engineer's guide to asking better questions on Slack]]></title><description><![CDATA[A guide to help engineers be better in asking asynchronous questions and resolve technical discussions efficiently on Slack.]]></description><link>https://tech.glints.com/an-engineers-guide-to-asking-better-questions-on-slack/</link><guid isPermaLink="false">609d519b1dd80f0001fb37b2</guid><category><![CDATA[Engineering]]></category><category><![CDATA[Slack]]></category><category><![CDATA[Remote work]]></category><category><![CDATA[Questions]]></category><category><![CDATA[Doubts]]></category><dc:creator><![CDATA[Shubham Padia]]></dc:creator><pubDate>Thu, 13 May 2021 20:13:02 GMT</pubDate><media:content url="https://tech.glints.com/content/images/2021/05/0317517E-AF0B-4CBC-B676-C22086A8E1A2.jpeg" medium="image"/><content:encoded><![CDATA[<img src="https://tech.glints.com/content/images/2021/05/0317517E-AF0B-4CBC-B676-C22086A8E1A2.jpeg" alt="An engineer&apos;s guide to asking better questions on Slack"><p>Have you recently found yourself in conversations on Slack that feel days to resolve when similar conversations would be resolved relatively quickly in person. If yes, this article will help you make your asynchronous conversations more efficient.</p><p><u>[Monday 4:00 pm]</u> Michael, a backend engineer with very little knowledge of the frontend codebase gets stuck while trying to solve a frontend bug. In a normal working situation, Michael would go to John&apos;s desk, the frontend engineer in the team and clarify the doubt in person. But since the whole team has been working remote since the pandemic, he drops a message to John on Slack. He attaches a code block in the message and asks <code>Hi John, can you guide how can I make this code work successfully?</code>.</p><p>[<u>Tuesday 09:00 am</u>] John starts his morning routine of going through the previous day&apos;s slack mentions and notices the above message from Michael. Although John is the most experienced frontend engineer on the team, John has no clue how to respond to the question since he does not know what problem is Michael trying to solve. John drops a message to Michael asking for a link to the bug that John is trying to solve.</p><p>[<u>Tuesday 03:00 pm</u>] Michael is going through his slack notifs after lunch and notices John has asked for the bug link, so Michael messages that link to John.</p><p>[<u>Wednesday 09:00 am</u>] John notices the bug link from Michael in his mentions, he goes through the bug and thinks of an alternative solution to the one that Michael gave and drops a message to Michael with that solution.</p><p>[<u>Wednesday 10:00 am</u>] Michael has been more frequent to check his slack in anticipation of John&apos;s reply. He notices the alternative solution proposed by John, but turns out he has already tried that solution and it does not quite solve the problem due to a weird edge case. He gets back to John with the details of his previous attempt.</p><p>This back and forth keeps on going on till Friday when John finally realizes on how the bug can be solved from Michael&apos;s information. <strong>The conversation around the bug took them 4 days to resolve.</strong> If both of the engineers were working in person, would this conversation have taken them 4 days to solve with the questions asked same way line to line? The answer would be no, since all of John&apos;s question about the problem would have been answered immediately instead of waiting for hours. The conversation would have taken at most an hour to resolve instead of 4 days.</p><p>What&apos;s the problem here, is Michael just bad at asking questions? But that can&apos;t be, Michael has been asking questions the same way as he did before. The example here is a bit of an hyperbole on how expensive asynchronous communication can be sometimes if we follow the same rules as real time communication. <strong>Following are points to keep in mind when trying to ask questions asynchronously:</strong></p><ul><li><strong>Give the full Context. (Clearly state what you&apos;re trying to do)</strong>Instead of just trying to ask what&apos;s wrong with the code, Michael could have started his message with <code>Hey, I was trying to solve [bug_link_here], where the popup doesn&apos;t appear on condition x</code> . This message would give John more context on what&apos;s the problem in the first place. Additional thing to keep in mind when trying to give John context is to assume that John is completely clueless on the ideal behaviour of that part of the codebase, since John is not an all knowing deity.</li><li><strong>Outline your previous attempts to solve the problem.</strong>Michael had tried 2-3 solutions that didn&apos;t work before going to John for help. It would help John narrow down the problem if he was aware of those attempts and what Michael had already tried.</li><li><strong>Describe what&apos;s the problem that you&apos;re facing in your attempt.</strong>Just describing your attempts isn&apos;t enough, please describe what you&apos;ve tried before.</li></ul><p>Aside from the points described above, please be specific in what you are trying to point i.e. use <code>this</code>, <code>that</code> and <code>it</code> as less as possible. E.g. if you&apos;re referencing a column, explicitly name that column, don&apos;t assume the person on the other side knows what you&apos;re talking about. If you&apos;re referencing a commit, give a hash of that commit or even better, drop a link to a specific line of code at a specific revision on GitLab/GitHub.</p><p>Although these points might help you frame your better questions, <strong>the best way to get better at asking questions would be to ask a co-worker of yours to help you create a feedback loop.</strong> You agree that whenever you ask that co-worker any question, that co-worker would point out the flaws in your questions immediately and help you give feedback then and there on how you could you have better framed the question to help your co-worker understand the problem in the first go.</p><p>Cross posted from <a href="https://shubhamp.in/an-engineers-guide-to-asking-better-questions-on-slack/">https://shubhamp.in/an-engineers-guide-to-asking-better-questions-on-slack/</a> </p>]]></content:encoded></item><item><title><![CDATA[Introducing the Glints Tech blog]]></title><description><![CDATA[Introducing the Glints tech blog, a one stop destination for all things tech about Glints]]></description><link>https://tech.glints.com/welcome/</link><guid isPermaLink="false">6085afc27551310001dcc124</guid><category><![CDATA[Glints]]></category><category><![CDATA[Engineering]]></category><category><![CDATA[Tech]]></category><category><![CDATA[New Blog]]></category><category><![CDATA[Human Resources]]></category><dc:creator><![CDATA[Shubham Padia]]></dc:creator><pubDate>Thu, 13 May 2021 18:07:00 GMT</pubDate><media:content url="https://tech.glints.com/content/images/2021/05/12F431CA-2AB8-412B-9F70-AC0CE67583F8.png" medium="image"/><content:encoded><![CDATA[<img src="https://tech.glints.com/content/images/2021/05/12F431CA-2AB8-412B-9F70-AC0CE67583F8.png" alt="Introducing the Glints Tech blog"><p>Founded in 2013 in Singapore, <a href="Https://glints.com">Glints</a> has empowered more than 1.5 million professionals and 30,000 organizations to realize their human potential. Last month, Glints announced the close of US$22.5 Million in an oversubscribed round led by Tokyo-listed PERSOL Holdings, marking the largest investment round into a career platform in Southeast Asia. </p><p>We&apos;re stoked to introduce our tech blog to share our learnings over the past years and the engineering challenges a fast-growing startup of our maturity faces. This blog will cover all things tech, from the nitty gritty tech challenges we face to the organisation wide challenges faced by us.</p><p>In the process of sharing our learnings and challenges, we hope to help people and organisations facing similar problems, get feedback from people who&apos;ve been there done that and to give future engineers a peek of our engineering culture. </p><p>To know more about Glints, head on to <a href="https://glints.com/sg/about">https://glints.com/sg/about</a> (We&apos;re <a href="https://glints.com/sg/company/glints-jobs/db947fbf-44c6-4656-8729-2bdfc45cd6b1">hiring</a>!).</p><p>Hope you have a fun time reading through our learnings and challenges :)</p><p></p>]]></content:encoded></item></channel></rss>