{"id":21708,"date":"2016-04-08T09:20:16","date_gmt":"2016-04-08T14:20:16","guid":{"rendered":"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/"},"modified":"2016-04-08T09:20:16","modified_gmt":"2016-04-08T14:20:16","slug":"how-to-pick-dependencies-from-a-developers-point-of-view","status":"publish","type":"post","link":"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/","title":{"rendered":"How to pick dependencies from a developer\u2019s point of view"},"content":{"rendered":"<figure>\n<div class=\"feature-image\"><img decoding=\"async\" class=\"aligncenter size-full\" src=\"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/2016\/04\/logos.png\" alt=\"How to pick dependencies from a developer\u2019s point of view\"><\/div>\n<\/figure>\n<p>Dependencies are an essential part of each software project. Without utilizing existing libraries the scope of a project explodes because you can&#x2019;t solve every problem by yourself. Today we&#xA0;rely heavily&#xA0;on open source libraries to get the work done for us. Basically there is a library for nearly every problem and every language. But how do you pick a library especially if there are multiple of them solving the same problem? What are the requirements for a library to be used in commercial software? How do you measure the quality of a library? These questions come to my mind every time I need to decide on a dependency. Over the years I have created a criteria catalog in my head that I want to share with you in this post. So, if you are the author of a library please don&#x2019;t feel offended, I&#x2019;m just describing how I pick dependencies.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_80 counter-hierarchy ez-toc-counter ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">Table of Contents<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#Be_open\" >Be open<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#Provide_a_License\" >Provide a License<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#Be_Active\" >Be Active<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#Tests%E2%80%A6_must_have\" >Tests&#x2026; must have!<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#Tell_me_your_coverage\" >Tell me your coverage<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#Be_consumable\" >Be consumable<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#Tell_me_how_to_contribute\" >Tell me how to contribute<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-8\" href=\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#Be_responsive\" >Be responsive<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-9\" href=\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#Dont_make_me_search_your_documentation\" >Don&#x2019;t make me search your documentation<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-10\" href=\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#Provide_good_documentation\" >Provide good documentation<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"Be_open\"><\/span>Be open<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>In more than 10 years of software development I have never done a project were we have bought a commercial library. Open source libraries are essential for us. If there is no open source library solving our problem we simply create one and open source it instead of buying a commercial solution. So, if I&#x2019;m searching for a library and stumbling upon your library on <a href=\"https:\/\/github.com\/\">github<\/a> or <a href=\"https:\/\/sourceforge.net\/\">sourceforge<\/a> (or something similar) within the first search result you have done an amazing job! You are actually&#xA0;describing the problem your library solves and that is what I&#x2019;m searching for. I don&#x2019;t search for fancy names like &#x201C;humble bumble super library&#x201D;. I will search for &#x201C;How to solve problem X&#x201D;. So, let&#x2019;s see if your library survives my pickiness.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Provide_a_License\"><\/span>Provide a License<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>I&#x2019;m a professional software developer. This says nothing about my skill but it tells you that I&#x2019;m developing software for money. I&#x2019;ve been creating commercial software for years which means we are selling our solutions to customers. If you provide a library that solves my problem the first thing I look up is if your license fits my needs. You don&#x2019;t have a license for your library? You are out! <a href=\"http:\/\/choosealicense.com\/\">Providing the licensing model<\/a> for your library is a real must have for me. This is because when creating commercial software the right license is important. Licenses like <a href=\"http:\/\/choosealicense.com\/licenses\/apache-2.0\/\">Apache License<\/a> or the <a href=\"http:\/\/choosealicense.com\/licenses\/epl-1.0\/\">Eclipse Public License<\/a> work just fine while <a href=\"http:\/\/choosealicense.com\/licenses\/gpl-3.0\/\">GPL<\/a> is questionable. So, please think about licensing and provide the licensing model used at a place where I can easily find it.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Be_Active\"><\/span>Be Active<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>I found your project, good Job! Now tell me what you have worked on recently. A nice thing about e.g. <a href=\"https:\/\/github.com\/\">github<\/a> projects is that I can see on the first look when you have done your last commit. Was it a week ago? Perfect! Was it 6 months ago? I&#x2019;m getting suspicious! Why haven&#x2019;t you done anything on your project in 6 months? Of course there could be several reasons. If your project has matured enough and there is nothing left to do (yes, this happens sometimes e.g. for parsers) please tell me. Just point it out in your README like &#x201C;Parser done. No bugs left. Stopped working on it. Report issues if you can find one and I will fix them&#x201D;. That&#x2019;s enough, now I know that you must have done an awesome job. If I can&#x2019;t find something like this I suspect you have lost interest in this project and the same is true for me as well.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Tests%E2%80%A6_must_have\"><\/span>Tests&#x2026; must have!<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>One of the first and most important things I look up when picking a library is if there are automated tests. If not, you are out! Testing is a real essential to me. I have created so much code over the last years to know how important it is to have automated tests. I&#x2019;m really strict about it. If a project does not have a set of automated tests I simply can&#x2019;t trust it, it&#x2019;s that simple. I don&#x2019;t care if you are using unit tests, integration tests or UI tests. Just tell me that you have tests and that you run them on a regular basis. The best&#xA0;case is that you run them with every commit and you are transparent about the results. Build services like <a href=\"https:\/\/travis-ci.org\/\">Travis CI<\/a> or <a href=\"codeship.com\">codeship<\/a> make it really simple to create build jobs and provide feedback directly in your project.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Tell_me_your_coverage\"><\/span>Tell me your coverage<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>You have a set of tests? Great! Now tell me how good your tests are. Over the last few years I&#x2019;ve noticed projects publishing their coverage reports. Services like <a href=\"https:\/\/coveralls.io\/\">coveralls<\/a> make it really easy to be transparent about &#xA0;coverage reports. If you have a coverage over 80% I&#x2019;m starting to like your library before I have seen any code. It tells me you care about tests, too.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Be_consumable\"><\/span>Be consumable<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>After finding your library I will probably take a look at it by adding it to my project to play around. So, please tell my how I can consume it! I really don&#x2019;t want to end up sitting on my desk and spending time to figure out how to compile your library myself. These times are over! Every language has it&#x2019;s own standards of how to manage dependencies. Utilize them! If you do a Java project, just publish to <a href=\"http:\/\/search.maven.org\/\">Maven central<\/a>. If you are doing an iOS project, create a <a href=\"https:\/\/cocoapods.org\/\">cocoa pod<\/a>!<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Tell_me_how_to_contribute\"><\/span>Tell me how to contribute<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>It&#x2019;s important to me to know how to make changes to your library myself. But I really don&#x2019;t want to spend much time to figure out a complex setup. Just tell me what I need to do to get my hands dirty! Tell me also what you expect of my change. You have a policy like &#x201C;No Tests, No Merge&#x201D;, great! I love it. But you need to tell me. Project hosting platforms like github have build in features for this like the <a href=\"https:\/\/github.com\/blog\/1184-contributing-guidelines\">CONTRIBUTING.md<\/a> feature. Use it!<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Be_responsive\"><\/span>Be responsive<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>Responsiveness is one of the key things to me. I don&#x2019;t mind if it takes some time until a bug is fixed but please respond to me with a comment. Let me know that you care about your users. After creating an issue and don&#x2019;t getting an answer for 2 weeks I consider you were hit by a bus and your project is dead. Also if I spent some time and put work into your library please respond to me as well. I don&#x2019;t mind if my change does not fit the &#x201C;standards&#x201D; of your project. But please tell what I have done wrong and I will come up with an improved version shortly.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Dont_make_me_search_your_documentation\"><\/span>Don&#x2019;t make me search your documentation<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>With all the work you put into your project to show me your tests, coverage, contribution guidelines and so on you have gained my interest. Now, please don&#x2019;t make me search your documentation. Add a link in the first section of your README files pointing to your documentation. It&#x2019;s one of the first things I will look for. I rarely use a library that does not provide documentation. Of course there are exceptions. If your library is the state of the art String util, the scope of the project is so small that I don&#x2019;t need documentation. If it&#x2019;s getting more complicated I do need documentation for sure!<\/p>\n<h2><span class=\"ez-toc-section\" id=\"Provide_good_documentation\"><\/span>Provide good documentation<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>In my opinion &#x201C;good documentation&#x201D; is not well defined when it comes to software projects. For me there is only &#x201C;I get it&#x201D; or &#x201C;I have no idea what this is about&#x201D;. One example of a documentation I consider as good is the <a href=\"https:\/\/github.com\/google\/guava\/wiki\">Guava documentation<\/a>. It&#x2019;s more of a user guide which is categorized really well. I can find the topics of interest real quick. The authors also made a good job telling my why they provide features by providing examples of problems they can solve. An example of bad documentation are projects that just publish documentation in the form of JavaDoc or similar. I don&#x2019;t need this published. My IDE will present it to me! But the level of such documentation is not high enough. You need to tell me what features do exist and which problems they are solving before showing me classes and constructs. Later&#xA0;you can tell me the locations in the code where to look up the details. And yes, I will look them up!<\/p>\n<p>You have done all this? Congratulations, you gained my interest and trust. I will use your library, I will care about it, I will contribute to it, and I will recommend it. You have won yourself a passionate follower.<\/p>\n<p>The reason why the topics above are important to me is because they tell me things about your software but more importantly they tells me things about you as a developer or developer team. If you care about providing such information to me I can imagine how you are working. This creates a bond between us because I care about the same stuff!<\/p>\n<p>As always, please feel free to disagree on my list. It&#x2019;s just a collection of things I have observed over the last years and think are useful to others as well.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dependencies are an essential part of each software project. Without utilizing existing libraries the scope of a project explodes because you can&#x2019;t solve every problem by yourself. Today we&#xA0;rely heavily&#xA0;on open source libraries to get the work done for us. Basically there is a library for nearly every problem and every language. But how do&#8230;<\/p>\n","protected":false},"author":233,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","footnotes":""},"categories":[9548],"tags":[],"class_list":["post-21708","post","type-post","status-publish","format-standard","hentry","category-engineering-teams"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v26.8 (Yoast SEO v26.8) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>How to pick dependencies from a developer&#039;s point of view | Tasktop Blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"How to pick dependencies from a developer\u2019s point of view\" \/>\n<meta property=\"og:description\" content=\"Dependencies are an essential part of each software project. Without utilizing existing libraries the scope of a project explodes because you can&#x2019;t solve every problem by yourself. Today we&#xA0;rely heavily&#xA0;on open source libraries to get the work done for us. Basically there is a library for nearly every problem and every language. But how do...\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/\" \/>\n<meta property=\"og:site_name\" content=\"Planview Blog\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/www.facebook.com\/pages\/Planview-Inc\/89422974772\" \/>\n<meta property=\"article:published_time\" content=\"2016-04-08T14:20:16+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/2016\/04\/logos.png\" \/>\n<meta name=\"author\" content=\"Tasktop Blogger\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@Planview\" \/>\n<meta name=\"twitter:site\" content=\"@Planview\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Tasktop Blogger\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/\"},\"author\":{\"name\":\"Tasktop Blogger\",\"@id\":\"https:\/\/blog.planview.com\/#\/schema\/person\/35676ea677995199889c0b6456156ce2\"},\"headline\":\"How to pick dependencies from a developer\u2019s point of view\",\"datePublished\":\"2016-04-08T14:20:16+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/\"},\"wordCount\":1640,\"publisher\":{\"@id\":\"https:\/\/blog.planview.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/2016\/04\/logos.png\",\"articleSection\":[\"Engineering Teams\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/\",\"url\":\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/\",\"name\":\"How to pick dependencies from a developer's point of view | Tasktop Blog\",\"isPartOf\":{\"@id\":\"https:\/\/blog.planview.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/2016\/04\/logos.png\",\"datePublished\":\"2016-04-08T14:20:16+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#primaryimage\",\"url\":\"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/2016\/04\/logos.png\",\"contentUrl\":\"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/2016\/04\/logos.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.planview.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"How to pick dependencies from a developer\u2019s point of view\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.planview.com\/#website\",\"url\":\"https:\/\/blog.planview.com\/\",\"name\":\"Planview Blog\",\"description\":\"Leading the conversation on digital connected work\",\"publisher\":{\"@id\":\"https:\/\/blog.planview.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.planview.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/blog.planview.com\/#organization\",\"name\":\"Planview\",\"url\":\"https:\/\/blog.planview.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.planview.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/blog.planview.com\/wp-content\/uploads\/2015\/06\/planview-logo-black.png\",\"contentUrl\":\"https:\/\/blog.planview.com\/wp-content\/uploads\/2015\/06\/planview-logo-black.png\",\"width\":280,\"height\":66,\"caption\":\"Planview\"},\"image\":{\"@id\":\"https:\/\/blog.planview.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"http:\/\/www.facebook.com\/pages\/Planview-Inc\/89422974772\",\"https:\/\/x.com\/Planview\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.planview.com\/#\/schema\/person\/35676ea677995199889c0b6456156ce2\",\"name\":\"Tasktop Blogger\",\"url\":\"https:\/\/blog.planview.com\/author\/tasktop-blogger\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"How to pick dependencies from a developer's point of view | Tasktop Blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/","og_locale":"en_US","og_type":"article","og_title":"How to pick dependencies from a developer\u2019s point of view","og_description":"Dependencies are an essential part of each software project. Without utilizing existing libraries the scope of a project explodes because you can&#x2019;t solve every problem by yourself. Today we&#xA0;rely heavily&#xA0;on open source libraries to get the work done for us. Basically there is a library for nearly every problem and every language. But how do...","og_url":"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/","og_site_name":"Planview Blog","article_publisher":"http:\/\/www.facebook.com\/pages\/Planview-Inc\/89422974772","article_published_time":"2016-04-08T14:20:16+00:00","og_image":[{"url":"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/2016\/04\/logos.png","type":"","width":"","height":""}],"author":"Tasktop Blogger","twitter_card":"summary_large_image","twitter_creator":"@Planview","twitter_site":"@Planview","twitter_misc":{"Written by":"Tasktop Blogger","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#article","isPartOf":{"@id":"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/"},"author":{"name":"Tasktop Blogger","@id":"https:\/\/blog.planview.com\/#\/schema\/person\/35676ea677995199889c0b6456156ce2"},"headline":"How to pick dependencies from a developer\u2019s point of view","datePublished":"2016-04-08T14:20:16+00:00","mainEntityOfPage":{"@id":"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/"},"wordCount":1640,"publisher":{"@id":"https:\/\/blog.planview.com\/#organization"},"image":{"@id":"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#primaryimage"},"thumbnailUrl":"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/2016\/04\/logos.png","articleSection":["Engineering Teams"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/","url":"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/","name":"How to pick dependencies from a developer's point of view | Tasktop Blog","isPartOf":{"@id":"https:\/\/blog.planview.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#primaryimage"},"image":{"@id":"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#primaryimage"},"thumbnailUrl":"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/2016\/04\/logos.png","datePublished":"2016-04-08T14:20:16+00:00","breadcrumb":{"@id":"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#primaryimage","url":"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/2016\/04\/logos.png","contentUrl":"https:\/\/media.planview.com\/tasktop_blog\/wp-content\/uploads\/2016\/04\/logos.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.planview.com\/how-to-pick-dependencies-from-a-developers-point-of-view\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.planview.com\/"},{"@type":"ListItem","position":2,"name":"How to pick dependencies from a developer\u2019s point of view"}]},{"@type":"WebSite","@id":"https:\/\/blog.planview.com\/#website","url":"https:\/\/blog.planview.com\/","name":"Planview Blog","description":"Leading the conversation on digital connected work","publisher":{"@id":"https:\/\/blog.planview.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.planview.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/blog.planview.com\/#organization","name":"Planview","url":"https:\/\/blog.planview.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.planview.com\/#\/schema\/logo\/image\/","url":"https:\/\/blog.planview.com\/wp-content\/uploads\/2015\/06\/planview-logo-black.png","contentUrl":"https:\/\/blog.planview.com\/wp-content\/uploads\/2015\/06\/planview-logo-black.png","width":280,"height":66,"caption":"Planview"},"image":{"@id":"https:\/\/blog.planview.com\/#\/schema\/logo\/image\/"},"sameAs":["http:\/\/www.facebook.com\/pages\/Planview-Inc\/89422974772","https:\/\/x.com\/Planview"]},{"@type":"Person","@id":"https:\/\/blog.planview.com\/#\/schema\/person\/35676ea677995199889c0b6456156ce2","name":"Tasktop Blogger","url":"https:\/\/blog.planview.com\/author\/tasktop-blogger\/"}]}},"_links":{"self":[{"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/posts\/21708","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/users\/233"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/comments?post=21708"}],"version-history":[{"count":0,"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/posts\/21708\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/media?parent=21708"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/categories?post=21708"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.planview.com\/wp-json\/wp\/v2\/tags?post=21708"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}