{"id":1334,"date":"2017-02-23T17:44:00","date_gmt":"2017-02-24T01:44:00","guid":{"rendered":"http:\/\/www.bradleycbuchanan.com\/b\/?p=1334"},"modified":"2017-02-24T21:36:37","modified_gmt":"2017-02-25T05:36:37","slug":"my-work-in-2016","status":"publish","type":"post","link":"https:\/\/www.bradleycbuchanan.com\/b\/my-work-in-2016\/","title":{"rendered":"My work in 2016"},"content":{"rendered":"<p class=\"md-end-block md-heading md-focus\">I just finished my tenth full year as a software professional, and I&#8217;m starting\u00a0my third year with <a href=\"https:\/\/code.org\">Code.org<\/a>. \u00a0One of the perks of this job is that all of my work is <a href=\"https:\/\/github.com\/islemaster\">public on GitHub<\/a>. \u00a0So let&#8217;s put it under a microscope!<\/p>\n<p class=\"md-end-block md-heading md-focus\"><a href=\"http:\/\/www.bradleycbuchanan.com\/b\/wp-content\/uploads\/2017\/02\/github_contribution_graph.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-1347 size-full\" src=\"http:\/\/www.bradleycbuchanan.com\/b\/wp-content\/uploads\/2017\/02\/github_contribution_graph.png\" width=\"736\" height=\"166\" srcset=\"https:\/\/www.bradleycbuchanan.com\/b\/wp-content\/uploads\/2017\/02\/github_contribution_graph.png 736w, https:\/\/www.bradleycbuchanan.com\/b\/wp-content\/uploads\/2017\/02\/github_contribution_graph-300x68.png 300w\" sizes=\"auto, (max-width: 736px) 100vw, 736px\" \/><\/a><!--more--><\/p>\n<p><a name=\"stats\"><\/a><\/p>\n<h1 class=\"md-end-block md-heading md-focus\">Stats<\/h1>\n<p>I like numbers, so we&#8217;ll start with that &#8211; a nice, ten-thousand-foot view. \u00a0All stats in this section are for dates 2016-02-20..2017-02-15 (because we gave peer feedback in February).<\/p>\n<p><strong><a href=\"https:\/\/github.com\/search?q=type:pr%20author:islemaster%20merged:2016-02-20..2017-02-15\">I merged 538 pull requests this year<\/a>,\u00a0<\/strong>up from <a href=\"https:\/\/github.com\/search?utf8=%E2%9C%93&amp;q=type%3Apr+author%3Aislemaster+merged%3A2015-02-20..2016-02-15&amp;type=Issues&amp;ref=searchresults\">410 last year<\/a>.\u00a0491 (91%) of those were <a href=\"https:\/\/github.com\/search?utf8=%E2%9C%93&amp;q=type%3Apr+author%3Aislemaster+merged%3A2016-02-20..2017-02-15+user%3Acode-dot-org&amp;type=Issues&amp;ref=searchresults\">within the code-dot-org organization<\/a>.<\/p>\n<ul>\n<li><a spellcheck=\"false\" href=\"https:\/\/github.com\/search?utf8=%E2%9C%93&amp;q=type%3Apr+author%3Aislemaster+merged%3A2016-02-20..2017-02-15+repo%3Acode-dot-org%2Fcode-dot-org&amp;type=Issues&amp;ref=searchresults\">460 on code-dot-org\/code-dot-org<\/a><\/li>\n<li><a spellcheck=\"false\" href=\"https:\/\/github.com\/search?utf8=%E2%9C%93&amp;q=type:pr+author:islemaster+merged:2016-02-20..2017-02-15+repo:code-dot-org\/p5.play&amp;type=Issues&amp;ref=searchresults\">17 on code-dot-org\/p5.play<\/a><\/li>\n<li><a spellcheck=\"false\" href=\"https:\/\/github.com\/search?utf8=%E2%9C%93&amp;q=type%3Apr+author%3Aislemaster+merged%3A2016-02-20..2017-02-15+repo%3Acode-dot-org%2Fpiskel&amp;type=Issues&amp;ref=searchresults\">9 on code-dot-org\/piskel<\/a><\/li>\n<li><a spellcheck=\"false\" href=\"https:\/\/github.com\/search?utf8=%E2%9C%93&amp;q=type%3Apr+author%3Aislemaster+merged%3A2016-02-20..2017-02-15+repo%3Acode-dot-org%2Freact-color&amp;type=Issues&amp;ref=searchresults\">3 on code-dot-org\/react-color<\/a><\/li>\n<li><a spellcheck=\"false\" href=\"https:\/\/github.com\/search?utf8=%E2%9C%93&amp;q=type%3Apr+author%3Aislemaster+merged%3A2016-02-20..2017-02-15+repo%3Acode-dot-org%2Freactcss&amp;type=Issues&amp;ref=searchresults\">1 on code-dot-org\/reactcss<\/a><\/li>\n<li><a spellcheck=\"false\" href=\"https:\/\/github.com\/search?utf8=%E2%9C%93&amp;q=type%3Apr+author%3Aislemaster+merged%3A2016-02-20..2017-02-15+repo%3Acode-dot-org%2Fplayground-io&amp;type=Issues&amp;ref=searchresults\">1 on code-dot-org\/playground-io<\/a><\/li>\n<li><span class=\"\"><a spellcheck=\"false\" href=\"https:\/\/github.com\/search?utf8=%E2%9C%93&amp;q=type%3Apr+author%3Aislemaster+merged%3A2016-02-20..2017-02-15+-user%3Acode-dot-org&amp;type=Issues&amp;ref=searchresults\">47 outside of code-dot-org<\/a><\/span>\u00a0(though the vast majority are work-related upstream changes)<\/li>\n<\/ul>\n<p><strong><a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/graphs\/contributors?from=2016-02-20&amp;to=2017-02-15&amp;type=c\">I made 1,487 commits on code-dot-org\/code-dot-org<\/a>,\u00a0<\/strong>ranking #1\u00a0by commit count to that repository. \u00a0That&#8217;s actually <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/graphs\/contributors?from=2015-02-20&amp;to=2016-02-15&amp;type=c\">down from 1,748 last year<\/a>, lowering my\u00a0average commits per pull request from 4.26\u00a0to 3.23 c\/pr.<\/p>\n<p><strong><a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/graphs\/contributors?from=2016-02-20&amp;to=2017-02-15&amp;type=c\">I changed\u00a0+117,594 \/ -126,514 lines on code-dot-org\/code-dot-org<\/a>,\u00a0<\/strong>ranking #6\/#7 by lines changed. \u00a0Though often a misleading statistic (you get a lot of credit for checking in generated content or extracting libraries) I&#8217;m happy that I removed more code than I added this year. \u00a0This is also down from <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/graphs\/contributors?from=2015-02-20&amp;to=2016-02-15&amp;type=a\">+277,976 \/ -231,200 last year<\/a>.<\/p>\n<p><strong><a href=\"https:\/\/github.com\/search?utf8=%E2%9C%93&amp;q=type%3Apr+involves%3Aislemaster+-author%3Aislemaster+created%3A2016-02-20..2017-02-15&amp;type=Issues&amp;ref=searchresults\">I participated in 823 pull requests by other people<\/a>, \u00a0<\/strong>up significantly from <a href=\"https:\/\/github.com\/search?utf8=%E2%9C%93&amp;q=type%3Apr+involves%3Aislemaster+-author%3Aislemaster+created%3A2015-02-20..2016-02-15&amp;type=Issues&amp;ref=searchresults\">298 last year<\/a>.\u00a0Counting code reviews is tricky, especially since <a href=\"https:\/\/github.com\/blog\/2291-introducing-review-requests\">GitHub rolled out review requests in December.<\/a>\u00a0 We can infer some things though.<\/p>\n<ul>\n<li><a href=\"https:\/\/github.com\/search?utf8=%E2%9C%93&amp;q=type%3Apr+commenter%3Aislemaster+-author%3Aislemaster+created%3A2016-02-20..2017-02-15&amp;type=Issues&amp;ref=searchresults\">I commented on 768 pull requests<\/a>.<\/li>\n<li>Of those I commented on, <a href=\"https:\/\/github.com\/search?utf8=%E2%9C%93&amp;q=type%3Apr+assignee%3Aislemaster+commenter%3Aislemaster+-author%3Aislemaster+created%3A2016-02-20..2017-02-15&amp;type=Issues&amp;ref=searchresults\">605 were assigned to me<\/a>, up from <a href=\"https:\/\/github.com\/search?utf8=%E2%9C%93&amp;q=type%3Apr+assignee%3Aislemaster+commenter%3Aislemaster+-author%3Aislemaster+created%3A2015-02-20..2016-02-15&amp;type=Issues&amp;ref=searchresults\">just 128 last year<\/a>. \u00a0This is probably the best estimate of &#8220;code reviews&#8221; though I can think of cases where it doesn&#8217;t fit.<\/li>\n<li>GitHub only identifies <a href=\"https:\/\/github.com\/search?utf8=%E2%9C%93&amp;q=type%3Apr+reviewed-by%3Aislemaster+-author%3Aislemaster+created%3A2016-02-20..2017-02-15&amp;type=Issues&amp;ref=searchresults\">259 pull requests as reviewed by me<\/a>.<\/li>\n<\/ul>\n<p>That&#8217;s about 2.5 reviews per day, on average (605 reviews \/ 247 working days) up from 0.52 last year. \u00a0I think it&#8217;s also notable that I reviewed more PRs than I merged this year. \u00a0This suggests a huge change in my role on the team, and I&#8217;ve felt it.<\/p>\n<p><a href=\"http:\/\/www.bradleycbuchanan.com\/b\/wp-content\/uploads\/2017\/02\/Plot-3.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-1350\" src=\"http:\/\/www.bradleycbuchanan.com\/b\/wp-content\/uploads\/2017\/02\/Plot-3.png\" alt=\"\" width=\"740\" height=\"416\" srcset=\"https:\/\/www.bradleycbuchanan.com\/b\/wp-content\/uploads\/2017\/02\/Plot-3.png 740w, https:\/\/www.bradleycbuchanan.com\/b\/wp-content\/uploads\/2017\/02\/Plot-3-300x169.png 300w\" sizes=\"auto, (max-width: 740px) 100vw, 740px\" \/><\/a><\/p>\n<p><strong>I contributed to at least 20 repositories in my work at Code.org this year,\u00a0<\/strong>where contribution includes reporting issues and participating in discussion, in addition to submitting code and documentation changes. \u00a014 of these were outside the code-dot-org organization.<\/p>\n<p><a name=\"features\"><\/a><\/p>\n<h1>Features<\/h1>\n<p><span class=\"md-line md-end-block\">Of course, it&#8217;s important to look at\u00a0<em>meaningful contributions<\/em> in addition to raw numbers. \u00a0Here are some changes I&#8217;m proud of this year.<\/span><\/p>\n<h2>Game Lab<\/h2>\n<p>I spent most of my year on a tool called Game Lab that&#8217;s used in our new <a href=\"https:\/\/code.org\/educate\/csd\">CS Discoveries<\/a> course for grades 6-9. \u00a0Game Lab is an online\u00a0JavaScript IDE (using <a href=\"https:\/\/github.com\/droplet-editor\/droplet\">droplet<\/a> and similar to <a href=\"https:\/\/code.org\/educate\/applab\">App Lab<\/a>) with a built-in game engine (<a href=\"https:\/\/github.com\/molleindustria\/p5.play\">p5.play<\/a>) and animation editor (<a href=\"https:\/\/github.com\/juliandescottes\/piskel\">Piskel<\/a>). \u00a0The tool is still in beta but it&#8217;s already a lot of fun to play with &#8211; I&#8217;m quite proud of <a href=\"https:\/\/studio.code.org\/projects\/gamelab\/XTiROHdHBhywT7P5D-Y-aA\">Tennis Jump<\/a>.<\/p>\n<p><strong>I did a lot of work on the p5.play engine this year,\u00a0<\/strong>including lots of new test coverage and a collision system overhaul that hasn&#8217;t been accepted upstream yet but we are <a href=\"https:\/\/github.com\/code-dot-org\/p5.play\">using on our fork<\/a>.<\/p>\n<p><strong>I integrated Piskel into Game Lab<\/strong>, which involved <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/8780\">loading it in an iframe within our React-rendered UI<\/a> and <a href=\"https:\/\/github.com\/code-dot-org\/piskel\/blob\/master\/src\/js\/PiskelApi.js\">writing a nice API<\/a> that Game Lab can use to communicate with it.<\/p>\n<p><strong>I designed and built an <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/10685\">S3-backed Animation Library<\/a><\/strong> for Game Lab that enables fast keyword search, is easy to update and propagates library changes across environments as we deploy new code.<\/p>\n<h2>Internet Simulator<\/h2>\n<p>The <a href=\"https:\/\/code.org\/educate\/csp\/widgets#internet-simulator\">Internet Simulator<\/a> was my biggest\u00a0project in 2015. \u00a0It&#8217;s a real-time online multiplayer network simulation tool, used in our <a href=\"https:\/\/code.org\/educate\/csp\">CS Principles<\/a> course to explore everything from binary encoding and the shared wire problem to routing and DNS.<\/p>\n<p>The &#8216;multiplayer&#8217; part of the simulator gives it some unique challenges among the tools on our site, especially when it comes to scaling up. \u00a0I did some careful projections for Fall 2016, and we managed to <strong>scale simulator traffic up about 550%<\/strong> over our peak pilot traffic in Fall 2015 without issue.<\/p>\n<h2>Public Key Cryptography Widget<\/h2>\n<p><strong><a href=\"https:\/\/studio.code.org\/s\/csp4\/stage\/7\/puzzle\/6\">I implemented a redesigned version of our Public Key Cryptography widget<\/a>. \u00a0<\/strong>It also gets used in CS Principles. \u00a0This was a fun bit of greenfield React work that you can <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/tree\/staging\/apps\/src\/publicKeyCryptography\">see here on GitHub<\/a>.<\/p>\n<h2>Testing improvements<\/h2>\n<p><strong><a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/8504\">I separated our JavaScript tests into a unit test suite and integration test suite<\/a>.\u00a0<\/strong>This had major benefits for iteration speed and presented a cleaner interface for running tests.<\/p>\n<p><strong>I built a <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/9118\">progress page for our UI tests<\/a><\/strong> and\u00a0<strong>started keeping <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/8846\">build logs<\/a> and <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/8791\">test output<\/a> on S3. \u00a0<\/strong>Before we were scanning a Slack room to see whether tests were done and what had failed.<\/p>\n<p><strong>I helped the team improve\u00a0Circle CI test stability from less than 50% reliable to more than 95% reliable.<\/strong> \u00a0We have a separate acceptance test environment that catches things before we ship, but making Circle CI run usefully on all of our pull requests catches problems early has a big positive impact on team productivity.<\/p>\n<p>My main contributions to this effort were presenting a weekly report of stability metrics and top actionable issues, numerous fixes, a <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/11024\">generalized build flag system<\/a>, and even a <a href=\"https:\/\/github.com\/applitools\/Eyes.Selenium.Ruby\/pull\/46\">fix to Applitools<\/a>.<\/p>\n<h2>Technical debt<\/h2>\n<p><strong><a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/7766\">I overhauled our main README<\/a>.<\/strong>\u00a0 It used to be much harder to scan. \u00a0People seem happy with my changes &#8211; very little has been done with it since.<\/p>\n<p><strong>I set up a way to <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/7367\">share color constants between Ruby and JavaScript<\/a>.<\/strong> \u00a0We probably should have done this a long time ago. \u00a0Since then the team has found ways to share other code as well.<\/p>\n<p><strong>I kept lots of JavaScript dependencies up-to-date.<\/strong> <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/7083\">React<\/a>, <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/8178\">React again<\/a>, <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/9888\">webpack<\/a>, <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/9684\">lodash<\/a>, <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/10089\">lodash again<\/a>, <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/10076\">React <em>yet\u00a0again<\/em><\/a>, <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/10273\">react-color<\/a>, <a href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/10279\">pusher-js<\/a>&#8230;<\/p>\n<p><strong>I gave our apps a top-level React wrapper.<\/strong>\u00a0\u00a0<span class=\"md-line md-end-block\">A year ago, we had been using React and Redux in isolated pockets but hadn&#8217;t yet made it a major paradigm across our application. In Feburary-March 2016 I upgraded React to the latest stable version and gave all of our apps a top-level React wrapper so we could start building from the outside-in (the way React prefers to be used).<\/span><span class=\"md-line md-end-block\">This was a large change across several PRs that was groundwork for a lot of our new development this year, and I think has had a clear positive impact (<span class=\"\"><a spellcheck=\"false\" href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/7000\">7000<\/a><\/span>, <span class=\"\"><a spellcheck=\"false\" href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/7026\">7026<\/a><\/span>, <span class=\"\"><a spellcheck=\"false\" href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/7051\">7051<\/a><\/span>, <span class=\"\"><a spellcheck=\"false\" href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/7063\">7063<\/a><\/span>, <span class=\"\"><a spellcheck=\"false\" href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/7083\">7083<\/a><\/span>, <span class=\"\"><a spellcheck=\"false\" href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/7148\">7148<\/a><\/span>, <span class=\"\"><a spellcheck=\"false\" href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/7301\">7301<\/a><\/span>, <span class=\"\"><a spellcheck=\"false\" href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/7328\">7328<\/a><\/span>).<\/span><\/p>\n<p><a name=\"strengths\"><\/a><\/p>\n<h1 class=\"md-end-block md-heading\">Strengths<\/h1>\n<p>Looking back on the year and reviewing my peer feedback, here are some things I did well.<\/p>\n<p><strong>Code craftsmanship.<\/strong> This was the most common theme in my peer feedback, showing up in terms\u00a0like &#8220;technical depth,&#8221; &#8220;clarify,&#8221; &#8220;methodical,&#8221; &#8220;architecture,&#8221; and &#8220;cares about creative and interesting solutions.&#8221; \u00a0I care about this a lot and see it as my most natural talent as a software developer.<\/p>\n<p><strong>Pull request descriptions.<\/strong> My pull requests are the best documentation of my changes and the reasons for them, and I regularly refer back to them. If we ranked PR description quality, I suspect I sit near the top of the team, on a team that (in my experience) is already above average among open-source projects when it comes to documenting changes. My peers also called this out as one of my strengths. Examples: My last three closed PRs (<span class=\"\"><a spellcheck=\"false\" href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/13312\">13312<\/a><\/span>, <span class=\"\"><a spellcheck=\"false\" href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/13286\">13286<\/a><\/span>, <span class=\"\"><a spellcheck=\"false\" href=\"https:\/\/github.com\/code-dot-org\/code-dot-org\/pull\/13252\">13252<\/a><\/span>), or <span class=\"\"><a spellcheck=\"false\" href=\"https:\/\/github.com\/molleindustria\/p5.play\/pull\/39\">this one from nearly a year ago<\/a><\/span>.<\/p>\n<p><span class=\"md-line md-end-block\"><span class=\"\"><strong>Professionalism.<\/strong><\/span>\u00a0Noted by several of my peers. Outside of pull requests, I do pretty well at other documentation (work on our READMEs, tech specs, etc) and at surfacing my progress to interested parties. \u00a0I&#8217;m willing to jump into any part of our project and try to pick up tasks that nobody wants to do. I try to be available to answer questions at all times and I likewise lean on the team and ask questions when I am blocked. \u00a0I express passion for our work.<\/span><\/p>\n<p><span class=\"md-line md-end-block\"><span class=\"\"><strong>Planning, projections and scaling.<\/strong><\/span>\u00a0This is a new strength for me this year &#8211; not necessarily estimation of how long work will take (I&#8217;m still pretty bad at that) but of what sort of traffic\u00a0we expect and can maintain. The planning and projections we did\u00a0for Internet Simulator were extremely useful. \u00a0I&#8217;ve learned a ton about what goes into handling lots of traffic this year.<\/span><\/p>\n<p><span class=\"md-line md-end-block\"><span class=\"\"><strong>Automation and tooling.<\/strong><\/span>\u00a0Another new strength. I&#8217;ve done quite a bit of internal support work this year: Building better dev team tools, upgrading libraries and cleaning up the way we use dependencies, making our tests run better, trying to get things out of our collective brain-cache. \u00a0Apparently my peers also reported this.<\/span><\/p>\n<p><span class=\"md-line md-end-block\"><span class=\"\"><strong>Team Influence.<\/strong><\/span>\u00a0A third new strength. \u00a0A recurring theme in feedback was appreciation of my work on test stability, especially the weekly reports. \u00a0My manager called out that instead of coming across as a complaint or a name-and-shame session, I managed to be encouraging and help us make steady progress.<\/span><\/p>\n<p><a name=\"goals\"><\/a><\/p>\n<h1>Goals<\/h1>\n<p>What will I work on next? \u00a0This question keeps getting harder to answer, but here are some possibilities:<\/p>\n<p><span class=\"md-line md-end-block\"><span class=\"\"><strong>Measuring my defect rate.<\/strong><\/span> Looking back I have a <span class=\"\"><em>suspicion<\/em><\/span> that I introduced fewer bugs this year than I have in past years, but I realized I don&#8217;t have data to back that up. I need to learn how to measure this and start tracking it.<\/span><\/p>\n<p><span class=\"md-line md-end-block\"><span class=\"\"><strong>More consistent test coverage.<\/strong><\/span> This still isn&#8217;t 100% natural to me, and recent code coverage instrumentation has revealed that the Internet Simulator\u00a0code is not covered as well as I thought (although we don&#8217;t get many bug reports about it anymore).<\/span><\/p>\n<p><span class=\"md-line md-end-block\"><span class=\"\"><strong>I need a new book.<\/strong><\/span> Reading I&#8217;ve done in the past has had a major impact on my practice, but I haven&#8217;t read a new software book in a while. \u00a0Maybe something on software architecture?<\/span><\/p>\n<p><strong>Find a new multiplier on the team.<\/strong> \u00a0I&#8217;ll keep looking for the next thing we can automate to keep development running smoothly. \u00a0Maybe automating my weekly test stability reports, or lowering our test runtime, or getting us to true continuous deployment. \u00a0Not sure exactly what it will be yet.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>I just finished my tenth full year as a software professional, and I&#8217;m starting\u00a0my third year with Code.org. \u00a0One of the perks of this job is that all of my work is public on GitHub. \u00a0So let&#8217;s put it under a microscope!<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[418,8],"tags":[429,432,430,431],"class_list":["post-1334","post","type-post","status-publish","format-standard","hentry","category-blog","category-programmer","tag-code-org","tag-open-source","tag-retrospective","tag-workmetrics"],"_links":{"self":[{"href":"https:\/\/www.bradleycbuchanan.com\/b\/wp-json\/wp\/v2\/posts\/1334","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bradleycbuchanan.com\/b\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bradleycbuchanan.com\/b\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bradleycbuchanan.com\/b\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bradleycbuchanan.com\/b\/wp-json\/wp\/v2\/comments?post=1334"}],"version-history":[{"count":20,"href":"https:\/\/www.bradleycbuchanan.com\/b\/wp-json\/wp\/v2\/posts\/1334\/revisions"}],"predecessor-version":[{"id":1364,"href":"https:\/\/www.bradleycbuchanan.com\/b\/wp-json\/wp\/v2\/posts\/1334\/revisions\/1364"}],"wp:attachment":[{"href":"https:\/\/www.bradleycbuchanan.com\/b\/wp-json\/wp\/v2\/media?parent=1334"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bradleycbuchanan.com\/b\/wp-json\/wp\/v2\/categories?post=1334"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bradleycbuchanan.com\/b\/wp-json\/wp\/v2\/tags?post=1334"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}