tag:betacar.net,2014:/feedCarlos Betancourt Carrero2021-10-01T09:26:35-07:00Carlos Betancourt Carrerohttp://betacar.netSvbtle.comtag:betacar.net,2014:Post/my-manager-readme2021-10-01T09:26:35-07:002021-10-01T09:26:35-07:00My Manager's README<figure><img style="margin-bottom:10px;" src="https://images.unsplash.com/photo-1455849318743-b2233052fcff?ixid=MnwxMjA3fDB8MHxwaG90by1wYWdlfHx8fGVufDB8fHx8&ixlib=rb-1.2.1&auto=format&fit=crop&w=2669&q=80"><figcaption style="text-align:center;">Photo by <a href="https://unsplash.com/@goian?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Ian Schneider</a> on <a href="https://unsplash.com/s/photos/start?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText">Unsplash</a></figcaption></figure>
<p>Inspired by Edgar’s <a href="https://medium.com/@edgar/my-manager-readme-c3b4ab344a9c">fantastic post</a> and other <a href="https://svnk.github.io/manager-READMEs/">Engineering Managers</a>, I’m following the same principle to outline my views for existing and new team contributors.</p>
<p>Effective onboarding is crucial to our industry. New joiners come with a fresh mind, and, in the first few days of a new job, things can go really fast and people can get lost easily. Providing an easy and digestible way for them to know you as their manager, to know your leadership style(s), values, communication channels, and, more importantly, your expectations with them, is key for successful onboarding.</p>
<p></p><hr>
<h2 id="my-manager39s-readme_2">My Manager’s README <a class="head_anchor" href="#my-manager39s-readme_2">#</a>
</h2>
<p>¡Hola! I’m Carlos, and I want to welcome you to our team. </p>
<p>As your manager, I look forward to knowing you more through conversations and interactions. To give you a head start in knowing me, I’d like to share my management style, philosophy, expectations, and some facts about me.</p>
<blockquote>
<p>This is a living document, which will change. Please let me know if you have any feedback on how to make this more useful to you and the team.</p>
</blockquote><h3 id="clarifications_3">Clarifications <a class="head_anchor" href="#clarifications_3">#</a>
</h3>
<ul>
<li>My job is to help you. I’ll provide context when available, and look for it when not.</li>
<li>Engage, retain, and grow world-class talent (you).</li>
<li>Help, empower and support you. Advocate for you with the rest of the company.</li>
<li>You work for the company, not for me. Optimize for it. </li>
<li>I’m making mistakes, and I want to improve just like you. Hold me accountable.</li>
<li>Your growth depends on your openness to it. Is up to you to decide where and what you want to be in your future. I’ll do my best to support and enable you to get there.</li>
</ul>
<h3 id="leadership-styles_3">Leadership Styles <a class="head_anchor" href="#leadership-styles_3">#</a>
</h3>
<p>I’m an <a href="https://ceopedia.org/index.php/Affiliative_leadership">affiliative</a> and <a href="https://en.wikipedia.org/wiki/Servant_leadership">servant</a>. I serve you, not the other way around. I’m always available to assist.</p>
<p>I’ll foster a communicative environment, where we openly share ideas, trusting and respecting each other, working as a team (not as a family), and revolving around solutions and not consensus.</p>
<h3 id="process-and-values_3">Process and Values <a class="head_anchor" href="#process-and-values_3">#</a>
</h3>
<p>People build software, not the other way around. As such, I prefer to adjust processes to meet the needs and goals of our people. This frees us to do our best work for the organization. </p>
<p>At the end of the day, this is what I value:</p>
<ul>
<li>
<strong>Transparency</strong>, about what’s happening, what happened, and what’s going to happen.</li>
<li>
<strong>Communication</strong>. In these difficult times, it’s easy to lose track of things or get disconnected while working remotely. Let’s keep multiple channels open and over-communicate things if possible.</li>
<li>
<strong>Growth and learning</strong>. Fail fast and learn. Experiment with clear goals and tight feedback loops. Help others learn by sharing your own journey, and keeping a low ego.</li>
<li>
<strong>Time</strong>. I’ll do my best to ensure your time is not wasted. I expect the same from you. I don’t want you to do any process that is neither beneficial to you nor required by the business, law, policy, etc. Family and personal time off are just as valuable as team time.</li>
<li>
<strong>Proactivity and self-organization</strong>. I have no desire to make every decision myself, I’m sure you don’t want me to either.</li>
<li>
<strong>Critical thinking</strong>. Nothing is sacred and we should not do anything <em>“because we’ve always done it that way”</em>.</li>
<li>
<strong>Intentionality</strong>, we have too much to do for any of it to be random.</li>
<li>
<strong>Empathy</strong>. Having empathy for your co-workers will help us to build strong teams.</li>
<li>
<strong>Respect</strong>. You’ll always be respected as a professional and human being. I expect the same from you towards me and your teammates. </li>
</ul>
<h3 id="transparency-and-openness_3">Transparency And Openness <a class="head_anchor" href="#transparency-and-openness_3">#</a>
</h3>
<p>I’ll work to be as open as possible about what’s going on with the team, department, and the company. You can ask me anything. The vast majority of the time I’ll answer. Very infrequently, I won’t be able to. But I’m committed to never lie to you.</p>
<h3 id="any-feedback-is-good-feedback_3">Any Feedback Is Good Feedback <a class="head_anchor" href="#any-feedback-is-good-feedback_3">#</a>
</h3>
<p>More than any other factor, candid and compassionate feedback is central to a cohesive high-functioning team.</p>
<p>I prefer to receive direct and early feedback. I’m committed to providing you clear and timely feedback, as per your request, and I’d love it if you did the same for me.</p>
<p>There are three dimensions required for people to continue to give you feedback:</p>
<ul>
<li>
<strong>Safety:</strong> unlikelihood of being punished for giving feedback; should be high.</li>
<li>
<strong>Effort:</strong> the amount of work in order to give feedback, also known as <em>“how much do you argue when people give you feedback?”</em>, should always be minimal.</li>
<li>
<strong>Benefit:</strong> how likely is it that giving you feedback will materially impact your behavior? It should be high.</li>
</ul>
<p>Let me know if I don’t do well on any of these three dimensions.</p>
<h3 id="our-11s-are-about-you_3">Our 1:1s Are About You <a class="head_anchor" href="#our-11s-are-about-you_3">#</a>
</h3>
<p>These meetings are for you and the agenda is what you make it:</p>
<ul>
<li>What is it you’d like to talk to me about? </li>
<li>What’s exciting you? </li>
<li>What’s frustrating or concerning you? </li>
<li>What could I do today that would make you happier or more productive? </li>
</ul>
<p>We don’t need to talk about project status in this meeting unless you want to. I’ll ask questions and provide feedback along the way, but this is your time.</p>
<p>The length, frequency, and medium are also up to you, but my hope is that we’ll have at least 30 minutes. This is only a minimum though, and not a maximum.</p>
<h3 id="worklife-balance_3">Work/Life Balance <a class="head_anchor" href="#worklife-balance_3">#</a>
</h3>
<p>I strongly value work/life balance in my own life and yours. I don’t expect to communicate with you outside of the usual hours. I try not to respond to e-mails or Slack during off-hours and under no circumstances expect it from you (unless it’s an emergency).</p>
<h3 id="your-philosophies_3">Your Philosophies <a class="head_anchor" href="#your-philosophies_3">#</a>
</h3>
<p>I’ve written a lot here about my philosophies but a fair amount of my job is adapting to <strong>your</strong> needs and philosophies, and I look forward to talking to you about them.</p>
tag:betacar.net,2014:Post/concurrency-in-javascript2014-09-19T08:31:19-07:002014-09-19T08:31:19-07:00Concurrency in JavaScript<p>A great article written by Thibault Imbert about responsive JavaScript programming using Web Workers and browser threads.</p>
tag:betacar.net,2014:Post/the-sausage-theory2014-08-20T12:46:30-07:002014-08-20T12:46:30-07:00The sausage principle<blockquote class="short">
<p>If you love something, never find out how it’s made.</p>
</blockquote>tag:betacar.net,2014:Post/coderwall-will-go-open-source2014-06-24T16:18:10-07:002014-06-24T16:18:10-07:00Coderwall will go open source<p>I’m looking forward to check the bowels of this great product.</p>
tag:betacar.net,2014:Post/reactive-programming-in-javascript2014-06-03T13:57:42-07:002014-06-03T13:57:42-07:00Reactive programming in JavaScript<p>The folks from <a href="http://silk.co">Silk</a> have develop a nice library that brings some of the goodies of reactive programming to JavaScript.</p>
tag:betacar.net,2014:Post/tdd-is-dead-long-live-testing2014-04-23T06:46:46-07:002014-04-23T06:46:46-07:00TDD is dead. Long live testing.<p>Despite David’s point of view, I still think that TDD can lead you to write better and quality software.</p>
tag:betacar.net,2014:Post/the-mcdonalds-theory2014-04-17T08:10:12-07:002014-04-17T08:10:12-07:00The McDonald's theory<p>Thanks to <a href="http://twitter.com/m_mujica">Manuel</a> for this useful link</p>
tag:betacar.net,2014:Post/dynamically-load-configuration-tokens-using-rubys-metaprogramming-magic2014-01-26T07:26:31-08:002014-01-26T07:26:31-08:00Dynamically load configuration tokens using Ruby's metaprogramming magic<blockquote class="short">
<p>This was originally posted by me on <a href="https://coderwall.com/p/myaghg">Coderwall</a>.</p>
</blockquote>
<p>So, let’s say you need to use tokens in your app to access a third-party API (like Twitter, Instagram, or Facebook). In Ruby gems tutorials it’s very common to see the following example code to load these tokens:</p>
<pre><code class="prettyprint">module Facebook
CONFIG = YAML.load_file(Rails.root.join("config/facebook.yml"))[Rails.env]
APP_ID = CONFIG['app_id']
SECRET = CONFIG['secret_key']
end
</code></pre>
<p>This was extracted from the Koala’s gem wiki on GitHub. Or the following one, which was extracted from the <code class="prettyprint">README.md</code> file of the Instagram gem GitHub repo.</p>
<pre><code class="prettyprint">Instagram.configure do |config|
config.client_id = "YOUR_CLIENT_ID"
config.client_secret = "YOUR_CLIENT_SECRET"
end
</code></pre>
<p>It’s a very ugly practice to hardcode things like this, IMHO.</p>
<p>Now, the most recommended and used practice in the wild is to have these API access tokens in a YAML file, so they can be loaded into our app, like the Koala’s example code from above. The format is the one that follows:</p>
<pre><code class="prettyprint">...
twitter:
consumer_key: YOUR_CONSUMER_KEY
consumer_secret: YOUR_CONSUMER_SECRET
oauth_token: YOUR_OAUTH_TOKEN
oauth_token_secret: YOUR_OAUTH_TOKEN_SECRET
...
</code></pre>
<p>As you may know, this file is loaded as a Hash. So we can access each key and value.</p>
<p>Now, using Ruby’s metaprogramming magic we can load each key of the file and use it in the configuration section of the gem. How? Using the <code class="prettyprint">.send()</code> method.</p>
<pre><code class="prettyprint">CONFIG = YAML.load_file(Rails.root.join("config", "settings.yml"))[Rails.env]
Twitter.configure do |twitter|
CONFIG['twitter'].each_key do |key|
twitter.send("#{key}=", CONFIG['twitter'][key])
end
end
</code></pre>
<p>The secret is to name each key in the YAML file section exactly as the name of the configuration key of the gem, so there won’t be any <code class="prettyprint">method_missing</code> error.</p>
<p>You can find more information about the <code class="prettyprint">.send()</code> method on the Ruby Documentation page.</p>