{"id":42682,"date":"2019-06-05T08:31:43","date_gmt":"2019-06-05T06:31:43","guid":{"rendered":"https:\/\/mamchenkov.net\/wordpress\/?p=42682"},"modified":"2019-06-05T08:31:48","modified_gmt":"2019-06-05T06:31:48","slug":"notes-to-myself-on-software-engineering","status":"publish","type":"post","link":"https:\/\/mamchenkov.net\/wordpress\/2019\/06\/05\/notes-to-myself-on-software-engineering\/","title":{"rendered":"Notes to Myself on Software Engineering"},"content":{"rendered":"<!-- google_ad_section_start -->\n\n<p class=\"wp-block-paragraph\">I came across these &#8220;<a href=\"https:\/\/medium.com\/s\/story\/notes-to-myself-on-software-engineering-c890f16f4e4d\">Notes to Myself on Software Engineering<\/a>&#8220;, with which I agree wholeheartedly.  Some of these I&#8217;ve learned &#8220;the hard way&#8221;.  For most of these, I wish I knew them earlier.  They would make my life a lot easier.  Here a few to get you started, but make sure to read the whole list, as many of these apply to other areas of IT and life in general.<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>It\u2019s okay to say no\u200a\u2014\u200ajust because someone asks for a feature doesn\u2019t mean you should do it. Every feature has a cost that goes beyond the initial implementation: maintenance cost, documentation cost, and cognitive cost for your users. Always ask: Should we really do this? Often, the answer is simply no.<\/p><\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Invest in continuous integration and aim for full unit test coverage. Make sure you are in an environment where you can code with confidence; if that isn\u2019t the case, start by focusing on building the right infrastructure.<\/p><\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Simple things should be simple, complex things should be possible. Don\u2019t increase the cognitive load of common use cases for the sake of niche use cases, even minimally.<\/p><\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Because code is communication, naming matters\u200a\u2014\u200awhether naming a project or a variable. Names reflect how you think about a problem. Avoid overly generic names (<em>x, variable, parameter<\/em>), avoid\u00a0<em>OverlyLongAndSpecificNamingPatterns<\/em>, avoid terms that can create unnecessary friction (<em>master, slave<\/em>), and make sure you are consistent in your naming choices. Naming consistency means both internal naming consistency (don\u2019t call \u201cdim\u201d what is called \u201caxis\u201d in other places) and consistency with established conventions for the problem domain. Before settling on a name, make sure to look up existing names used by domain experts (or other APIs).<\/p><\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Career progress is not how many people you manage, it is how much of an impact you make: the differential between a world with and without your work.<\/p><\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Software development is teamwork; it is about relationships as much as it is about technical ability. Be a good teammate. As you go on your way, stay in touch with people.<\/p><\/blockquote>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>When we find ourselves in a conflict, it\u2019s a good idea to pause to acknowledge our shared values and our shared goals, and remind ourselves that we are, almost certainly, on the same side.<\/p><\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"excerpt":{"rendered":"<!-- google_ad_section_start -->\n<p>I came across these &#8220;Notes to Myself on Software Engineering&#8220;, with which I agree wholeheartedly. Some of these I&#8217;ve learned &#8220;the hard way&#8221;. For most of these, I wish I knew them earlier. They would make my life a lot easier. Here a few to get you started, but make sure to read the whole &hellip; <a href=\"https:\/\/mamchenkov.net\/wordpress\/2019\/06\/05\/notes-to-myself-on-software-engineering\/\" class=\"more-link\">Continue reading <span class=\"screen-reader-text\">Notes to Myself on Software Engineering<\/span><\/a><\/p>\n<!-- google_ad_section_end -->\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"Notes to Myself on Software Engineering #WebDev #API #BestPractices #career #productivity","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_links_to":"","_links_to_target":""},"categories":[1,18,62,1334],"tags":[2404,3069,3477,1079,1673,1330],"keyring_services":[],"class_list":["post-42682","post","type-post","status-publish","format-standard","hentry","category-general","category-programming","category-technology","category-web-work","tag-api","tag-best-practices","tag-career","tag-productivity","tag-software-engineering","tag-web-development"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[{"id":28124,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/10\/20\/periodic-table-of-software-engineering\/","url_meta":{"origin":42682,"position":0},"title":"Periodic Table of Software Engineering","author":"Leonid Mamchenkov","date":"October 20, 2017","format":false,"excerpt":"I came across this Periodic Table of Software Engineering, and I think it's an excellent visualization.\u00a0 For those working their way to become software engineers, it provides a nice map of skills, topics, and knowledge areas to cover.\u00a0 For the rest, it clearly explains why software is so much more\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2017\/10\/periodic-table-of-software-engineering-500x350.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":24794,"url":"https:\/\/mamchenkov.net\/wordpress\/2015\/10\/02\/flexible-feature-control-at-instagram\/","url_meta":{"origin":42682,"position":1},"title":"Flexible Feature Control at Instagram","author":"Leonid Mamchenkov","date":"October 2, 2015","format":false,"excerpt":"\"Flexible Feature Control at Instagram\" article describes how Instagram controls the release of new features to groups of users. I've implemented a very simple feature control mechanism before, but nothing to the sounds of this one. \u00a0Rolling out to groups of users, conditional control, geo-tagging, and more. \u00a0On top of\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"Instagram","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2015\/10\/og_image-500x263.jpg?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":27343,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/02\/12\/modern-software-over-engineering-mistakes\/","url_meta":{"origin":42682,"position":2},"title":"Modern Software Over-Engineering Mistakes","author":"Leonid Mamchenkov","date":"February 12, 2017","format":false,"excerpt":"\"Modern Software Over-Engineering Mistakes\" is a nice collection of examples, results and reviews of over-engineering mistakes of the modern day. Few things are guaranteed to increase all the time: Distance between stars, Entropy in the visible universe, and F*cking business requirements . Here's the list of things discussed in the\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/mamchenkov.net\/wordpress\/wp-content\/uploads\/2017\/02\/perfect-abstraction-500x350.png?resize=350%2C200&ssl=1","width":350,"height":200},"classes":[]},{"id":27622,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/05\/25\/eight-rules-for-effective-software-production\/","url_meta":{"origin":42682,"position":3},"title":"Eight Rules for Effective Software Production","author":"Leonid Mamchenkov","date":"May 25, 2017","format":false,"excerpt":"Timofey Nevolin wrote an excellent article \"Eight Rules for Effective Software Production\" over at Toptal.com. \u00a0The whole thing is well worth a read, but here are the 8 rules to get you started: Understand the IT Mentality Do Not Mix Software Production and Development Methodologies Use Persistent Storage as an\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":29302,"url":"https:\/\/mamchenkov.net\/wordpress\/2019\/01\/25\/our-software-dependency-problem\/","url_meta":{"origin":42682,"position":4},"title":"Our Software Dependency Problem","author":"Leonid Mamchenkov","date":"January 25, 2019","format":false,"excerpt":"\"Our Software Dependency Problem\" is a great article going in-depth into the subject of the dependency management during software engineering. Dependency managers have scaled this open-source code reuse model down: now, developers can share code at the granularity of individual functions of tens of lines. This is a major technical\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":27331,"url":"https:\/\/mamchenkov.net\/wordpress\/2017\/02\/11\/software-engineering-at-google\/","url_meta":{"origin":42682,"position":5},"title":"Software Engineering at Google","author":"Leonid Mamchenkov","date":"February 11, 2017","format":false,"excerpt":"Fergus Henderson, who has been a software engineer at Google for 10 years, published the PDF document\u00a0entitled \"Software Engineering at Google\", where he collects and describes key software engineering practices the company is using. It covers the following: software development - version control, build system, code review, testing, bug tracking,\u2026","rel":"","context":"In &quot;All&quot;","block_context":{"text":"All","link":"https:\/\/mamchenkov.net\/wordpress\/category\/general\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/42682","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/comments?post=42682"}],"version-history":[{"count":0,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/posts\/42682\/revisions"}],"wp:attachment":[{"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/media?parent=42682"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/categories?post=42682"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/tags?post=42682"},{"taxonomy":"keyring_services","embeddable":true,"href":"https:\/\/mamchenkov.net\/wordpress\/wp-json\/wp\/v2\/keyring_services?post=42682"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}