<?xml version="1.0" encoding="utf-8" standalone="yes"?><feed xmlns="http://www.w3.org/2005/Atom">
  <title></title>
  <subtitle></subtitle>
  <id>https://www.endpointdev.com/blog/tags/training/</id>
  <link href="https://www.endpointdev.com/blog/tags/training/"/>
  <link href="https://www.endpointdev.com/blog/tags/training/" rel="self"/>
  <updated>2021-05-25T00:00:00+00:00</updated>
  <author>
    <name>End Point Dev</name>
  </author>
  
    <entry>
      <title>Engineering Is Not Just About the Cool Stacks</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2021/05/engineering-is-not-just-about-the-cool-stacks/"/>
      <id>https://www.endpointdev.com/blog/2021/05/engineering-is-not-just-about-the-cool-stacks/</id>
      <published>2021-05-25T00:00:00+00:00</published>
      <author>
        <name>Afif Sohaili</name>
      </author>
      <content type="html">
        &lt;p&gt;&lt;img src=&#34;/blog/2021/05/engineering-is-not-just-about-the-cool-stacks/scaffolding.jpg&#34; alt=&#34;&#34;&gt;
&lt;a href=&#34;https://unsplash.com/photos/P6bOdzRk7TY&#34;&gt;Photo&lt;/a&gt; by &lt;a href=&#34;https://unsplash.com/@gett_urban&#34;&gt;Di&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;As a developer, I love finding new shiny pieces of tech that can help me develop web applications better. To me, it is one of the best parts of the job: Pick up a new programming language, a new database, a new standard, etc., and build cool things with it. But recently, I had the chance to reflect on my experience working on a boring stack at one of my previous workplaces, and it was actually a lot better than I expected.&lt;/p&gt;
&lt;h3 id=&#34;my-journey&#34;&gt;My journey&lt;/h3&gt;
&lt;p&gt;I used to work at a company where the teams are free to decide the tech stacks that best fit their requirements, so a wide range of modern tools were used there to solve the problems at hand. Within just 2 years of joining the company, I switched teams four times and touched everything from Java, Scala, Akka, Terraform, AWS ECS, Serverless, API Gateway, AWS Lambda, AWS DynamoDB, React, Gatsby, Vue, Nuxt, TypeScript, Flowtype, and many other tools that really helped advance my technical skills.&lt;/p&gt;
&lt;p&gt;But in late 2018, my manager invited me to assist a “less popular” team in the company. The team handled a myriad of complex products that are quite old. The team’s tech stack was not the shiniest compared to the other teams in the company; the products are developed using Java, a language I generally do not prefer due to its verbosity. We just shipped JAR files to the platform’s marketplace, so there were no web services to maintain and hence it didn’t challenge or sharpen our operations skills. The frontend JavaScript code was largely built with jQuery as it came bundled with the platform we are building on top of.&lt;/p&gt;
&lt;p&gt;As a developer who loves shiny tools, this team should have been a dreadful one to be in. But to my surprise, as I reflect upon it, it was actually the team that gave me the highest work satisfaction. It was satisfying because there were a lot of problems to solve, and most of the time the harder problems to solve are not the tech stack: &lt;strong&gt;the apps work, and customers are paying&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Instead of talking about moving from Java to Kotlin or from jQuery to React, our team spent the time brainstorming ideas on how to increase code quality, how to ensure discipline and follow good principles when crafting software, how to improve our developers’ workflow and processes, and how to best share knowledge and contexts that we had just acquired for future team members. Each problem solved gave me that dopamine boost that made me feel good.&lt;/p&gt;
&lt;p&gt;Below are some of the things we did to solve these problems.&lt;/p&gt;
&lt;h3 id=&#34;problem-1-code-quality&#34;&gt;Problem #1: Code quality&lt;/h3&gt;
&lt;p&gt;The products the team were handling had been suffering from some quality degradations in recent years, and these ultimately led to more bugs and regressions, which then leads to an increase in customer complaints, and that leads to us working under pressure, which then leads to even more quality degradations, and the vicious cycle repeats.&lt;/p&gt;
&lt;p&gt;When this started to happen, what did we do?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We slowed things down.&lt;/strong&gt; Instead of having individual engineers work on multiple tickets in parallel, we held more pair programming sessions and reduced the number of tickets in progress to help incorporate collaboration earlier and gain feedbacks on the implementation strategy sooner. At the same time, pairing sessions also helped get the newer engineers up to speed faster. We introduced more quality gates for pull requests to be able to be merged into &lt;code&gt;main&lt;/code&gt;. We agreed as a team to scrutinize them harder, e.g. if you do not have tests among the changes, just consider the pull request rejected. We also required all team members to approve the changes. We worked with product managers to slow down shipping new features and instead having more bugs fixed. Hence, the health of the codebases got better and better and the products got more and more stable each day.&lt;/p&gt;
&lt;p&gt;We also held a brown-bag meeting reinforcing SOLID design principles to everyone in the team. Knowledge sharing like this helps bring everyone onto the same page while pairing and reduce the long discussion threads on pull requests.&lt;/p&gt;
&lt;h3 id=&#34;problem-2-context-sharing&#34;&gt;Problem #2: Context-sharing&lt;/h3&gt;
&lt;p&gt;Members of a team come and go, and that is true for all teams. Complex apps like the ones we were maintaining are usually full of legacy decisions that the newer team members will not have the knowledge of if no deliberate efforts were made to ensure that those contexts get shared. So, we took steps to mitigate this by including the contexts in commit messages. We also encouraged writing our findings in the Jira tickets and in the pull request descriptions on GitHub, but we preferred Git commit messages for documenting decisions related to the commit, because Git is the system that is least likely to change. We might switch from Jira or from GitHub to some similar services, so contexts would be lost when that happens, but it is very unlikely that we would switch from Git for version control.&lt;/p&gt;
&lt;p&gt;We also started a knowledgebase to contain information that should be shared within the team, including onboarding instructions, development gotchas, legacy contexts, etc. This helps distribute the knowledge to everyone and reduce blockers on specific team members. We also made a habit of documenting a discussion that happens offline, often in our internal communication channels or in our internal knowledgebase.&lt;/p&gt;
&lt;h3 id=&#34;problem-3-developers-workflow&#34;&gt;Problem #3: Developers’ workflow&lt;/h3&gt;
&lt;p&gt;Improving our process was also a focus. One of the first things we did was rewrite our Jenkins CI/CD pipeline to adopt multibranch pipeline, allowing us to build and test feature branches before they were merged into the &lt;code&gt;main&lt;/code&gt; branch.&lt;/p&gt;
&lt;p&gt;We also automated several tasks that we identified as repetitive, from as small as notifying everyone that there is a new pull request open on GitHub, to automatically running compatibility checks for all of our products once the platform we were building on released a new beta version. We constantly looked for areas we could automate better and discussed them in our weekly retrospectives.&lt;/p&gt;
&lt;p&gt;We also tuned our workflow to better organize our capacity around all the demands that we are getting: from our customers, our roadmaps, and our improvements bucket. We adopted Classes of Service (CoS) to achieve that. CoS is an approach in which you decide different treatments to different types of work. This means the capacity we have is flexible depending on the demand of each type of work.&lt;/p&gt;
&lt;p&gt;For example, we introduced a collapsible task buffer called Intangible that holds work whose value customers do not experience directly, such as upgrading Node.js version, etc. It is collapsible in the sense that the developers in this CoS can be reassigned to other CoS should we deem more capacity is required there. Note that CoS (or any other system for that matter) is not without its pros and cons, so be sure to tweak it to fit your circumstances should you consider adopting it.&lt;/p&gt;
&lt;h3 id=&#34;not-all-problems-are-tech-but-all-tech-has-problems&#34;&gt;Not all problems are tech, but all tech has problems.&lt;/h3&gt;
&lt;p&gt;Sometimes, we identify ourselves through our favorite tech stack.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Hey, I’m a JavaScript developer.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Hey, I’m a Ruby developer.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;And that is not wrong per se, but this particular experience of mine serves as a reminder that the essence of software engineering goes deeper than just the tech — it is to solve problems through software. And that is what we do at End Point.&lt;/p&gt;
&lt;h3 id=&#34;reference&#34;&gt;Reference&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://devopedia.org/solid-design-principles&#34;&gt;SOLID Design Principles&lt;/a&gt; at Devopedia&lt;/li&gt;
&lt;li&gt;Classes of Service:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://medium.com/servicerocket-eng/on-classes-of-service-cos-a-more-pragmatic-approach-towards-squad-formation-ec93e3a80dfb&#34;&gt;On Classes of Service (CoS), a more pragmatic approach towards “squad formation”&lt;/a&gt; by Yuen-Chi Lian at ServiceRocket&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.thoughtworks.com/insights/blog/predictability-and-classes-service&#34;&gt;Predictability and Classes of Service&lt;/a&gt; by Leonardo Campos at ThoughtWorks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;

      </content>
    </entry>
  
    <entry>
      <title>The Dollars and Sense of Hiring Software Consultants</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2019/08/dollars-and-sense-hiring-consultants/"/>
      <id>https://www.endpointdev.com/blog/2019/08/dollars-and-sense-hiring-consultants/</id>
      <published>2019-08-16T00:00:00+00:00</published>
      <author>
        <name>Elizabeth Garrett Christensen</name>
      </author>
      <content type="html">
        &lt;p&gt;&lt;img src=&#34;/blog/2019/08/dollars-and-sense-hiring-consultants/image-0.jpg&#34; alt=&#34;Interview&#34; /&gt; &lt;a href=&#34;https://unsplash.com/photos/YXemfQiPR_E&#34;&gt;Photo&lt;/a&gt; by Nik MacMillan on Unsplash&lt;/p&gt;
&lt;p&gt;I’m often asked by family and friends about End Point’s market and how software consulting fits into the business landscape and I thought I’d write up some thoughts for the general public in how hiring a consultant is actually the smartest thing to do for your business and it makes a ton of sense financially.&lt;/p&gt;
&lt;p&gt;Let’s talk some math about hiring an in-house developer:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;According to &lt;a href=&#34;https://www.glassdoor.com/Salaries/software-developer-salary-SRCH_KO0,18.htm&#34;&gt;Glassdoor&lt;/a&gt;, the average software developer salary is around $50,000–$120,000. Let’s say $85,000 per year. You typically pay for health insurance, other benefits and overhead expenses, so let’s just round the total cost of hiring one person to $110,000 per year (I think that’s actually pretty conservative).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You’d probably need to hire two people to support anything essential to your business, since having a single developer is risky (illness/​vacation/​employment change, etc.).&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Your total cost of getting two developers in-house is around ~$220,000 per year&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;table&gt;
  &lt;tr&gt;
    &lt;th /&gt;
    &lt;th&gt;Hiring your own developers&lt;/th&gt;
    &lt;th&gt;Software consulting agency&lt;/th&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Senior developers&lt;/td&gt;
    &lt;td&gt;✓&lt;/td&gt;
    &lt;td&gt;✓&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Diverse skillset&lt;/td&gt;
    &lt;td&gt;&lt;b&gt;?&lt;/b&gt;&lt;/td&gt;
    &lt;td&gt;✓&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Protection from staffing changes&lt;/td&gt;
    &lt;td&gt;✗&lt;/td&gt;
    &lt;td&gt;✓&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Flexible budget&lt;/td&gt;
    &lt;td&gt;✗&lt;/td&gt;
    &lt;td&gt;✓&lt;/td&gt;
  &lt;/tr&gt;
  &lt;tr&gt;
    &lt;td&gt;Staff up and down easily&lt;/td&gt;
    &lt;td&gt;✗&lt;/td&gt;
    &lt;td&gt;✓&lt;/td&gt;
  &lt;/tr&gt;
&lt;/table&gt;
&lt;h3 id=&#34;consulting-instead-of-hiring&#34;&gt;Consulting Instead of Hiring&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Spending less: You could spend $40,000–$50,000 a year in consulting and get excellent coverage, including new feature development and support for your project. Some of our customers even spend substantially less than that.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Skillset: Were you able to hire two people that know all of your software stack? Can they work on your CRM/​inventory system and do your website? Can they troubleshoot issues with your Windows Active Directory setup? Are they senior developers with a decade of experience? Or did you have to hire junior developers who need to train up on your project?&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;When you’re working with an End Point team, you’re able to get expert advice on the parts of your system that you need. For example, you might not need a full time DBA, but we can provide you an expert database resource for a few hours a week. You might not have enough work for a full time network engineer, but you do need someone to help with your SSL certificates, domain names, and caching layer. In that case, one of End Point’s DevOps engineers can offer you help for a few hours a month.&lt;/p&gt;
&lt;p&gt;&lt;img src=&#34;/blog/2019/08/dollars-and-sense-hiring-consultants/image-1.png&#34; alt=&#34;&#34;&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Team resources: What happens if someone doesn’t know something? Do they have a resource to turn to or are they trying to figure it out with a Google search or Stack Overflow article? End Point has 40+ engineers on our team and we work in a collaborative way to solve problems, giving you the benefit of a very wide diversity in technical skillset.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Hiring: Do you have the technical expertise to vet new employees? Hiring, testing, vetting, and onboarding new developers can be really tricky and End Point’s technical management team takes care of that for you. All of our developers have been through a rigorous skills test before employment. Upon joining the company, developers participate in our technical bootcamp to ensure they understand all of our internal procedures for data handling, security, client management, code verification, teamwork, and many other important skills.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Resource changes: If you’ve hired your two software developers, you still have to replace them in the event of an illness or job transition. If a developer leaves, End Point takes care of resourcing your project with new personnel and getting them up to speed. You don’t have to worry about the hiring or replacement of employees. We assign new team members with the appropriate skills to tackle your project, and our employees have our broad and deep team to call on and consult with to leverage their effectiveness.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Staffing up for a big project: One of the challenges faced by any business looking to do a big project either with an internal application or a website is how to staff up for all the work and then figure out what to do with their staff once the big project is over. Hiring a consulting agency lets you put 2, 3, 4, or even more people on a project for a big push and then back off to fewer people once your development is over. You don’t have to worry about temporary employees or a situation where you have to let one of your employees go due to lack of work or budget for development.&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;summary&#34;&gt;Summary&lt;/h3&gt;
&lt;p&gt;Hiring consultants can reduce cost for your project development, eliminate the stress of hiring knowledgeable staff, and provide you deep technical experience from a team of professionals.&lt;/p&gt;
&lt;p&gt;End Point has some verified client reviews at &lt;a href=&#34;https://clutch.co/profile/end-point&#34;&gt;Clutch.co&lt;/a&gt; so read about how we’ve helped our clients!&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>Work philosophy canon</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2018/05/work-philosophy-canon/"/>
      <id>https://www.endpointdev.com/blog/2018/05/work-philosophy-canon/</id>
      <published>2018-05-07T00:00:00+00:00</published>
      <author>
        <name>Jon Jensen</name>
      </author>
      <content type="html">
        &lt;img src=&#34;/blog/2018/05/work-philosophy-canon/pexels-photo-306534-sm.jpeg&#34; width=&#34;770&#34; height=&#34;348&#34; alt=&#34;people sitting on couch reading on tablet and laptop&#34;&gt;
&lt;h3 id=&#34;shared-culture&#34;&gt;Shared culture&lt;/h3&gt;
&lt;p&gt;Having some shared culture is important for working together well, and we can build that culture on familiar terminology, understanding, experiences, stories, and ideas.&lt;/p&gt;
&lt;p&gt;To help give all of us at End Point some common reference points, we have collected a set of valuable articles and books that we encourage everyone to read.&lt;/p&gt;
&lt;p&gt;Some of these have been standard reading at End Point for more than a decade, while others have been added over the years since we began doing this. Some are short and simple, others more in-depth. Our list is intentionally general, mostly avoiding specific technologies that only a subset of us use.&lt;/p&gt;
&lt;p&gt;No one article or book can be entirely authoritative for all situations, but each gives us more of the wisdom out there to consider and judiciously apply where it fits.&lt;/p&gt;
&lt;h3 id=&#34;slow-and-steady&#34;&gt;Slow and steady&lt;/h3&gt;
&lt;p&gt;When new employees start at End Point, we ask them to read the articles during their first week or two, and the relevant books within roughly their first year.&lt;/p&gt;
&lt;p&gt;Reading only a little at each sitting and spreading the reading out over time allows the ideas to sink in gradually and be incorporated into our work, rather than overwhelming with new information that cannot all be absorbed at once.&lt;/p&gt;
&lt;h3 id=&#34;for-everyone&#34;&gt;For everyone&lt;/h3&gt;
&lt;p&gt;Because we work in the software development industry, it is important that not only technical people such as developers, database experts, and system administrators be part of the shared culture. Everyone else at End Point including designers, project managers, sales, marketing, etc. should also be familiar with these articles and the terms and concepts they discuss:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://jsomers.net/blog/speed-matters&#34;&gt;Speed matters: Why working quickly is more important than it seems&lt;/a&gt; by James Somers&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://nohello.net/en/&#34;&gt;Please don’t just say hello in chat&lt;/a&gt; originally by Brandon High at nohello.com&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://blog.codinghorror.com/learn-to-read-the-source-luke/&#34;&gt;Learn to Read the Source, Luke&lt;/a&gt; by Jeff Atwood—​practical reasons free software and open source matter, and why actually using the source code matters&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.gnu.org/philosophy/free-sw.html&#34;&gt;What is free software?&lt;/a&gt; by the Free Software Foundation and Richard Stallman&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://opensource.org/osd&#34;&gt;The Open Source Definition&lt;/a&gt; by the Open Source Initiative&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://web.archive.org/web/20201030161227/https://www.toolbox.com/tech/data-management/blogs/joshs-rules-of-database-contracting-062707/&#34;&gt;Josh’s Rules (of Database Contracting)&lt;/a&gt; by Josh Berkus&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/blog/2008/08/on-excellence/&#34;&gt;On excellence&lt;/a&gt; by Ethan Rowe—​about ownership, taking responsibility for the problem at hand&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;/blog/2010/10/conventions/&#34;&gt;Conventions to know&lt;/a&gt; by Jon Jensen—​little but important things that ease communication in our work&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://web.archive.org/web/20180112070447/https://thecleverconsultant.com/how-to-sell-consulting-services-without-being-salesy/&#34;&gt;Selling Without Being Salesy&lt;/a&gt; by Jason Parks&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.startuplessonslearned.com/2008/11/five-whys.html&#34;&gt;Five Whys&lt;/a&gt; by Eric Ries (covered in more depth in his book &lt;a href=&#34;http://theleanstartup.com/book&#34;&gt;The Lean Startup&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://alanstevens.us/post/130828292006/softwareisamess&#34;&gt;Software Is a Mess and I Feel Fine&lt;/a&gt; by Alan Stevens&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://boringtechnology.club/&#34;&gt;Choose Boring Technology&lt;/a&gt; by Dan McKinley&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://basecamp.com/books/getting-real&#34;&gt;Getting Real&lt;/a&gt; book by 37signals (now Basecamp)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;for-developers&#34;&gt;For developers&lt;/h3&gt;
&lt;p&gt;These articles and books are targeted primarily at developers but enlightening for everyone:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://www.cl.cam.ac.uk/~mgk25/iso-time.html&#34;&gt;A summary of the international standard date and time notation&lt;/a&gt; by Markus Kuhn&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://adminzen.org/&#34;&gt;The Admin Zen&lt;/a&gt; by Michael Prokop—​in true DevOps fashion, this system administration advice applies to development too&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.joelonsoftware.com/2000/04/06/things-you-should-never-do-part-i/&#34;&gt;Things You Should Never Do, Part I&lt;/a&gt; by Joel Spolsky—​don’t rewrite things from scratch (almost never, anyway)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://github.com/michaeljones/on-commit-messages&#34;&gt;On Git Commit Messages&lt;/a&gt; by Michael Jones; to get a feel for the long history of others sermonizing on the same worthwhile topic, see also:
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;https://chris.beams.io/posts/git-commit/&#34;&gt;How to Write a Git Commit Message&lt;/a&gt; by Chris Beams&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://who-t.blogspot.com/2009/12/on-commit-messages.html&#34;&gt;On commit messages&lt;/a&gt; by Peter Hutterer&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html&#34;&gt;A Note About Git Commit Messages&lt;/a&gt; by Tim Pope&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://mislav.net/2014/02/hidden-documentation/&#34;&gt;Every line of code is always documented&lt;/a&gt; by Mislav Marohnić; see also &lt;a href=&#34;http://www.philandstuff.com/2014/02/09/git-pickaxe.html&#34;&gt;The git pickaxe&lt;/a&gt; by Philip Potter&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://designbygravity.wordpress.com/2009/10/23/how-to-read-other-peoples-code-and-why/&#34;&gt;How to Read Other People’s Code—​and Why&lt;/a&gt; by Christopher Schanck&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://web.archive.org/web/20190626055515/http://www.w2lessons.com/2011/04/you-dont-know-javascript.html&#34;&gt;You don’t know JavaScript&lt;/a&gt; by Michael Woloszynowicz—​the lessons apply to most technologies&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pragprog.com/titles/tpp20/&#34;&gt;The Pragmatic Programmer&lt;/a&gt; book by Andy Hunt and Dave Thomas (see the &lt;a href=&#34;/blog/2020/10/the-pragmatic-programmer-20th-anniversary-edition/&#34;&gt;write-up on the new 20th anniversary edition by Jon Jensen&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://pragprog.com/titles/pad/practices-of-an-agile-developer/&#34;&gt;Practices of an Agile Developer&lt;/a&gt; book by Venkat Subramaniam and Andy Hunt—​kind of a sequel to The Pragmatic Programmer (see the &lt;a href=&#34;/blog/2006/06/review-practices-of-agile-developer/&#34;&gt;review by Ethan Rowe&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;any-others&#34;&gt;Any others?&lt;/h3&gt;
&lt;p&gt;We are always on the lookout for other readings that are helpful, so feel free to leave a comment with your favorites!&lt;/p&gt;
&lt;p&gt;(Updated in early 2021 with articles on Git commit messages and history spelunking, and Choose Boring Technology.)&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>Designing a Computer Science Program for Free (or Cheap)</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2017/05/designing-computer-science-program-for/"/>
      <id>https://www.endpointdev.com/blog/2017/05/designing-computer-science-program-for/</id>
      <published>2017-05-04T00:00:00+00:00</published>
      <author>
        <name>Matt Galvin</name>
      </author>
      <content type="html">
        &lt;p&gt;This blog post is for people like me who are interested in improving their knowledge about computers, software and technology in general but are inundated with an abundance of resources and no clear path to follow. Many of the courses online tend to not have any real structure. While it’s great that this knowledge is available to anyone with access to the internet, it often feels overwhelming and confusing. I always enjoy a little more structure to study, much like in a traditional college setting. So, to that end I began to look at MIT’s OpenCourseWare and compare it to their actual curriculum.&lt;/p&gt;
&lt;p&gt;I’d like to begin by acknowledging that some time ago &lt;a href=&#34;https://www.scotthyoung.com/blog/about/&#34;&gt;Scott Young&lt;/a&gt; completed the &lt;a href=&#34;https://www.scotthyoung.com/blog/myprojects/mit-challenge-2/&#34;&gt;MIT Challenge&lt;/a&gt; where he “attempted to learn MIT’s 4-year computer science curriculum without taking classes”.  My friend Najmi here at End Point also shared a great website with me to &lt;a href=&#34;https://teachyourselfcs.com/&#34;&gt;“Teach Yourself Computer Science”&lt;/a&gt;. So, this is not the first post to try to make sense of all the free resources available to you, it’s just one which tries to help organize a coherent plan of study.&lt;/p&gt;
&lt;h3 id=&#34;methodology&#34;&gt;Methodology&lt;/h3&gt;
&lt;p&gt;I wanted to mimic MIT’s real CS curriculum. I also wanted to limit my studies to Computer Science only, while stripping out anything not strictly related. It’s not that I am not interested in things like speech classes or more advanced mathematics and physics, but I wanted to be pragmatic about the amount of time I have each week to put in to study outside of my normal (very busy) work week. I imagine anyone reading this would understand and very likely agree.&lt;/p&gt;
&lt;p&gt;I examined MIT’s course catalog. They have 4 undergraduate programs in the &lt;a href=&#34;http://catalog.mit.edu/schools/engineering/electrical-engineering-computer-science/#undergraduatestudytext&#34;&gt;Department of Electrical Engineering and Computer Science:&lt;/a&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://catalog.mit.edu/degree-charts/electrical-science-engineering-course-6-1/&#34;&gt;6-1 program:&lt;/a&gt;&lt;/strong&gt; Leads to the Bachelor of Science in Electrical Science and Engineering. (Electrical Science and Engineering)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://catalog.mit.edu/degree-charts/electrical-engineering-computer-science-course-6-2/&#34;&gt;6-2 program:&lt;/a&gt;&lt;/strong&gt; Leads to the Bachelor of Science in Electrical Engineering and Computer Science and is for those whose interests cross this traditional boundary.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://catalog.mit.edu/degree-charts/computer-science-engineering-course-6-3/&#34;&gt;6-3 program:&lt;/a&gt;&lt;/strong&gt; Leads to the Bachelor of Science in Computer Science and Engineering.(Computer Science and Engineering)&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;&lt;a href=&#34;http://catalog.mit.edu/interdisciplinary/undergraduate-programs/degrees/computer-science-molecular-biology/&#34;&gt;6-7 program:&lt;/a&gt;&lt;/strong&gt;  Is for students specializing in computer science and molecular biology.&lt;/p&gt;
&lt;p&gt;Because I wanted to stick what I believed would be most practical for my work at End Point, I selected the &lt;a href=&#34;http://catalog.mit.edu/degree-charts/computer-science-engineering-course-6-3/&#34;&gt;6-3 program.&lt;/a&gt; With my intended program selected, I also decided that the full course load for a bachelor’s degree was not really what I was interested in. Instead, I just wanted to focus on the computer science related courses (with maybe some math and physics only if needed to understand any of the computer courses).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, looking at the &lt;a href=&#34;http://catalog.mit.edu/degree-charts/computer-science-engineering-course-6-3/&#34;&gt;requirements&lt;/a&gt;, I began to determine which classes I’d require. Once I had this, I could then begin to search the &lt;a href=&#34;https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/&#34;&gt;MIT OpenCourseWare&lt;/a&gt; site to ensure the classes are offered, or find suitable alternatives on &lt;a href=&#34;https://www.coursera.org/courses?languages=en&amp;amp;query=bachelor+computer+science&#34;&gt;Coursera&lt;/a&gt; or &lt;a href=&#34;https://www.udemy.com/courses/search/?q=computer%20science&amp;amp;src=sac&amp;amp;kw=computer&amp;amp;lang=en&#34;&gt; Udemy&lt;/a&gt;. As is typical, there are &lt;strong&gt;General Requirements&lt;/strong&gt; and &lt;strong&gt;Departmental Requirements&lt;/strong&gt;. So, beginning with the General Institute Requirements, lets start designing a computer science program with all the fat (non-computer science) cut out.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id=&#34;general-requirements&#34;&gt;General Requirements:&lt;/h3&gt;
&lt;div class=&#34;separator&#34; style=&#34;clear: both; text-align: left;&#34;&gt;&lt;a href=&#34;/blog/2017/05/designing-computer-science-program-for/image-0-big.png&#34; imageanchor=&#34;1&#34; style=&#34;margin-left: 1em; margin-right: 1em;&#34;&gt;&lt;img border=&#34;0&#34; height=&#34;252&#34; src=&#34;/blog/2017/05/designing-computer-science-program-for/image-0.png&#34; width=&#34;400&#34;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;I removed that which was not computer science related. As I mentioned, I was aware I may need to add some math/science. So, for the time being this left me with:&lt;/p&gt;
&lt;div class=&#34;separator&#34; style=&#34;clear: both; text-align: left;&#34;&gt;&lt;a href=&#34;/blog/2017/05/designing-computer-science-program-for/image-1-big.png&#34; imageanchor=&#34;1&#34; style=&#34;margin-left: 1em; margin-right: 1em;&#34;&gt;&lt;img border=&#34;0&#34; height=&#34;194&#34; src=&#34;/blog/2017/05/designing-computer-science-program-for/image-1.png&#34; width=&#34;400&#34;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Notice that it says&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;one subject can be satisfied by 6.004 and 6.042[J] (if taken under joint number 18.062[J]) in the Department Program&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;It was unclear to me what “if taken under joint number 18.062[J]” meant (nor could I find clarification) but as will be shown later, 6.004 and 6.042[J] are in the departmental requirements, so let’s commit to taking those two which would leave the requirement of one more REST course. After some Googling I found the list of &lt;a href=&#34;http://catalog.mit.edu/mit/undergraduate-education/general-institute-requirements/#restrequirementtext&#34;&gt;REST courses here&lt;/a&gt;. So, if you’re reading this to design your own program, please remember that later we will commit to  &lt;a href=&#34;http://catalog.mit.edu/search/?P=6.004&#34;&gt;6.004&lt;/a&gt; and &lt;a href=&#34;http://catalog.mit.edu/search/?P=6.042&#34;&gt;6.042[J]&lt;/a&gt; and go &lt;a href=&#34;http://catalog.mit.edu/mit/undergraduate-education/general-institute-requirements/#restrequirementtext&#34;&gt;here&lt;/a&gt; to select a course.&lt;/p&gt;
&lt;p&gt;So, now on to the General Institute Requirements Laboratory Requirement. We only need to choose one of three:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.01&#34;&gt;6.01:&lt;/a&gt; Introduction to EECS via Robot Sensing, Software and Control&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.02&#34;&gt;6.02:&lt;/a&gt; Introduction to EECS via Communications Networks&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.03&#34;&gt;6.03:&lt;/a&gt; Introduction to EECS via Medical Technology&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So, to summarize the general requirements we will take &lt;strong&gt;4&lt;/strong&gt; courses:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.004&#34;&gt;6.004&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.042&#34;&gt;6.042[J]&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;One course &lt;a href=&#34;http://catalog.mit.edu/mit/undergraduate-education/general-institute-requirements/#restrequirementtext&#34;&gt;here&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.01&#34;&gt;6.01:&lt;/a&gt;, &lt;a href=&#34;http://catalog.mit.edu/search/?P=6.02&#34;&gt;6.02:&lt;/a&gt;, or &lt;a href=&#34;http://catalog.mit.edu/search/?P=6.03&#34;&gt;6.03:&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;major-computer-science-requirements&#34;&gt;Major (Computer Science) Requirements:&lt;/h3&gt;
&lt;div class=&#34;separator&#34; style=&#34;clear: both; text-align: left;&#34;&gt;&lt;a href=&#34;/blog/2017/05/designing-computer-science-program-for/image-2-big.png&#34; imageanchor=&#34;1&#34; style=&#34;margin-left: 1em; margin-right: 1em;&#34;&gt;&lt;img border=&#34;0&#34; height=&#34;400&#34; src=&#34;/blog/2017/05/designing-computer-science-program-for/image-2.png&#34; width=&#34;328&#34;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;In keeping with the idea that we want to remove non-essential, and non-CS courses, let’s remove the speech class. So here we have a nice summary of what we discovered above in the General Requirements, along with details of the computer science major requirements:&lt;/p&gt;
&lt;div class=&#34;separator&#34; style=&#34;clear: both; text-align: left;&#34;&gt;&lt;a href=&#34;/blog/2017/05/designing-computer-science-program-for/image-3-big.png&#34; imageanchor=&#34;1&#34; style=&#34;margin-left: 1em; margin-right: 1em;&#34;&gt;&lt;img border=&#34;0&#34; height=&#34;400&#34; src=&#34;/blog/2017/05/designing-computer-science-program-for/image-3.png&#34; width=&#34;324&#34;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;As stated, let’s look at the list of Advanced Undergraduate Subjects and Independent Inquiry Subjects so that we may select one from each of them:&lt;/p&gt;
&lt;div class=&#34;separator&#34; style=&#34;clear: both; text-align: left;&#34;&gt;&lt;a href=&#34;/blog/2017/05/designing-computer-science-program-for/image-4-big.png&#34; imageanchor=&#34;1&#34; style=&#34;margin-left: 1em; margin-right: 1em;&#34;&gt;&lt;img border=&#34;0&#34; height=&#34;400&#34; src=&#34;/blog/2017/05/designing-computer-science-program-for/image-4.png&#34; width=&#34;305&#34;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;div class=&#34;separator&#34; style=&#34;clear: both; text-align: left;&#34;&gt;&lt;a href=&#34;/blog/2017/05/designing-computer-science-program-for/image-5-big.png&#34; imageanchor=&#34;1&#34; style=&#34;margin-left: 1em; margin-right: 1em;&#34;&gt;&lt;img border=&#34;0&#34; height=&#34;353&#34; src=&#34;/blog/2017/05/designing-computer-science-program-for/image-5.png&#34; width=&#34;400&#34;/&gt;&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;Lastly, it’s stated that we must&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Select one subject from the departmental list of EECS subjects&lt;/p&gt;&lt;/blockquote&gt;
&lt;p&gt;a link is provided to do so, however it brings you &lt;a href=&#34;http://www.eecs.mit.edu/academics-admissions/undergraduate-programs&#34;&gt;here&lt;/a&gt; and I cannot find a list of courses. I believe that this link no longer takes you to the intended location. A Google search brought up a similar page, but with a list of courses, as can be seen &lt;a href=&#34;https://www.eecs.mit.edu/academics-admissions/academic-information/subject-updates-ft-2016&#34;&gt;here&lt;/a&gt;. So, I will pick one from that page.&lt;/p&gt;
&lt;p&gt;The next step was to find the associated courses on MIT OpenCourseWare&lt;/p&gt;
&lt;h3 id=&#34;sample-list-of-classes&#34;&gt;Sample List of Classes&lt;/h3&gt;
&lt;p&gt;So, now you will be able to follow the links I provided above to select your classes. I was not always able to find courses that matched by exact name and/or course number. Sometimes I had to read the description and look through several courses which seemed similar. I will provide my own list in case you’d just like to us mine:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.0001&#34;&gt;6.0001: Introduction to Computer Science Programming in Python&lt;/a&gt; : 2 parts consisting of &lt;a href=&#34;https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-9?utm_source=OCW&amp;amp;utm_medium=CHP&amp;amp;utm_campaign=OCW&#34;&gt;Introduction to Computer Science and Programming Using Python&lt;/a&gt; and &lt;a href=&#34;https://www.edx.org/course/introduction-computational-thinking-data-mitx-6-00-2x-5?utm_source=OCW&amp;amp;utm_medium=CHP&amp;amp;utm_campaign=OCW&#34;&gt;Introduction to Computational Thinking and Data Science&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.042&#34;&gt;6.042[J]: Mathematics for Computer Science&lt;/a&gt;: &lt;a href=&#34;https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-spring-2015/&#34;&gt;Mathematics for Computer Science
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;https://www.eecs.mit.edu/academics-admissions/academic-information/subject-updates-ft-2016/6s080&#34;&gt;6.S080: Brief Introduction to Python&lt;/a&gt; : &lt;a href=&#34;https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-189-a-gentle-introduction-to-programming-using-python-january-iap-2011/&#34;&gt;A Gentle Introduction to Programming Using Python
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.01&#34;&gt;6.01 : Introduction to EECS via Robot Sensing, Software and Control&lt;/a&gt; : &lt;a href=&#34;https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-01sc-introduction-to-electrical-engineering-and-computer-science-i-spring-2011/&#34;&gt;Introduction to Electrical Engineering and Computer Science I&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.004&#34;&gt;6.004: Computation Structures&lt;/a&gt; : &lt;a href=&#34;https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-004-computation-structures-spring-2009/&#34;&gt;Computation Structures&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.006&#34;&gt;6.006: Introduction to Algorithms&lt;/a&gt; : &lt;a href=&#34;https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/&#34;&gt;Introduction to Algorithms&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.009&#34;&gt;6.009: Fundamentals of Programming&lt;/a&gt; : closest I could find (based on class description), &lt;a href=&#34;https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-9#!&#34;&gt;Introduction to Computer Science and Programming Using Python&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://web.mit.edu/6.031/www/sp17/&#34;&gt;6.005 (6.031) Elements of Software Construction&lt;/a&gt; : &lt;a href=&#34;https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-005-software-construction-spring-2016/&#34;&gt;Elements of Software Construction&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.033&#34;&gt;6.033: Computer System Engineering (CI-M)&lt;/a&gt; : &lt;a href=&#34;https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-033-computer-system-engineering-spring-2009/&#34;&gt;Computer System Engineering&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.036&#34;&gt;6.036: Introduction to Machine Learning&lt;/a&gt; : &lt;a href=&#34;https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-867-machine-learning-fall-2006/&#34;&gt;Machine Learning
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.045&#34;&gt;6.045[J]: Automata, Computability, and Complexity&lt;/a&gt; : &lt;a href=&#34;https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-045j-automata-computability-and-complexity-spring-2011/&#34;&gt;Automata, Computability, and Complexity&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.814&#34;&gt;6.814: Database Systems&lt;/a&gt; : &lt;a href=&#34;https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-830-database-systems-fall-2010/&#34;&gt;Database Systems
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://catalog.mit.edu/search/?P=6.035&#34;&gt;6.035: Computer Language Engineering&lt;/a&gt; : &lt;a href=&#34;https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-035-computer-language-engineering-sma-5502-fall-2005/&#34;&gt;Computer Language Engineering&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&#34;conclusion&#34;&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;So there you have it, please feel free to comment with any of your favorite resources.&lt;/p&gt;

      </content>
    </entry>
  
    <entry>
      <title>Joe Mastey at Mountain West Ruby Conference 2015</title>
      <link rel="alternate" href="https://www.endpointdev.com/blog/2015/04/joe-mastey-at-mountain-west-ruby/"/>
      <id>https://www.endpointdev.com/blog/2015/04/joe-mastey-at-mountain-west-ruby/</id>
      <published>2015-04-17T00:00:00+00:00</published>
      <author>
        <name>Brian Gadoury</name>
      </author>
      <content type="html">
        &lt;p&gt;A conversation with a co-worker today about the value of improving one’s professional skills reminded me of &lt;a href=&#34;http://josephmastey.com/&#34;&gt;Joe Mastey’s&lt;/a&gt; talk he gave at the &lt;a href=&#34;http://mtnwestrubyconf.org/2015/&#34;&gt;2015 Mountain West Ruby Conference&lt;/a&gt;. That then reminded me that I had never finished my write up on that conference. Blogger won’t let me install harp music and an animated soft focus flashback overlay, so please just imagine it’s the day after the conference when you’re reading this. “That reminds me of the time&amp;hellip;”&lt;/p&gt;
&lt;p&gt;I’ve just finished my second MWRC and I have to give this one the same 5-star rating I gave last year’s. There were a few small sound glitches here and there, but overall the conference is well-run, inclusive, and packed with great speakers and interesting topics. Rather than summarizing each talk, I want to dig into the one most relevant to my interests. “Building a Culture of Learning” by Joe Mastey&lt;/p&gt;
&lt;p&gt;I was excited to catch Joe’s talk because learning and teaching have always been very interesting to me, regardless of the particular discipline. I find it incredibly satisfying to improve upon my own learning skills, as well as improving my teaching skills by teasing out how different individuals learn best and then speak to that. There’s magic in that one on one interaction when everything comes together just right. I just really dig that.&lt;/p&gt;
&lt;p&gt;Joe’s work as the Manager of Internal Learning at Enova has gone way beyond the subtleties of the one-on-one. He’s taken the not-so-simple acts of learning and training, and scaled them up in an environment that does not sound, on paper, like it would support it. He’s created a culture of learning (“oh hey they just said the title of the movie &lt;strong&gt;in&lt;/strong&gt; the movie!”) in a financial company that’s federally regulated, saw huge growth due to an IPO, and had very real business-driven deadlines for shipping their software.&lt;/p&gt;
&lt;p&gt;Joe broke his adventure down into three general phases after refreshingly admitting that “YMMV” and that you can’t ignore the existing corporate culture when trying to build a culture of learning within.&lt;/p&gt;
&lt;h3 id=&#34;phase-1building-credibility&#34;&gt;Phase 1—​Building Credibility&lt;/h3&gt;
&lt;p&gt;I would hazard a guess that most software development shops are perpetually at Phase 1: Learning is mostly ad-hoc by way of picking things up from one’s daily work; and has little to no people pushing for more formal training. People probably agree that training is important, but the mandate has not come down from the CTO, and there’s “no time for training” because there’s so much work to do.&lt;/p&gt;
&lt;p&gt;How did Joe help his company evolve past Phase 1? Well, he did a lot of things that I think many devs would be happy to just get one or two of at the their company. My two favorites from his list probably appeal to polar opposite personality types, but that’s part of why I like them.&lt;/p&gt;
&lt;p&gt;My first favorite is that books are all-you-can-eat. If a developer asks Joe for a tech book, he’ll say yes, and he’ll buy a bunch of extra copies for the office. I like having a paper book to read through to get up to speed on a topic, ideally away from my desk and the computer screen. I’ve also found that for some technologies, the right book can be faster and less frustrating than potentially spotty documentation online.&lt;/p&gt;
&lt;p&gt;My second favorite is how Joe implemented “new hire buddies.” Each new hire is teamed up with an experienced dev from a different team. Having a specific person to talk to, and get their perspective on company culture, can really help people integrate into the culture much more quickly. When I joined End Point in 2010, I worked through our new hire “boot camp” training like all new hires. I then had the occasionally-maddening honor of working directly with one of the more senior evil super-geniuses at End Point on a large project that I spent 100% of my time on. He became my de facto new hire buddy and I could tell that despite the disparity in our experience levels, being relatively joined at the hip with someone like that improved my ramp-up and cultural integration time greatly.&lt;/p&gt;
&lt;h3 id=&#34;phase-2expand-reach-and-create-impact&#34;&gt;Phase 2—​Expand Reach and Create Impact&lt;/h3&gt;
&lt;p&gt;If my initial guess about Phase 1 is correct, it follows that that dev shops in Phase 2 are more rare: More people are learning more, more people are driving that learning, but it’s still mostly focused on new hires and the onboarding process.&lt;/p&gt;
&lt;p&gt;Phase 2 is where Joe’s successful efforts are a little more intimidating to me, especially given my slightly introverted nature. The efforts here scale up and get more people speaking publically, both internally and externally. It starts with a more formal onboarding process, and grows to things like weekly tech talks and half day internal workshops. Here is where I start to make my “yeah, but…” face. We all have it. It’s the face you make when someone says something you don’t think can work, and you start formulating your rebuttal immediately. E.g. “Yeah, but how do you get management and internal clients to be OK with ‘shutting down development for half a day’ for training?” Joe does mention the danger of being perceived as “wasting too much time.” You’ll want to be sure you get ahead of that and communicate the value of what you’re spending “all that dev time on.”&lt;/p&gt;
&lt;h3 id=&#34;phase-3shift-the-culture&#34;&gt;Phase 3—​Shift The Culture&lt;/h3&gt;
&lt;p&gt;It would be interesting to know how many shops are truly in Phase 3 because it sounds pretty intense: Learning is considered part of everyone’s job, the successes from the first two phases help push the culture of learning to think and act bigger, the acts of learning and training others are part of job descriptions, and things like FOSS contributions and that golden unicorn of “20% personal project time” actually happen on company time. Joe describes the dangers or downsides to Phase 3 in a bit of a “with great power comes great responsibility” way. I’ve never personally worked somewhere that’s in Phase 3, but it make sense that the increased upside has increased (potential) downside.&lt;/p&gt;
&lt;p&gt;At End Point, we have some elements of all three phases, but we’re always looking to improve. Joe’s talk at MWRC 2015 has inspired me to work on expanding our own culture of learning. I think his talk is also going to serve as a pretty good road-map on how to get to the next phase.&lt;/p&gt;

      </content>
    </entry>
  
</feed>
