<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Coding | Jay Huang</title>
	<atom:link href="http://www.jayhuang.org/blog/category/coding/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jayhuang.org/blog</link>
	<description></description>
	<lastBuildDate>Wed, 24 Sep 2025 01:18:47 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.2</generator>
	<item>
		<title>Outsourcing overseas</title>
		<link>http://www.jayhuang.org/blog/outsourcing-overseas/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=outsourcing-overseas</link>
					<comments>http://www.jayhuang.org/blog/outsourcing-overseas/#respond</comments>
		
		<dc:creator><![CDATA[Jay Huang]]></dc:creator>
		<pubDate>Mon, 06 Oct 2014 18:02:15 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Consulting]]></category>
		<category><![CDATA[development]]></category>
		<category><![CDATA[freelance]]></category>
		<category><![CDATA[outsourcing]]></category>
		<category><![CDATA[projects]]></category>
		<guid isPermaLink="false">http://www.jayhuang.org/blog/?p=477</guid>

					<description><![CDATA[<p>I find this is a question that comes up very quickly to business owners looking to hire a developer/freelancer. Why would you hire a developer from North America when you can outsource to someone in India or China? I briefly touched upon this in a previous post about things you should know about freelancing, and I [&#8230;]</p>
<p>The post <a href="http://www.jayhuang.org/blog/outsourcing-overseas/">Outsourcing overseas</a> first appeared on <a href="http://www.jayhuang.org/blog">Jay Huang</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>I find this is a question that comes up very quickly to business owners looking to hire a developer/freelancer. Why would you hire a developer from North America when you can outsource to someone in India or China? I briefly touched upon this in a previous post about <a href="http://www.jayhuang.org/blog/things-you-should-know-about-freelancing/">things you should know about freelancing</a>, and I will explain this a bit more in detail based on my experiences.</p>
<p><strong>Time differences</strong></p>
<p>For starters, let&#8217;s say you&#8217;re in San Francisco and your work hours are 9~5. There is a 12.5 hour difference between you and your developer if you were to outsource. This is ignoring the fact that many <a href="http://www.jayhuang.org//blog-pages">freelance</a> workers can work obscure hours, including myself. However, more often than not, you will find that nearly all of your communication with an outsourced developer will be via asynchronous communication, which can be extremely problematic when tackling projects of higher complexity. It also means that any urgent issues will take at least 24 hours to resolve (if you&#8217;re asleep and your SaaS comes back online, it&#8217;s not completely the same as you seeing it come online and getting a chance to make sure everything is in order).</p>
<p><strong>Cultural differences</strong></p>
<p>Before I continue, I&#8217;d like to point out that I have worked with freelancers in India and China both directly (hired by myself), and indirectly (hired by my clients). Not everyone is aware that there are significant cultural differences between North America and India. One of the most notable ones I like to use as an example is that developers in India tend to be &#8220;yes (wo)men&#8221;.</p>
<p><span id="more-477"></span></p>
<p>There are many times where project requirements can be vague, the developer may be having issues, but these things will not be clarified/communicated with the client. Throughout the project, you will often get the impression that everything is sailing smoothly, and it won&#8217;t be until the project is coming to a wrap, or when you get a demo of the project at regular intervals (you should be asking for this) that find you out a lot of things may not have turned out as you expected/imagined. Of course this varies from person to person and happens in North America too, and I&#8217;m not sure why this seems to be more prevalent in freelancers from India. Perhaps it&#8217;s because they consider asking questions and bringing up technical challenges a sign of incompetence.</p>
<p><strong>Communication challenges</strong></p>
<p>This is actually not as big of an issue if you can find a developer with a good grasp of the English language. Though most freelancers in India are knowledgeable of English to some degree, more often than not, the challenges with communication begin to surface as you get into more detailed parts of the project. This, combined with the 2 points above, make it very difficult to move a project along and adapt to changes smoothly/efficiently.</p>
<p><strong>Maintenance and code quality</strong></p>
<p>Okay, this one is highly subjective and really happens within North America too. Often times, you will find that the code delivered by an outsourced developer works. Maybe you find a few bugs, and they get fixed. Great, right? The challenge is not actually getting everything to work. A huge issue that clients don&#8217;t consider when choosing to outsource is code maintainability. You might say, &#8220;I don&#8217;t understand code, and I don&#8217;t write code, so why should I care?&#8221;. Really, you should care a lot. Many times, instead of working with the client through technical challenges and pointing out that the deadline may be too rushed, outsourced developers will come up with &#8220;hacks&#8221;, and many of these combined end up making the product extremely brittle and prone to breakage. Breakage aside, any developer who has to work on this product further down the line will have to battle themselves whether to retroactively clean up those &#8220;hacks&#8221; and risk breaking things that appear to be working, or just building on top of the <a href="http://en.wikipedia.org/wiki/Technical_debt">technical debt</a> that has already been accrued. As the technical debt builds up, you will find changes taking more time, and (seemingly randomly) breaking other unrelated parts of the product. A quick hack can cause many headaches and become very expensive in the (near) future.</p>
<p><strong>Cost</strong></p>
<p>By and far the number one reason to justify outsourcing overseas is the cost savings. Many small business owners who are not technical and have not had prior experience outsourcing projects overseas are not aware of the risks and headaches that come with outsourcing. It&#8217;s not uncommon to have someone contact you about estimating a project and having them scoff at your rate then talk about how they can hire someone in India for $5 an hour (to be fair, these kind of clients are on my never-ever list too). And to get a good developer in India, even $5 is too low.</p>
<p>However, as mentioned in one of my previous posts, the math doesn&#8217;t usually work out the same way you&#8217;d expect it to. On one hand, the developer from India might quote you 700 hours at $5, which ends up at $3500. Someone local may charge you $150 an hour, but only bills 30 hours, which ends up only being $1000 more than the alternative. This is a bit of an extreme example, but it also disregards the savings from avoiding the issues related to outsourcing overseas. This discrepancy in hours billed may be caused by a different skill level, or they may simply be billing dishonestly (which can occur anywhere). Hourly rate is not a good indicator of value provided. This is the reason why some of my clients are charged based on blocks of time (think day/week basis). In fact, the working relationship between client and freelancer is also incredibly important. Someone who has worked with your company for an extended period of time likely has a better understanding of your business and is able to provide solutions that are tailored specifically towards your business needs. From personal experience, there have been times where I would propose a different solution, one that would make me less money, but would ultimately be a better choice for the client.</p>
<p><strong>Okay, but when should I outsource overseas?</strong></p>
<p>As someone working mostly in North America, my opinion is definitely biased. But while I have seen first hand the many issues that come up with hiring someone overseas, I do believe there are instances where it can make sense for your business. Projects that are smaller in scale and more isolated from the critical parts of your business, which have clear requirements specifications, may be a good choice for overseas labor from a cost perspective. The issues listed above may still apply, but having a smaller project, along with clear requirements specifications will go a long way towards helping mitigate/lessen the impact of the those issues. Depending on your budget, it may be your only option.</p>
<div class='shareaholic-canvas' data-app-id='9490350' data-app-id-name='category_below_content' data-app='recommendations' data-title='Outsourcing overseas' data-link='http://www.jayhuang.org/blog/outsourcing-overseas/' data-summary=''></div><p>The post <a href="http://www.jayhuang.org/blog/outsourcing-overseas/">Outsourcing overseas</a> first appeared on <a href="http://www.jayhuang.org/blog">Jay Huang</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>http://www.jayhuang.org/blog/outsourcing-overseas/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>My Amazon interview experience</title>
		<link>http://www.jayhuang.org/blog/my-amazon-interview-experience/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=my-amazon-interview-experience</link>
					<comments>http://www.jayhuang.org/blog/my-amazon-interview-experience/#comments</comments>
		
		<dc:creator><![CDATA[Jay Huang]]></dc:creator>
		<pubDate>Fri, 10 Jan 2014 23:23:05 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Reflection/thoughts]]></category>
		<category><![CDATA[amazon]]></category>
		<category><![CDATA[developer]]></category>
		<category><![CDATA[front-end]]></category>
		<category><![CDATA[interview]]></category>
		<category><![CDATA[web developer]]></category>
		<guid isPermaLink="false">http://www.jayhuang.org/blog/?p=417</guid>

					<description><![CDATA[<p>It all started back when I was still working at SAP. A few colleagues mentioned Amazon was opening up another office in Yaletown. I believe it was in January 2013 or so. I wasn&#8217;t very interested at first, but after hearing about it a couple times, I gave it some more thought and decided it [&#8230;]</p>
<p>The post <a href="http://www.jayhuang.org/blog/my-amazon-interview-experience/">My Amazon interview experience</a> first appeared on <a href="http://www.jayhuang.org/blog">Jay Huang</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>It all started back when I was still working at <a href="http://www.sap.com/">SAP</a>. A few colleagues mentioned <a href="http://www.amazon.com/">Amazon</a> was opening up another office in <a href="https://maps.google.ca/maps?q=yaletown+google+maps&amp;ie=UTF-8&amp;hq=&amp;hnear=0x548673d10d99f885:0x456d9c34bf28293f,Yaletown,+Vancouver,+BC&amp;gl=ca&amp;ei=_n7QUsb-IYrvoASGy4GYBw&amp;ved=0CCsQ8gEwAA">Yaletown</a>. I believe it was in January 2013 or so. I wasn&#8217;t very interested at first, but after hearing about it a couple times, I gave it some more thought and decided it wouldn&#8217;t hurt. I was going to leave SAP at the end of April, and if Amazon turned out to be a good fit, I just might go there. This was before I interviewed and got offers for Palo Alto, one other company, and <a href="http://www.jayhuang.org/blog/a-culture-of-beer-and-overtime/">the company I worked for from May to July</a>.</p>
<p>There were a few listings on their website, so I applied to a &#8220;Web Development Engineer&#8221; posting for Vancouver as I felt it was the best match for my skills and experience. I wasn&#8217;t actively looking for a job at that point, so I didn&#8217;t think much of it and pretty soon, forgot I had even applied. Then, out of the blue, I was contacted by one of Amazon&#8217;s recruiters on May 24th 2013 for an interview on the 29th. I seriously considered declining it as I had just moved to my new job for a month, and was certainly not looking to leave (yet).</p>
<p>As many people know, I absolutely hate speaking on the phone. First of all, I&#8217;m more of a listener, and when I&#8217;m speaking with a stranger for the first time on the phone, that comes across as unenthusiastic or uninterested. Secondly, it forces me to context switch and break my mental train of thought. Whether or not it&#8217;s pre-scheduled does not matter; I&#8217;m forced to abruptly pause my work and move my attention to something else. As a freelancer, I have the option to cut myself off from virtually any environmental disruptions, and prefer to allocate small time blocks to update or communicate with people/clients. Third and most importantly, it&#8217;s synchronous communication. When I have to pick up the phone and speak to someone, not only am I making an expensive context switch, I have to be wary of tone, wording, and other things that cause the other party to misunderstand me. Aside from that, I&#8217;m unable to give any issues more in-depth and careful thought, which really defeats the whole purpose of discussing them. But in those recent months I had been looking to make a conscious effort to expose myself to more social/human interaction, so I decided I would give it a try. I had nothing to lose anyways; I was working on stuff I enjoyed and this phone call would have no effect on me other than cause a bit more nervousness.</p>
<p><strong>Phone interview:</strong></p>
<p>I took the morning off (and made it up later) to do the phone interview. When I picked up the phone the interviewer introduced himself as a Web Development Engineer from Seattle. <span id="more-417"></span>Immediately I noticed the Indian accent and became nervous because I realized I already had trouble understanding him. He thanked me profusely for taking the interview (literally 5~6 thank yous), which was quite unexpected but also helped relieve some of my anxiety. Nevertheless, we proceeded with the interview. We went on <a href="http://collabedit.com/">collabedit</a> and he tested my understanding of some of the key features of Javascript, the design and implementation of a type of web component, a bit about HTTP and servers, understanding and application of CSS, and an algorithmic implementation question.</p>
<blockquote><p>The hiring team has really enjoyed speaking with you and we would like to schedule a time for you to come to Amazon for in-person interviews!</p></blockquote>
<p>Although I was able to answer all the questions, I was second guessing myself because I felt that I must have misunderstood something between the foreign accent and the poor phone connection. I thought that was the end of it and wrote it off as a nice experience. Then on June 11th, I got an email from a different recruiter saying that they would like me to go in for on-site interviews. Weird, I thought &#8212; almost everyone who I knew that interviewed with Amazon went through 2 or more phone interviews before going on-site. I&#8217;m certainly not going to complain about having less hurdles to jump through. Upon reading the email more closely, I realize they want me to fly down to Seattle for the interviews. I was perplexed; I thought the position was in Vancouver? It was, they said. But they still wanted me to fly down.</p>
<p>Paid flight, travel, food, and lodging? Okay I guess I&#8217;ll take a vacation day and head down. Better not forget my passport! Oh, passport&#8230;let me take a quick look. My passport was about to expire in 3 days. I quickly let the recruiter know and started the passport renewal process. After a long 3 weeks, I finally got my new passport. We scheduled the on-site for Monday, July 8th, arriving Sunday around noon.</p>
<p>Sunday comes around and I&#8217;ve arrived in Seattle. I didn&#8217;t have time to prepare for any of these interviews because of my full-time job, my freelance work, and attending night school. I decided I would walk around and figure out how to walk to the building (they have 7 in the area), and just roam a bit. Returning to the hotel, I headed to sleep early so I would be well rested. Unfortunately, I got no sleep that night. Something about the nice hotel bed or the fact that I was not doing my usual late-night freelance work made me restless.</p>
<p><strong>Interview #1:</strong></p>
<p>My first interview was at 10:15am and a 20 minute walk from the hotel (note that Amazon pays for your interview transportation expenses, which includes your flight + taxi to the interview should you need it). I headed out at 9:35 and arrived 20 minutes early to check-in, sign the non-disclosure form (which means I will not be sharing interview questions in this post; just a broad overview), and sit there to calm my nerves. I wasn&#8217;t nervous so much about the prospect of getting an offer or not as much as I was about sitting in a small room with a stranger and writing code on a giant whiteboard. There was a sudden change of the first interviewer, so it took him some time to come get me. Immediately upon sitting down, I was presented with a problem that was an integral part of Amazon&#8217;s marketplace websites. It was an algorithmic problem that the team had run into and solved, and on the front-end. I wrote the algorithm in Javascript.</p>
<p><strong>Interview #2:</strong></p>
<p>The next interviewer came to pick me up and go to lunch. He introduced himself as a developer on the team, but was acting temporarily as the manager because the previous one left recently. I didn&#8217;t have a specific preference in mind, so he took me to a small local sandwich shop where I ordered chicken ciabatta and he paid with a company credit card. He asked if I was interviewing for a position in Seattle, and seemed confused why I was flown down to Seattle when the position was for Vancouver. I was asked a lot of questions about my previous technical experience, technical challenges I faced, asked me to elaborate on some of the more interesting architectural solutions I&#8217;ve implemented and discussed trade-offs between other solutions. We had a pretty good discussion, but responding to his questions left little time to finish lunch, so he gave me the last 10 minutes to eat while he answered a few of my questions.</p>
<p><strong>Interview #3:</strong></p>
<p>This interview did not involve writing code. The interviewer was the manager of a major team within Amazon. He gave me an algorithmic question (also very relevant to Amazon), and I came up with a solution fairly quickly, but he noticed I was still deep in thought. I explained that it was the best solution I could come up with, but I was wondering if there could be a better way to do it. We ran over some of the details together, discussed potential trade-offs in a different algorithm, and decided my solution could not be any more efficient. I was also asked a behavioral question specific to Amazon&#8217;s business and core values.</p>
<p><strong>Interview #4:</strong></p>
<p>For this interview I had two interviewers; one of them was shadowing as he was fairly new to the company. They tested my understanding how browsers handled various things in HTML/CSS, then gave me a screenshot of a new release about to be pushed live, and asked me to write the HTML/CSS for the whole page.</p>
<p><strong>Interview #5:</strong></p>
<p>Here I ran into my interviewer from the phone interview. He asked me to explain the differences between two implementations in Javascript, and use cases of each one. I also wrote HTML/CSS/JS for a webpage component, with a focus on modular code. He then tested my low level understanding of how browsers handled the DOM, and I had to implement that from scratch. I was pretty tired at this point, and had some problems understanding his accent, but I think I did okay.</p>
<p><strong>Interview #6:</strong></p>
<blockquote><p>When I send you the offer on Wednesday&#8230;</p></blockquote>
<p>The last interview was with the lead recruiter from Vancouver (apparently he flew from Vancouver to Seattle to interview me, a candidate that was in Vancouver and had to fly to Seattle for the interviews&#8230;). He asked if I was tired after such a long day, and then counted 7 interviews. I only remember 6, but he had the official list so I guess it&#8217;s 7. Maybe he was talking about interviewers. He mentioned I had received great feedback and that they were excited to move forward. He then spent the remaining 35~40 minutes drawing on the whiteboard the compensation details of the position, including the signing bonus(es), equity options, performance bonus, how I could choose between more options or cash for the bonus, the benefits of choosing one over the other, the base salary, etc. He said &#8220;when I send you the offer on Wednesday, you will see _______&#8221; on a couple occasions. Then he walked out with me and explained that the team in Vancouver was very diverse and full of cool people, how it was much like a startup, and that I would love it. He then said &#8220;once you accept the offer, we will fly you back down around 3 weeks later to do the training here, because the Vancouver offices are still quite small and we don&#8217;t have many hires that week&#8221;.</p>
<p>After not hearing back from him, I emailed him to follow up. I didn&#8217;t hear back so I emailed him another two times, with no response. It&#8217;s been months and he has yet to reply to me either with an offer, or a rejection letter. I guess it didn&#8217;t work out after all.</p>
<p>Aside from the lack of response from the lead recruiter and the weird logistics of sending me to Seattle to interview for a position in Vancouver and having all the interviewers puzzled, the interviews were pretty interesting. Each interview during the on-site tested a specific skill/topic required for one to be successful in the position, ensuring that there are no glaring gaps in knowledge. I would say it was one of the best interviews I&#8217;ve done for a front-end position in terms of getting a full picture of the candidate&#8217;s knowledge and experience.</p>
<p>Edit: I&#8217;ve received some questions regarding reimbursement; Amazon does provide reimbursement for travel and other expenses. You are assigned a daily budget for each category (food, transit, etc), and are asked to keep the receipts and send them in as long as they were for the purpose of interviewing (not for your personal leisure). They also paid for my hotel, but did not pay for damage deposit. Your situation may differ but it&#8217;s good to keep that in mind should you be asked to pay before getting your room.</p>
<p>I received a cheque covering all receipts I sent in (I forgot most of the food receipts) after about 6~8 weeks. Rental car wasn&#8217;t offered, but taxi receipts were reimbursed, up to the daily limit as well.</p>
<p><strong>Join the discussion on HN:</strong> <a href="https://news.ycombinator.com/item?id=7040382">https://news.ycombinator.com/item?id=7040382</a></p>
<div class='shareaholic-canvas' data-app-id='9490350' data-app-id-name='category_below_content' data-app='recommendations' data-title='My Amazon interview experience' data-link='http://www.jayhuang.org/blog/my-amazon-interview-experience/' data-summary=''></div><p>The post <a href="http://www.jayhuang.org/blog/my-amazon-interview-experience/">My Amazon interview experience</a> first appeared on <a href="http://www.jayhuang.org/blog">Jay Huang</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>http://www.jayhuang.org/blog/my-amazon-interview-experience/feed/</wfw:commentRss>
			<slash:comments>8</slash:comments>
		
		
			</item>
		<item>
		<title>Pushing code to GitHub as Linus Torvalds</title>
		<link>http://www.jayhuang.org/blog/pushing-code-to-github-as-linus-torvalds/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=pushing-code-to-github-as-linus-torvalds</link>
					<comments>http://www.jayhuang.org/blog/pushing-code-to-github-as-linus-torvalds/#comments</comments>
		
		<dc:creator><![CDATA[Jay Huang]]></dc:creator>
		<pubDate>Tue, 17 Dec 2013 02:16:14 +0000</pubDate>
				<category><![CDATA[Coding]]></category>
		<category><![CDATA[Reflection/thoughts]]></category>
		<category><![CDATA[code]]></category>
		<category><![CDATA[git]]></category>
		<category><![CDATA[github]]></category>
		<category><![CDATA[identity]]></category>
		<category><![CDATA[impersonating]]></category>
		<category><![CDATA[linus torvalds]]></category>
		<guid isPermaLink="false">http://www.jayhuang.org/blog/?p=412</guid>

					<description><![CDATA[<p>I had no idea what I was doing. It was my first time using GitHub. I had an account for a while but didn&#8217;t have any code to open source. All of my freelance work is bound by NDA, as is the work I&#8217;ve done at my 2 previous full-time positions. I decided to give [&#8230;]</p>
<p>The post <a href="http://www.jayhuang.org/blog/pushing-code-to-github-as-linus-torvalds/">Pushing code to GitHub as Linus Torvalds</a> first appeared on <a href="http://www.jayhuang.org/blog">Jay Huang</a>.</p>]]></description>
										<content:encoded><![CDATA[<p>I had no idea what I was doing. It was my first time using <a href="https://github.com/">GitHub</a>. I had an account for a while but didn&#8217;t have any code to open source. All of my freelance work is bound by NDA, as is the work I&#8217;ve done at my 2 previous full-time positions.</p>
<p>I decided to give it a try and just push <em>anything</em> onto my GitHub account. But soon the realization that I will never be able to showcase any of my biggest accomplishments on GitHub settled in and my curiosity and eagerness to break things took over.</p>
<p>Let&#8217;s backtrack a bit. Due to our financial situation, I never really had any toys as a kid. I have fond memories of assigning myself the impossible task of persuading my mother to buy me one of the huge bouncy balls at Superstore. For <em>years</em>. In the end, mom won; Superstore no longer sold the bouncy balls, so I would be unable to beg any further. Then, one day, a family friend came to our place and brought me a little mechanical dog that would bark and spin in circles. It was probably more expensive than any toys that I had up to that point combined. It didn&#8217;t matter, it was only a few months past my 4th birthday, I did not yet possess a firm understanding of money, and I was intrigued. I raced into the bedroom and immediately began systematically tearing the dog apart &#8212; screws, rotator, gears, plastic bands, batteries, etc. Once I had figured out how everything was working together to create this dark magic and it was time to put the dog back together, I never bothered to. A couple years later when I would finally get my first computer and learn how to create websites, I quickly moved on to learning <a href="http://technewsgalore.com/site/04/15/sql-injection-tutorial-by-for3v3rforgott3n">how to break them</a>. I always had an eagerness to break things, but I digress.</p>
<p>I didn&#8217;t try to break anything, but I had discovered a peculiarity. I was able to push code to GitHub as Linus Torvalds, the creator of Git (or you may know of him from something called Linux&#8230;). While I was using my own SSH key to push to a repository that only I was allowed to push to, GitHub showed &#8216;me&#8217; as &#8216;Linus&#8217;, effectively making one of the most highly respected programmers in the world a contributor to my project. (Yay!)</p>
<p>Here is one such commit:</p>
<p><a href="http://www.jayhuang.org/blog/wp-content/uploads/2013/12/linus.jpg"><img fetchpriority="high" decoding="async" class="aligncenter wp-image-530 size-full" src="http://www.jayhuang.org/blog/wp-content/uploads/2013/12/linus.jpg" width="1920" height="1080" srcset="http://www.jayhuang.org/blog/wp-content/uploads/2013/12/linus.jpg 1920w, http://www.jayhuang.org/blog/wp-content/uploads/2013/12/linus-300x169.jpg 300w, http://www.jayhuang.org/blog/wp-content/uploads/2013/12/linus-768x432.jpg 768w, http://www.jayhuang.org/blog/wp-content/uploads/2013/12/linus-1024x576.jpg 1024w, http://www.jayhuang.org/blog/wp-content/uploads/2013/12/linus-624x351.jpg 624w" sizes="(max-width: 1920px) 100vw, 1920px" /></a></p>
<p>&nbsp;</p>
<p>What&#8217;s more, clicking on the author of that commit takes you to <a href="https://github.com/torvalds">Linus&#8217; GitHub profile</a>, where he is a frequent contributor to the <a href="https://github.com/torvalds/linux">Linux kernel source tree</a>.</p>
<p><strong>Note:</strong> <em>This has been accomplished without compromising anyone else&#8217;s GitHub account. Read on for the details.</em></p>
<p>All I had done was setup git with my SSH key for Github, then changed my git <code>user.email</code> to the same email that is being linked to Linus&#8217; account: torvalds@linux-foundation.org (note that this is publicly available).</p>
<p>It seems after I have already authenticated myself against GitHub, it just tries to grab whichever user is associated with the email I&#8217;m using in commits, and voila!</p>
<p>It&#8217;s occurred to me that many people already know about this, and was probably <a href="https://help.github.com/articles/why-are-my-commits-linked-to-the-wrong-user">by design on GitHub&#8217;s end</a>. Nevertheless, although it did not contribute to the compromise of any accounts, and did not open up any unintended privileges, I thought the behavior was incredibly misleading and disruptive. Any user in the world is effectively able to push commits (to repositories that they already have permission to contribute to), as any other user, potentially using the reputation of someone like Linus to cause mischief and malice. So I decided to report it as a bug to GitHub anyways.</p>
<p>They got back to me 4 days later, on October 17th, and explained it was in fact, by design as I had suspected.</p>
<blockquote><p>Hi Jay,</p>
<p>Thanks for getting in touch.</p>
<p>It&#8217;s important to note that this is not a security concern or a bug – impersonating another GitHub user in this fashion doesn&#8217;t grant you access to any of their repositories or give you any privileges you didn&#8217;t already have.</p>
<p>Rather, this is a feature of GitHub that can be abused. We take abuse very seriously. If someone is wrongfully impersonating you, please let us know and we will remove the impersonated commits and deal with them as quickly as we can.</p>
<p>Over the past several years, millions of people have used this feature to collaborate with colleagues and strangers successfully. Yet rarely, if ever, has anyone used it to abuse another user. Usually, we find that people impersonate others by creating a fake account with a similar username and your avatar, then they leave offensive comments on issues.</p>
<p>The sad truth is impersonation is rampant on the internet and removing legitimate features won&#8217;t stop an individual with malicious intent.</p>
<p>Rather than make this feature less useful for everyone who uses it responsibly, we strive to make GitHub a fun and safe environment by swiftly dealing with bullies and giving you ways to ignore them.</p>
<p>If you are still concerned about this, your team can choose to use Git&#8217;s built in options to sign with a GPG key. If you are concerned about having a verifiable identity on your commits, you should check into the `git commit -S` command.</p>
<p>Hope that helps.</p>
<p>Cheers,<br />
Petros</p></blockquote>
<p>Well it&#8217;s certainly their decision whether or not this is a &#8220;feature&#8221;, but I do feel it&#8217;s quite misleading. Sure the internet is rampant with people creating fake accounts with a similar username and avatar in an attempt to impersonate, but in this case, the impersonator has the help of GitHub. Exact same username, exact same avatar, even exact same profile link. The commit doesn&#8217;t seem to show up on the &#8220;victim&#8217;s&#8221; commit activity, but it&#8217;s certainly real enough. Rather than getting reports of this behavior and then removing commits and &#8220;dealing with&#8221; the user, perhaps this feature should be better refined to reduce this support overhead and chaos.</p>
<p>I understand this feature has the benefits of allowing people to push commits with emails they don&#8217;t own, such as &#8216;example@example.com&#8217; that I occasionally use, but having your commits attributed to a different user is a whole different issue.</p>
<p>It may be a nice feature, but it&#8217;s also quite the design flaw.</p>
<p><strong>Join the discussion on HN: </strong><a href="https://news.ycombinator.com/item?id=6918343">https://news.ycombinator.com/item?id=6918343</a></p>
<div class='shareaholic-canvas' data-app-id='9490350' data-app-id-name='category_below_content' data-app='recommendations' data-title='Pushing code to GitHub as Linus Torvalds' data-link='http://www.jayhuang.org/blog/pushing-code-to-github-as-linus-torvalds/' data-summary=''></div><p>The post <a href="http://www.jayhuang.org/blog/pushing-code-to-github-as-linus-torvalds/">Pushing code to GitHub as Linus Torvalds</a> first appeared on <a href="http://www.jayhuang.org/blog">Jay Huang</a>.</p>]]></content:encoded>
					
					<wfw:commentRss>http://www.jayhuang.org/blog/pushing-code-to-github-as-linus-torvalds/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
	</channel>
</rss>
