<?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:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Eloy “DurÃ¡n” Durán on Medium]]></title>
        <description><![CDATA[Stories by Eloy “DurÃ¡n” Durán on Medium]]></description>
        <link>https://medium.com/@_alloy?source=rss-6c069297d051------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/0*Wt6R5Eo9lAZIfK2t.png</url>
            <title>Stories by Eloy “DurÃ¡n” Durán on Medium</title>
            <link>https://medium.com/@_alloy?source=rss-6c069297d051------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 10:19:02 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@_alloy/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[Communication & Design Rules from the trenches.]]></title>
            <link>https://medium.com/@_alloy/communication-design-rules-from-the-trenches-e24a1e49ddc1?source=rss-6c069297d051------2</link>
            <guid isPermaLink="false">https://medium.com/p/e24a1e49ddc1</guid>
            <category><![CDATA[community]]></category>
            <category><![CDATA[design]]></category>
            <category><![CDATA[communication]]></category>
            <dc:creator><![CDATA[Eloy “DurÃ¡n” Durán]]></dc:creator>
            <pubDate>Sun, 18 Sep 2016 20:30:35 GMT</pubDate>
            <atom:updated>2016-09-30T16:14:17.712Z</atom:updated>
            <content:encoded><![CDATA[<p>When I was still actively working on <a href="https://github.com/CocoaPods/CocoaPods">CocoaPods</a>, I jotted down these ‘rules’ (more like guidelines, but who doesn’t like strong language?) to help collaborators take decisions, but they were definitely also meant as a reminder to myself. These are fluid, I might phrase some different nowadays or even leave some out, or add others.</p><p>It’s just some scribbles, really, but I’ve heard some people found them helpful, but that was only if they would ever find them hidden away in some wiki. So just in case there’s something in there that might be helpful to you, here they are in their full raw glory.</p><h3>Communication Rules</h3><ul><li><strong>Listen for arguments in discussions, ignore feels</strong>. Ok, we need to get this one out of the way as soon as possible: Discussions need to be direct and without bullshit. Critique is the highest good in our OSS economy, so embrace it and try to stay away from defensive comments. We already have plenty of messages to read, so keeping it to functional (and as succinct as possible!) messages will ensure we don’t subconsciously start ignoring you for the amount of noise. It’s harsh, but c’est la vie.</li><li><strong>Be explicit, don’t use anaphoric references.</strong></li><li><strong>Be verbose where it increases clarity, don’t use acronyms.</strong></li><li><strong>Use real-world examples, don’t use variables like ‘sut’, ‘foo’, ‘bar’, or even ‘baz’.</strong> Unless you are referring to somebody named ‘baz’, the context is people, and most people know who ‘baz’ is; symbols like these are not self-explanatory.</li><li><strong>Keep asking “why?”.</strong> Really understand the reasoning behind a requirement before implementing.</li><li><strong>Assume that somebody is <em>not</em> a native English speaker.</strong> Keep this in mind when somebody is not understanding your “clearly defined” sentences and re-phrase accordingly. Also, things like ‘fuck’, ‘deserves a kneecapping’, etc, might be totally friendly where you’re from, but the person you’re communicating with is probably not where you’re from and you might scare them.</li><li><strong>Avoid the use of emoji to convey if a message is well-intentioned.</strong> Instead, don’t <em>ever </em>write mean-intended messages. People might read mean-intention <em>into</em> your message, but once you start adding emojis to clarify that this is not the case, then you might have a hard time if you <em>forget</em> to add an emoji the next time. Instead, let’s assume we all have the same intent of improving the project.</li><li><strong>Avoid sarcasm.</strong> Sarcasm translates hard without face-to-face body language and is usually taken in a bad way when misinterpreted. This is often accompanied with the use of emoji to covey that no mean-intentention was intended, but, as stated above, emoji meant for this reason should be avoided.</li></ul><h3>Design Rules</h3><ul><li><strong>KEEP IT SIMPLE, STUPID.</strong> Do not try to tackle possible future issues <em>until</em> they come along. Do not tackle existing current issues when the issue is a corner case affecting only a few people <em>and</em> the code required to fix it is more than a few simple lines. I.e. the benefit of the change has to outweigh the complexity required, that it adds to the code-base, to fix it.</li><li><strong>Options are the work of the devil.</strong> This is <em>always</em> true. You should try to strive for <em>less </em>options, never more. When there’s the feeling that some functionality does not fit in the scope of any other existing option, then maybe those existing options need to be revisited first.</li><li><strong>Keep it lean.</strong> Pretty closely related to the above ones, but possibly less obvious to people. Keeping things simple also means not pulling in new dependencies without thinking hard about how to otherwise solve the problem. When in doubt, remember “you do not need another queueing system”.</li><li><strong>User convenience trumps design principles such as avoiding code duplication (DRY).</strong> Unless it introduces much much much more complexity than the convenience it provides, the user-experience should <em>always</em> be taken into account first. Avoiding code duplication is not a good enough reason in and of itself to divert the burden to the user of the program.</li><li><strong>Know required details <em>first</em>, then think of how to design and implement.</strong> This means that you should not assume to know how a Xcode/compiler/linker issue works, but first manually verify how something works and be open sure to test out different approaches. A solution based on assumptions only is not acceptable, <em>ever</em>. Once you have the data, only then decide the best course to take, always keeping the KISS principle in mind and thus choosing the simplest course.</li><li><strong>Implementation over discussion.</strong> Do not keep discussing to reach an implementation. Discussions often contain assumptions and just as often these will be wrong. At some point a bare bones implementation will make further discussion much easier. When doing this, do not feel like you need to have something polished to show to the team, because it should be possible to throw away the code without feeling bad about it.</li><li><strong>Once you are a <em>proven</em> ‘pro’ at X, you may selectively ignore rules.</strong> Many of the things described in the list do not always apply in all cases. The key here is that as a ‘pro’ you should <em>know</em> when it’s ok to make an exception and you should be ready to defend your decision with fact based arguments, otherwise you will fail to get it passed our scrutiny. Once you’re a ‘pro’ at X, it’s perfectly ok to use hyperbole to make things clear <em>for the general case</em> (i.e. on tickets as well). Some people need to be told in direct terms before accepting that path X has been tried already.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=e24a1e49ddc1" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Checking in 3rd-party dependencies.]]></title>
            <link>https://medium.com/@_alloy/checking-in-3rd-party-dependencies-f3a0979788d3?source=rss-6c069297d051------2</link>
            <guid isPermaLink="false">https://medium.com/p/f3a0979788d3</guid>
            <category><![CDATA[ios]]></category>
            <category><![CDATA[javascript]]></category>
            <dc:creator><![CDATA[Eloy “DurÃ¡n” Durán]]></dc:creator>
            <pubDate>Sun, 18 Sep 2016 20:14:37 GMT</pubDate>
            <atom:updated>2016-09-18T20:14:37.922Z</atom:updated>
            <content:encoded><![CDATA[<p>In <a href="https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control">the CocoaPods documentation</a>, the recommendation is made to check your dependencies into SCM. I often find myself discussing this with other developers, so I thought I’d write-up some of my arguments, in no specific order.</p><h3>It’s part of your app.</h3><p>At runtime, whether or not code is specific to the app or lives inside a 3rd-part dependency is irrelavent to me. If you decide to pull in a dependency, be it explicit or implicit, then, in my book, you’re on the hook for maintaining it.</p><p>Checking the sources of 3rd-party dependencies into SCM makes for a great way to review the sources we’re pulling in and to be aware of the sizes thereof.</p><h3>Don’t trust the internet.</h3><p>If you’re trusting that sources you depend on can be hosted elsewhere out of your control, then sooner or later you will suffer. Sources will go down temporarily or even indefinitely.</p><p>Checking in sources is akin to backups. Backups are good. I know this, you know this, even if we don’t make any backups of our personal data.</p><h3>Simplify bootstrapping.</h3><p>Not every contributor will need to manage dependencies, especially not when first checking out your project. Minimizing bootstrapping steps will make them happier and more productive. Imagine if those contributors aren’t even developers, but for instance designers… ugh, that must suck for them.</p><p>Checking in the sources you depend on and setting up the project to be able to run without the dependency manager even being installed is the best experience you can give your new contributors.</p><h3>But checking in dependency sources adds noise to my project sources.</h3><p>One popular solution among believers of checking in your dependency sources is to have a dedicated external SCM module for these. Then the diff of your project will simply show that the external dependency module changed, so you’ll still be able to connect dependency changes to project changes.</p><p><a href="https://github.com/artsy/eigen">At Artsy</a> we have <a href="https://github.com/artsy/eigen-artefacts">an external repo</a> for our CocoaPods dependencies.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=f3a0979788d3" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[CocoaPods docs VS developers with opinions of their own on bootstrapping]]></title>
            <link>https://medium.com/@_alloy/cocoapods-docs-vs-developers-with-opinions-of-their-own-on-bootstrapping-dc004d395136?source=rss-6c069297d051------2</link>
            <guid isPermaLink="false">https://medium.com/p/dc004d395136</guid>
            <category><![CDATA[cocoapods]]></category>
            <category><![CDATA[ios]]></category>
            <dc:creator><![CDATA[Eloy “DurÃ¡n” Durán]]></dc:creator>
            <pubDate>Sun, 18 Sep 2016 19:21:25 GMT</pubDate>
            <atom:updated>2016-09-18T19:21:25.576Z</atom:updated>
            <content:encoded><![CDATA[<p>There’s <a href="http://drekka.ghost.io/cocoapods-vs-carthage/">this blog post</a> doing the rounds, which shows a classic example of developers that have made bootstrapping their project hard for newcomers.</p><p>It’s perfectly fine of course to do whatever works for you, but it’s important to keep in mind that official recommendations in documentation are generally made for good reason. So here’s two other ways in which a conversation about bootstrapping your CocoaPods project could go.</p><blockquote>I’m not going into CocoaPods VS other dependency managers. I <em>will</em>, however, say that there’s plenty of valid things to complain about with CocoaPods, but making bootstrapping harder on yourself is simply not one of them.</blockquote><h3>Bootstrapping a project that checks Pods in.</h3><blockquote>We’re using CocoaPods to develop this project and have checked in the sources <a href="https://guides.cocoapods.org/using/using-cocoapods.html#should-i-check-the-pods-directory-into-source-control">as recommended in the CocoaPods docs</a>.</blockquote><p>Cool. What do I need to do before I can run the project?</p><blockquote>Nothing, just open the workspace and build.</blockquote><p>Wait, I don’t even need to install CocoaPods?</p><blockquote>Nope, not unless you’re going to be changing any dependencies.</blockquote><p>Neat.</p><p><em>Duration: 0.</em></p><h3>Bootstrapping a project that requires installation.</h3><blockquote>Install CocoaPods. You can find <a href="https://github.com/CocoaPods/CocoaPods-app/releases">a link to an app</a> that bundles all tools you’ll ever need on the <a href="https://cocoapods.org/">https://cocoapods.org</a> homepage.</blockquote><pre>$ time curl -sOL ‘<a href="https://github.com/CocoaPods/CocoaPods-app/releases/download/1.0.0/CocoaPods.app-1.0.0.tar.bz2&#39;">https://github.com/CocoaPods/CocoaPods-app/releases/download/1.0.0/CocoaPods.app-1.0.0.tar.bz2&#39;</a><br> 12.31 real 0.13 user 0.28 sys<br>$ time tar -jxf CocoaPods.app-1.0.0.tar.bz2<br> 6.01 real 5.04 user 0.74 sys<br>$ open CocoaPods.app</pre><p>Cool. Done.</p><blockquote>Ace. Now open the Podfile located in the project directory and click the ‘Install’ button. (Or if you’ve let the app install the CLI tool, you can use that instead.)</blockquote><pre>$ time pod install<br>Setting up CocoaPods master repo<br>[…]<br>Pod installation complete! There are 10 dependencies from the Podfile and 16 total pods installed.<br> 383.99 real 347.29 user 67.92 sys</pre><p>Ok. Done. Now what?</p><blockquote>That’s it. As <a href="https://guides.cocoapods.org/using/using-cocoapods.html#installation">the docs</a> state, you open the Xcode workspace and just build. You need not perform any settings changes or add frameworks to link phases at all.</blockquote><p><em>Duration: 6:42.31 minutes.</em></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=dc004d395136" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>