TE
TechEcho
Home24h TopNewestBestAskShowJobs
GitHubTwitter
Home

TechEcho

A tech news platform built with Next.js, providing global tech news and discussions.

GitHubTwitter

Home

HomeNewestBestAskShowJobs

Resources

HackerNews APIOriginal HackerNewsNext.js

© 2025 TechEcho. All rights reserved.

The Number One Trait of a Great Developer

209 pointsby r4umalmost 12 years ago

41 comments

gfodoralmost 12 years ago
The catch-22, of course, is that at some point, MySQL <i>was</i> the &quot;new thing&quot; to Diane, so how did she learn it in the first place?<p>The answer of course is that judgement is less about making decisions upon familiarity per se and more about knowing when unfamiliar technology seems to provide good trade offs given what is known about it. For example, PostgreSQL may be unfamiliar, but choosing it is a wildly different type of decision than choosing another less mature unfamiliar data store, since at a high level PostgreSQL is known to be a well-understood, mature technology that may provide significant leverage over MySQL in certain scenarios. Being able to understand the various dimensions of technology choices and make good ones with limited information and experience is what makes good judgement, not just an outright aversion to unfamiliar things.
评论 #6320865 未加载
评论 #6320783 未加载
评论 #6320907 未加载
评论 #6320826 未加载
评论 #6321401 未加载
cmdkeenalmost 12 years ago
This is a problem because writing working, maintainable code that solves the given problem rather than an imagined problem should be the trait of a competent developer.<p>I had the pleasure of going on a course run by a German developer recently, and his brutal focus on quality and maintainability made me rethink what we class as a good developer. Brutally in the article Jack is not a rockstar - Jack is incompetent. A great developer solves complex problems in a way that is maintainable - the problem is that most problems aren&#x27;t that complex. Dianne however didn&#x27;t do anything that made her &quot;great&quot; - any developer who can&#x27;t do the kind of engineering practices she did should be fired.<p>Hacking on something in your spare time is completely different, but as soon as you want to work on something that others will work on as well you need to be into that engineer mindset. It&#x27;s one of the things that impresses me about Patrick McKenzie&#x27;s writing, and his experience of learning that the hard way in Japan.
评论 #6320672 未加载
rachelbythebayalmost 12 years ago
Joe asked the same questions and then wrote a collection of CGI programs&#x2F;scripts in one of those languages which start with the letter P. It was dull and uninteresting. There were a half-dozen commands the devices needed to call, so he hand-wrote the SQL, making sure to use the appropriate techniques to insert parameters instead of &quot;string building&quot; and opening the client to injection attacks. His code thus resembled very small filters: HTTP requests mapped into SQL, and then results mapped back to the client&#x27;s output requirement (unspecified in the story).<p>His code wasn&#x27;t super fast and wouldn&#x27;t win any awards for being clever, but he got it done quickly and it worked. They were able to ship. Over the years, as they moved from one web server to another and from one platform to another, the maintenance programmers they brought on later (for Joe had moved on, as people do) were able to adapt it without too much trouble. The CGI aspect meant it could run on IIS or nginx or whatever else they found.<p>It would never scale to huge numbers of queries per second, but it wasn&#x27;t supposed to. It needed to handle 500 devices in the first year polling about once an hour. That&#x27;s 12000 queries per day, or .138 QPS (queries per second). You could almost service those requests <i>by hand</i> if the timeouts were high enough and people were cheap enough: just cut and paste!<p>Bob asked the same questions, wrote CGI and hand-coded SQL too, but made a mess of it. It took him three times as long to write. It had numerous security problems and took the site down when someone discovered they could pull a &quot;Bobby Tables&quot; attack and change everyone&#x27;s recipes to involve dog poop. Customers rioted and demanded refunds. The company went out of business.<p>They used the same technologies and got two different results... and this happens constantly.<p>Some technologies are used to create only garbage, sure, but the technology itself won&#x27;t guarantee success.
chrisrhodenalmost 12 years ago
Dianne&#x27;s solution creates a maintenance problem if the number of devices grows too much or if network stability is a problem, or if there is an expectation down the line of, for instance, push sync.<p>My point is not that her solution was not valuable, but that to suggest that the maintainability of the two solutions is black and white like this is wrongheaded.<p>The really unfortunate implication here is that learning new technologies is either something that shouldn&#x27;t happen or something that shouldn&#x27;t happen on the job. I&#x27;d say that something with these requirements would have been a perfect opportunity for Diane to, &quot;learn postgres,&quot; if she felt that it would have been better. The extra day or two of effort would likely pay off – if not on this project, then on the next.<p>&gt; but she also knew that anything much more complex would be beyond her current skills.<p>And with this mindset, her skills for the foreseeable future.
评论 #6320668 未加载
评论 #6320593 未加载
评论 #6320581 未加载
评论 #6320675 未加载
评论 #6320621 未加载
评论 #6320670 未加载
评论 #6320596 未加载
gngealalmost 12 years ago
<i>Dianne knew it wasn&#x27;t the most elegant solution, but she also knew that anything much more complex would be beyond her current skills.</i><p>Since when are complex solutions elegant? I always thought the simple ones were the ones deserving to be called &quot;elegant&quot;. Also, the cheapest, fastest, and most reliable components are those that aren&#x27;t there.
outworlderalmost 12 years ago
I don&#x27;t agree with the article at all. At least, not in the way it was presented.<p>Sure, designing such a small system to use Cassandra and Protocol Buffers <i>might</i> be overkill. Then again, it might not. Without more information, it would be impossible to know which one is the best developer.<p>For instance: how much time did the Node+Cassandra+Protobuf implementation take? How is that, compared to the junior dev that only knows MySQL? Was Jack on a deadline, or did he have time to explore alternatives? Was Jack really inexperienced, or he did have experience in the new tech, but wanted those in his resumé?<p>Were they billing hours? What about the coworkers, do they only know Ruby and MySQL too, or are they confortable about learning new things? Do they even have coworkers?<p>Was Jack&#x27;s solution modular enough that components could be replaced, if they were a problem? (Cassandra, for instance)<p>And most importantly: what was it that made Jack&#x27;s implementation unmaintainable? Sure it wasn&#x27;t because they are &quot;new&quot;(the article is rather old) technologies. Was the code badly documented? Was the design flawed?<p>Jack&#x27;s biggest flaws, as can be inferred from the article, is not asking enough questions before diving into the implementation, and not getting permission before using &quot;new&quot; tech.<p>I know the author did not get in depth about the personalities or the project itself because he wanted stereotypes to illustrate a point, which was taken. But the problem with it is that other people could get the impression that &quot;new&quot; technologies should never be considered, or that any attempt to make the application &quot;scalable&quot; from the beginning is a &quot;Jack trait&quot; and thus, wrong.<p>Not to mention that Jack might even be right, should the company&#x27;s expectations prove to be too low.
dasil003almost 12 years ago
Any article stating one trait as being most important for anything is probably being hyperbolically reductive, but in this case it&#x27;s particularly painful because &quot;judgement&quot; is absolutely meaningless. Every single thing every person does requires judgement, and if you don&#x27;t have it you&#x27;ll probably get hit by a bus before you have a chance to get a job.<p>What this article is really arguing against are early-adopter developers who chase every new fad for its own sake and prioritize their own amusement over the best solution at hand. But this says about how good the developer is, only how good their actual contribution to your company will be relative to their potential. A shit developer can do their best but it still won&#x27;t measure up to a great developer&#x27;s trend-chasing effort.<p>Now even assuming some base level of competence, there are many different mindsets and personalities that lend themselves to different types of programming. I could go on and on about specific skills but we&#x27;re mostly programmers here so I&#x27;ll just hint at it: debugging skills, low-level skills, architecture skills, analyst (business requirements) skills, hci skills, modeling skills, clairvoyance, luck. All of these things have varying degrees of importance depending on the job and team at hand, and some combination of them will make someone the best developer <i>for some specific job</i>.<p>But if you find my answer too wishy-washy and you want specifics about what makes a great developer I&#x27;ll boil it down to two things. First, to achieve competence as a developer, one needs have the tenacity and logical thinking to debug any issue no matter how arcane. Second, to achieve greatness one needs to be able to comprehend the entire problem space in such a way as to account for many more factors than an average developer let alone a non-technical person could ever hold in their head at once, and have the ability to translate those constraints into a system which is at once easier to understand and more elegant than the vast majority of competing solutions.
6cxs2hd6almost 12 years ago
Nearly all the comments so far focus on neophile vs. neophobe. But I took the main point of his post to be orthogonal to that: <i></i>Dianne took time to ask questions<i></i>. She didn&#x27;t immediately dive in and start using her {comfortable old tool, sexy new tool}. She asked about the requirements: Estimated user count, load, connection quality, etc.<p>That&#x27;s the key point. A developer with good judgment will start there. A developer with good judgment might even raise their hand and say, &quot;As I understand this problem, it requires technologies I&#x27;m not so good at. What should we do?&quot;<p>There are exceptions to every rule, and all sorts of projects. But in general, that seems like the sort of developer you want to hire.
EnderMBalmost 12 years ago
There seems to be a self-imagined divide between these two &quot;camps&quot; of developer. We see:<p>1. Hipsters that throw tools at a problem, and are eager to know as many different languages&#x2F;frameworks&#x2F;tools as possible, to stay ahead of the curve.<p>2. Developers that have picked a framework, and stick with it for life. They learn when necessary, but their framework can handle most problems thrown at it.<p>I would consider myself a part of both camps. I read Hacker News because people talk about these tools in use, and I love sitting down at home and toying around with new JavaScript frameworks, and different environments&#x2F;tools. However, I have a job where I use a proven framework, a solid language, and a role where I model problems with a team of like-minded developers.<p>Now, imagine the scenario. I toy around with a new framework and absolutely love it for some use case. I decide to write a tool using Node.js, I use Bootstrap, and then I post it on my blog, Twitter, and on Hacker News. Some will check my work out and think it&#x27;s cool, and others will look at it and will vomit at the very thought of JavaScript running on a server when another server-side language&#x2F;framework would be far more suited to the problem at hand.<p>The point I&#x27;m trying to make is that developers are so keen to slate projects&#x2F;code that was written for fun. My Node.js application isn&#x27;t very good. Hell, I can probably write it a million times better in the language I actually use day-to-day in my job. I just wanted to release it so others can learn from it, and to show that I&#x27;m capable of keeping up with everyone else that is releasing apps-a-plenty in all these crazy new languages I see every day.<p>I agree with the general idea of the article, but only because developers are starting to embody these camps. I see entry-level&#x2F;junior developers that apply for jobs with CV&#x27;s that list every language they&#x27;ve touched for at least half an hour, and I see battle-hardened developers complaining about people trying to legitimise new tools because they&#x27;re &quot;not as good&quot; as the tools that everyone else uses.
venomsnakealmost 12 years ago
How is Dianne solution not maintainable or scalable? I have used flask gevent and mysql to take similar load. MySQL is not bad at all if you check everything you send it with explain detailed while developing.
lhnzalmost 12 years ago
No, that&#x27;s the number one trait of a great employee - and the sign of a leader.<p>The number one trait of a great developer is literally their ability to quickly write amazingly elegant code and manage complexity.
评论 #6320541 未加载
评论 #6320595 未加载
评论 #6320905 未加载
pnathanalmost 12 years ago
Jack drops a couple turds into your codebase, but so does Diane. Hers just take longer to arrive. Inability to seek actual best tools based upon personal fear of the unknown does not a great developer make.<p>Basing one&#x27;s code off the familar or the purported &quot;best practice&quot; without actual knowledge leads to drek down the road. A great developer chooses the right tools for the task (along with other things...) Diane&#x27;s, for instance has these flaws:<p>- Requires a relatively heavy runtime.<p>- Requires HTTP stack.<p>- Wastes CPU&#x2F;power<p>These are not negligible considerations for embedded devices.<p>Someone who knew what the crap they were doing would likely have chosen a binary protocol standard (many such exist), then pumped that information out over an appropriate topology - someone suggested UDP. The database should probably be SQLite; maybe berkDB, depending on the complexity of the data model and the CPU used. Bluntly, the proposed &quot;great&quot; solution isn&#x27;t. It&#x27;s an inelegant solution putting heavy demands on the hardware unnecessarily.<p>Judgement is fine. What you use as a proxy in hiring for judgement is experience. E.g., you don&#x27;t hire a Ruby dev to do embedded work. Experience tells you that.<p>What makes a developer great is great wisdom: knowledge applied skilfully.<p>n.b.: I wouldn&#x27;t hire either Jack or Diane based on this article; Diane is fearful and Jack picked a javascript engine too immature for embedded. Jack might be led to understanding and might be worth more; I don&#x27;t want to go around trying to convince people that better is better - I have no hope for Diane if she can&#x27;t spend a day learning postgres.
评论 #6321094 未加载
评论 #6321602 未加载
w_t_paynealmost 12 years ago
Yes, yes, yes, and thrice more yes.<p>We embrace complexity at our peril. Dullness is a virtue.
评论 #6320567 未加载
评论 #6320419 未加载
JulianMorrisonalmost 12 years ago
Raw UDP+checksum might have been even better. Easier to build on a tiny microcontroller. Lighter on the network. Offers an expansion path to NAT hole punching for push updates.
terranstyleralmost 12 years ago
I agree with the author. A few (actually still good) devs I know prefer to solve a problem in a sophisticated manner, scalable and all the stuff in 160 locs instead of using the non-scalable solution of 40 locs that will also solve the problem, if only for the next 12 months or so.<p>I think the problem is the incentives. As a founder I need the stuff done until some deadline while as an employee I prefer learning new stuff in a company.<p>So I found myself on both sides of this story and I have never been more productive than as a founder because I only choose the small scale solution because I can complete two tasks per day instead of one task every two days.<p>Note that 40 locs is meant as a placeholder for &quot;quick to program and easy to maintain&quot; code and 160 locs for &quot;fast to execute, scales, worse to maintain&quot;<p>EDIT: Worse to maintain as in &quot;the solution is not immediately obvious or I need to understand the abstract concepts employed or I need to know some special lib to understand it&quot;. All three forms of &quot;worse to maintain&quot; are examples of a greater investment of time and brain to understand what&#x27;s going on.
lazyjonesalmost 12 years ago
This kind of judgement is not a sufficient and not even a necessary trait of great developers. It&#x27;s nice to have, but 10 such developers will not allow you to build anything better than Dianne&#x27;s solution.<p>Many great developers have misjudged their abilities or the practicality of particular ideas and solutions. I won&#x27;t name (and shame) any, but look for examples among famous game developers.
waterlionalmost 12 years ago
I never quite worked out what &quot;rockstar&quot; meant, but surely choosing new tech for the sake of it isn&#x27;t it.
评论 #6320798 未加载
评论 #6320492 未加载
mbestoalmost 12 years ago
<i>Listen to the why&#x27;s, and not the what&#x27;s, and you&#x27;ll hear judgement.</i><p>In my experience this is very ill-advised. The answer to &quot;why&quot; questions varies so dramatically that it&#x27;s extremely difficult to get an unbiased, realistic answer to those questions. I normally ask a bunch of &quot;how&quot; questions and eventually you unravel the &quot;why&quot;.<p>The questions presented sound good on paper but don&#x27;t matriculate that way in person. For example:<p><i>What&#x27;s your least favorite part of Ruby and the Ruby on Rails framework, and why?</i><p><i>Tell me about the last time you used an interesting bit of technology, and what you learned from it.</i><p>Are much more naturally spoken as:<p><i>How do you feel about your least favorite parts of Rails?</i><p><i>How have you benefited from an interesting bit of tech?</i><p>It&#x27;s amazing how much more human responses become when you use the words &quot;how&quot; and &quot;feel&quot;.
progxalmost 12 years ago
This is normal.<p>Some people (you call them Rockstars) are interessted in the newest technology and they want to use them to solve problems. No matter how efficient it is or how good somebody can maintain in.<p>But you forgot one thing: the &quot;Rockstars&quot; use technology, that will be normal for the masses 2 or 3 years later.<p>Ruby, for the first time, was used by Rockstars too.<p>It depend on your company and the size, but you need some rockstars and a mass of good developers. The rockstars look for new things, they try them, they show how to use it. The mass of good programmer can look at the results and choose what make a sense to use in productive environmnet.<p>There is nothing bad with a rockstar programmer, only with people that think they are rockstars and talk like &quot;i am the king baby&quot;. ;)
评论 #6320771 未加载
stormcrowsxalmost 12 years ago
The problem they forget to mention is that Diane&#x27;s skills stagnate. Sure she did better this time, but Jack has learned more. Next time through his solution will be faster and have less errors.<p>If everyone was like Diane and just chose what they knew we&#x27;d still be coding in Assembly and be nowhere near the throughput and capability we have now.<p>I often will try multiple implementations if I have the time, break the problem down to something simple I can do with a few languages and tools in a day, contrast them when I&#x27;m done and then go full scale with the one that seems a good fit. More times than not it ends up being a combination of all the solutions I tried because it gives me a chance to discover the strong points in each.
leokunalmost 12 years ago
Yes. Because good judgement requires understanding complex situations, and that requires skill. And judgement is improved by experience.<p>For example you see a bad thing in the code? If you can understand the problem and the risks and benefits, you can make a good decision. If you can possibly make it better, understanding the time available to you, and the risk to the product, you should make it better. Not put it off and let the bad thing become more entrenched technical debt.<p>Making that kind of decision, requires good judgement. It requires understanding your own skill, time management, risk, and more.<p>Being able to exercise good judgement comes with extreme rewards for any project, as there will be less costly mistakes, and more successes and better code.
yashgalmost 12 years ago
In my opinion a great developer is the one who finds a solution to a problem. It doesn&#x27;t matter which technology he&#x2F;she uses. If your organization is already using some tech then you expect the developer to use the same tech so you don&#x27;t have to hire 10 people for 10 different techs. Any any decent developer should be able to look at any code and figure out what it does and be able to tweak a few things here and there.<p>More important things are proper comments, readability of the code and documentation. If there&#x27;s a bug and you are not around, someone else should be able to fix it by looking at your notes. The bug fixer doesn&#x27;t need to be a guru of that tech.
MrWhargarblalmost 12 years ago
I find the list of comments regarding this being &quot;narrow minded&quot;, &quot;contrived&quot; or generally this being &quot;a bad article&quot;.<p>It isn&#x27;t, it&#x27;s spot on. If you&#x27;re outside the bizzaro world of overvalued, under-producing nitwits, the vast majority of technology is written on what&#x27;s already understood by the team&#x2F;developer. Because, you know they have budgets, and project managers, and families.<p>Jack isn&#x27;t a rockstar, he&#x27;s a self-important ass using his employer&#x27;s&#x2F;client&#x27;s funds to learn a new technology that no one can maintain.
akentalmost 12 years ago
Maybe it&#x27;s just because the post is out of date now (2011) but I&#x27;m not sure why &quot;new technology&quot;, &quot;rockstar&quot; and &quot;produces unmaintainable code&quot; are all conflated together.
评论 #6320483 未加载
jaegerpickeralmost 12 years ago
This is a pretty bad article. Sure judgement is important, very important but sometimes using a new better set of technologies is the better judgement. That doesn&#x27;t make things inherently un-maintainable just because it&#x27;s new. That&#x27;s where the judgement part comes in, knowing which new technologies to use in order to build a better&#x2F;more maintainable system. This smacks too much of the author saying this is what I know so it&#x27;s the best and everything else is crap.
nanoscopicalmost 12 years ago
Hacker news commentary options on coding advice: 1. Spin the advice to make it sound like the advice is bad 2. Turn the advice around to make the author look bad 3. Criticize technology choices ( promoting your own choices of course ) 4. Some variant of &quot;duh&quot; or &quot;don&#x27;t reinvent the wheel&quot; 5. Lament the sad realistic state of the programming world 6. Cast the author and others into various categories ( such as what I&#x27;m doing now )
restlessmediaalmost 12 years ago
On this subject. What I find funny, slightly scary and hugely rewarding is visiting old code and removing massive parts of it only to leave it doing pretty much the same thing.<p>It touches on a coding horror article about wanting to write code. Don&#x27;t &#x27;want&#x27; to write it, want to write as little as possible of it. If you do have to write it, write as little as possible and with the notion you&#x27;ll be looking at it in 6 months going wtf.
moron4hirealmost 12 years ago
Learn new technologies on your own time. Don&#x27;t use the client to fund you picking up the latest-greatest whatever. That&#x27;s what personal projects are for. You take the knowledge gained from your personal projects (and unforeseen circumstances in paid projects that you had to code your way out of) and do what you <i>know</i> will work the requirements, versus what will be exciting for you.
solvealmost 12 years ago
Not too sure about the specific content, but that blog theme is beautiful. I wish there was a collection of more text-based web designs.
评论 #6320648 未加载
ef4almost 12 years ago
You lost me when you put &quot;elegant&quot; and &quot;totally unmaintainable&quot; in the same sentence. Does not compute.
otikikalmost 12 years ago
&gt; Dianne started as a Unix Admin &gt; Dianne wrote [...] with a MySQL DB. PostgreSQL would have been better, but she &quot;knew mysql.&quot;<p>Is that even possible? I would bet that knowing PostgreSQL is basic for any &quot;Unix Admin&quot; - assuming he means Unix operations person there.
nealabqalmost 12 years ago
The #1 trait of a great developer is posting subtly self-referencing comments at HN.<p>Also up-voting said comments.
cascaalmost 12 years ago
This is clearly very dated. Everyone knows that Jack should be a ninja, not a rockstar.
评论 #6320766 未加载
joshdancealmost 12 years ago
These articles always should be taken with a grain of salt. Maybe a few grains when they don&#x27;t have a real story to back it up. I want to hear about 2 real developers, what they did, and why one result was better than another.
blisterpeanutsalmost 12 years ago
A star, in my book, is someone who gets the job done quickly, methodically, and maintainably.<p>This is an old story, but I guess it has to be retold every few years, to inform newer developers and to remind older developers (and management).
评论 #6320486 未加载
_random_almost 12 years ago
Diane will be happy to stay for 10 years while getting average salary. Jack will move on to a cooler place while bumping his salary quite a notch because he knows latest tech.
mattjaynesalmost 12 years ago
Hire engineers that will optimize your apps and systems for the <i>highest business value</i> and the <i>lowest cost</i>.<p>It seems silly and obvious to say that, but many engineers seem to have forgotten that goal.<p>The 2 mistakes I see over and over are systems that are optimized for <i>Novelty</i> and systems that suffer from <i>Neglect</i>.<p>## Mistake: Optimizing for Novelty<p>Bored engineers often optimize for novelty. That means they add technologies to your systems not because they&#x27;re needed, but because the engineers want to play with them. Rather than consider the implications of making the systems more complex and more costly to manage, they are easily lured by shiny new technology and come up with justifications to use it even if it provides <i>negative</i> business value.<p>These engineers aren&#x27;t bad people. They will legitimately think that the new technology is a good idea. They may even make an impassioned business case for it. But listening to these engineers is the equivalent of a naive young girl believing a teenage boy &quot;really loves her&quot; at the end of a first date when he wants to go to Make-Out Point &quot;just to talk&quot;. The boy may actually believe this in his heart, but any woman with more experience will see exactly what&#x27;s really going on.<p>To see companies that suffer from this, it&#x27;s as simple as looking at a few job postings for developers. Look for the postings that list requirements for waaaay more technologies than the company could possibly need. It&#x27;s a sign that novelty has cursed that company.<p>For more on this, see my post: <a href="http://devopsu.com/blog/boring-systems-build-badass-businesses/" rel="nofollow">http:&#x2F;&#x2F;devopsu.com&#x2F;blog&#x2F;boring-systems-build-badass-business...</a><p>If someone offers to make your systems &quot;exciting and cool!&quot;, be very afraid. Your systems are the foundation of your business and they should be simple, secure, scalable, and generally pretty boring.<p>## Mistake: Neglect<p>The other problem I see frequently are systems that are simply neglected.<p>No one knows if the database backups work. No one knows if there are critical security updates that need to be applied. No one knows if the site is down until a customer complains. No one knows if the guy who quit a year ago still has a copy of the production database. On and on...<p>You will often see neglect in systems that became complex due to novelty. Every new technology that is added to a system requires monitoring, documentation, and security updates. The more technologies that get added to a system means the more technologies that are at risk of becoming orphans and neglected.<p>## Shameless Plug<p>Manage servers? One of the biggest wins against neglect is to use a configuration management tool like Ansible, Salt, Chef, or Puppet.<p>If you want to make sure your systems are fast, scalable, and secure, the first step is having full control and power over them.<p>Tomorrow, Sept 4th, I&#x27;m launching my book &quot;Taste Test: Puppet, Chef, Salt, Ansible&quot; which is designed to save you the days or weeks of research when picking one of these tools.<p>In the book, I implement an identical project with each tool so you can see what each one is like to work with. You may be surprised at which ones were super easy and which ones were really difficult to work with.<p>To get a discount for the book release, just sign up on the mailing list: <a href="http://devopsu.com/books/taste-test-puppet-chef-salt-stack-ansible.html" rel="nofollow">http:&#x2F;&#x2F;devopsu.com&#x2F;books&#x2F;taste-test-puppet-chef-salt-stack-a...</a>
ianstallingsalmost 12 years ago
<i>Slender fingers</i>
a-priorialmost 12 years ago
I completely agree that pragmatism is essential to being a great developer. When designing a system, you should be asking yourself questions like:<p>1) What sort of load will this system need to handle now and in the foreseeable future, and what sort of latency can it tolerate? How will that load flow through the system? In this contrived scenario, the server and database need to be able to handle an average throughput ~9 requests a minute with lax latency requirements (it&#x27;s okay if things are backed up by a couple minutes). The devices only need to handle one operation per hour. Planning a safety margin of perhaps 10-100% above that is prudent; more than that is premature.<p>2) What are the upgrade characteristics of each component: how will you upgrade or replace each component? how long would it take? can you even upgrade them? Some parts will be in a central location, and can be easily upgraded with only minor downtime. Some will be deployed on hardware you don&#x27;t control or otherwise can&#x27;t be easily upgraded. In the worst case, they&#x27;re embedded in firmware and you need to support them as-is for their entire lifespan.<p>3) What are the failure modes of each component: what could cause them to fail? how likely is that? what will happen if (when) they do? how will you recover?<p>The answers to those questions determine how much risk you can take when designing each component.<p>Also, look at where the answers are different for two components that talk to each other. Any time there&#x27;s a boundary between two components that can&#x27;t be upgraded at the same time, or where one component talks to another with different failure modes, there&#x27;s an interface. You need to think hard about the interface between them: how will they communicate? how will you extend that communication protocol over time while maintaining backwards compatibility? how will they behave if the other has failed? Those interfaces are locations where over-engineering a bit can pay off.<p>So for this example, I would think hard about what runs on the devices and how they talk to the back end, because that code is probably very difficult to upgrade. I would use rock-solid, dependable technologies for those. Similarly, the database probably stores important information, and one of its failure modes is that all the data is lost due to hardware failure. So I would use a mature database there, either MySQL or PostgreSQL.<p>But the back-end service? It&#x27;s easy to upgrade and because it&#x27;s stateless, its two failure modes are that it crashes and it needs to be restarted, or that the hardware fails and it needs to be re-deployed. Neither failure mode is that bothersome, so it doesn&#x27;t matter what technology you use there. Use whatever the team is most familiar with and will let you iterate the fastest.
arkjalmost 12 years ago
c&#x27;mon!!! it&#x27;s not all about trust, it&#x27;s also about the code.
corresationalmost 12 years ago
This is one of those &quot;why <i>I</i> am a great developer&quot; sorts of posts that allows people to pat themselves on the back and congratulate each other on how great they are, passive-aggressively sending it out to the team in hopes of denigrating some team member who likes newer things. In this case &quot;judgement&quot; means &quot;uses the things that I know&quot;, and there seems to be little evaluation beyond that high-level use case.<p>Why was -- in this contrived scenario -- Jack&#x27;s solution a &quot;maintenance nightmare&quot;? Just because.
评论 #6321541 未加载
评论 #6320904 未加载
评论 #6320888 未加载
评论 #6320926 未加载
评论 #6322146 未加载
评论 #6321124 未加载