<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Nathan Brixius : The Best and the Brightest</title><link>http://blogs.msdn.com/natbr/archive/tags/The+Best+and+the+Brightest/default.aspx</link><description>Tags: The Best and the Brightest</description><dc:language>en-US</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>Musings on leadership</title><link>http://blogs.msdn.com/natbr/archive/2008/06/11/on-management.aspx</link><pubDate>Wed, 11 Jun 2008 22:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:8591965</guid><dc:creator>Nathan Brixius</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/natbr/comments/8591965.aspx</comments><wfw:commentRss>http://blogs.msdn.com/natbr/commentrss.aspx?PostID=8591965</wfw:commentRss><wfw:comment>http://blogs.msdn.com/natbr/rsscomments.aspx?PostID=8591965</wfw:comment><description>It occurs to me that there's a difference between "getting the most" and "getting the best" from someone.&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=8591965" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/natbr/archive/tags/The+Best+and+the+Brightest/default.aspx">The Best and the Brightest</category></item><item><title>What makes a good software developer</title><link>http://blogs.msdn.com/natbr/archive/2007/07/23/what-makes-a-good-software-developer.aspx</link><pubDate>Tue, 24 Jul 2007 03:59:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:4019764</guid><dc:creator>Nathan Brixius</dc:creator><slash:comments>4</slash:comments><comments>http://blogs.msdn.com/natbr/comments/4019764.aspx</comments><wfw:commentRss>http://blogs.msdn.com/natbr/commentrss.aspx?PostID=4019764</wfw:commentRss><wfw:comment>http://blogs.msdn.com/natbr/rsscomments.aspx?PostID=4019764</wfw:comment><description>&lt;P&gt;A colleague asked me to jot down some thoughts on what makes a good developer at Microsoft.&amp;nbsp; This is by no means complete, but three statements come to mind when I think about strong developers:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;We are engineers, not hackers.&lt;/LI&gt;
&lt;LI&gt;A strong dev should be able to fill any engineering role in the company.&lt;/LI&gt;
&lt;LI&gt;Senior devs improve their teams by action and by example.&lt;BR&gt;&amp;nbsp;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;&lt;STRONG&gt;We are engineers, not hackers.&lt;/STRONG&gt;&amp;nbsp; My dev manager in &lt;A class="" title="Project blog" href="http://blogs.msdn.com/project" target=_blank mce_href="http://blogs.msdn.com/project"&gt;Project&lt;/A&gt; (my previous team)&amp;nbsp;said this years ago and it has stuck with me ever since.&amp;nbsp; Engineering is a craft whereas hacking is a hobby, and I expect a Microsoft dev to seek to become a master of the craft.&amp;nbsp; Engineers understand common patterns underlying the problems they solve and seek to make their code predictable and reliable.&amp;nbsp; (This doesn't suck the creativity or joy out of the process, rather it should liberate us.)&amp;nbsp; For an engineer, process is not an end to itself but a tool for arriving at solid designs and trustworthy code.&amp;nbsp; Engineers take great pride in their creations and stand behind them.&lt;BR&gt;&amp;nbsp;&lt;BR&gt;Engineering practices apply to all stages of software development.&amp;nbsp; In the design phase I expect a structured approach that leads to a design that clearly meets the needs described in the spec.&amp;nbsp; The deliverable is a design doc that describes how the feature is implemented.&amp;nbsp; A good design doc is an aid to the developer, his/her peers, as well as Test/PM.&amp;nbsp; I don't want to get into details about what makes a good design doc, but it should describe the primary design and implementation challenges and how they are addressed, and why other reasonable approaches were rejected.&amp;nbsp; On a services team it's particularly important to think of the impact the feature has on setup, deployment, and monitoring, and account for these early.&lt;BR&gt;&amp;nbsp;&lt;BR&gt;Everyone has things to say about coding guidelines, so I won't dwell on them much here.&amp;nbsp; I assembled a set of team-wide guidelines and I expect those to be followed.&amp;nbsp; I always look for simplicity and consistency.&amp;nbsp; As a services team I particularly value unit tests and tracing.&amp;nbsp; &lt;BR&gt;&amp;nbsp;&lt;BR&gt;Finally, I expect a positive handoff to test.&amp;nbsp; By this I mean a detailed TRD (test release document)&amp;nbsp;that describes what the feature does, what works, what doesn't work, and suggestions for testing the feature.&amp;nbsp; I expect code to be structured so that it is easy to test as possible.&amp;nbsp; I don't particularly care for metrics based on the number of bugs a dev fixes.&amp;nbsp; I value developers who prevent bugs from happening in the first place, and it's easiest to do this in the earliest stages of the project before any code is written.&amp;nbsp; This begs the question of how do we measure the quality of a feature relative to the time spent on it.&amp;nbsp; I don't have easy answers except to say that if leads and peers are involved in the entire development process, it is easier to come to a collective understanding of how challenging a feature is and how well the developer has done at implementing it.&amp;nbsp; In other words, it comes down to judgment.&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&lt;STRONG&gt;A strong dev should be able to fill any engineering role in the company.&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp; The statement applies in two ways.&amp;nbsp; First, a dev should be able to wear their "PM hat" or "test hat" and operate effectively within that role.&amp;nbsp; Perhaps this is statement is too "old school Microsoft", and I certainly don't mean to detract from the roles of Test and PM.&amp;nbsp; After all, Test and PM are also engineering disciplines.&amp;nbsp;&amp;nbsp; I simply mean that devs have a deep understanding of customer requirements and are able to make their own assessments of the relative priority of features and work items, and can make suggestions as to how to improve the experience.&amp;nbsp; Devs should be able to be ruthless testers of their own (and their teammates) features and provide actionable feedback that results in improvements.&amp;nbsp; They write unit tests, which guarantee a certain level of quality.&amp;nbsp; Having the ability to operate in another role also prevents a dev from becoming blocked, and provides broader perspectives which assist devs in interacting with their Test and PM counterparts.&amp;nbsp; Everyone understands where everyone else is coming from, and that makes for a more enjoyable working environment.&lt;BR&gt;&amp;nbsp;&lt;BR&gt;Secondly the statement means that a dev is not dependent on domain-specific knowledge to be effective.&amp;nbsp; A deep understanding of specific technologies, code bases, and design patterns is essential for good engineers.&amp;nbsp; But a strong dev is not a "one trick pony" that can only work in one area (though they may prefer to do so, and may be asked to do so from time to time).&amp;nbsp; A dev has technical depth, but also technical breadth, which allows them to see how their code functions to serve a larger purpose.&amp;nbsp; I'd like to think that I could be dropped into the middle of Windows, and though I would probably hate it, I would be effective.&lt;BR&gt;&amp;nbsp;&lt;BR&gt;&lt;STRONG&gt;Senior devs improve their teams by action and by example.&lt;/STRONG&gt;&amp;nbsp; There are only so many hours in a day, so at a certain point it becomes more difficult to provide more value by simply coding more or working longer.&amp;nbsp; Actions that make others better have a compounding benefit that can have a huge impact over time.&amp;nbsp; Most of us can think of old timers that seem to have an awesome level of productivity, to the extent that it's hard to understand how they can be that effective.&amp;nbsp; I suggest that in most cases, these old timers have mastered the art of making others better.&amp;nbsp; First, they typically do not worry themselves about things like "scope" or "area".&amp;nbsp; Making Microsoft better is their "area", and that extends to fixing bugs in other dev's code, fixing build problems, improving processes, giving feedback to other teams.&amp;nbsp; Master devs share knowledge, through conversations, whiteboard sessions, documents, blogs.&amp;nbsp; They cringe when they hear people talk about "their code"; it's "our code".&amp;nbsp; Their movements are not hurried, but always with purpose.&amp;nbsp;&amp;nbsp; They've got time for other people, and still get their work done.&amp;nbsp; They're able to do this because they identify patterns in their work and automate them, either by defining a design pattern, or by architecting the system appropriately, or by writing tools that do their work for them.&amp;nbsp; Then they share this knowledge with the rest of the team and build a culture where others do the same.&amp;nbsp; Lastly, they continually seek new opportunities to make themselves and their team better.&amp;nbsp; These opportunities come up all the time in a product cycle; a master dev spots them first and steps in to fill a need, for example by forwarding an email to someone who knows the answer; seeing that a new platform component could help implement features in two different projects; adding a new unit test that enforces a coding or stylistic convention.&lt;BR&gt;&amp;nbsp;&lt;BR&gt;I love it when devs are passionate about delivering something that works and is useful!&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=4019764" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/natbr/archive/tags/Dynamics+Live/default.aspx">Dynamics Live</category><category domain="http://blogs.msdn.com/natbr/archive/tags/The+Best+and+the+Brightest/default.aspx">The Best and the Brightest</category><category domain="http://blogs.msdn.com/natbr/archive/tags/Software+Development/default.aspx">Software Development</category></item><item><title>How to generate a GUID in 250K easy steps</title><link>http://blogs.msdn.com/natbr/archive/2006/12/04/how-to-generate-a-guid-in-250k-easy-steps.aspx</link><pubDate>Mon, 04 Dec 2006 23:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1207543</guid><dc:creator>Nathan Brixius</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/natbr/comments/1207543.aspx</comments><wfw:commentRss>http://blogs.msdn.com/natbr/commentrss.aspx?PostID=1207543</wfw:commentRss><wfw:comment>http://blogs.msdn.com/natbr/rsscomments.aspx?PostID=1207543</wfw:comment><description>&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;A friend on my previous team wrote a tool to generate GUID values where the first two bytes are zero. (And I'll say right here that I don't think there is a legitimate need for such a tool, but that's not the point.) I'm working from memory but the C# code was something like:&lt;/P&gt;
&lt;P style="FONT-SIZE: 10pt; MARGIN: 0in 0in 0in 0.375in; FONT-FAMILY: 'Courier New'"&gt;&lt;BR&gt;public static Guid Generate() &lt;BR&gt;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;Guid guid = Guid.NewGuid();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;while (!guid.ToString().StartsWith("0000"))&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;{&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;guid = Guid.NewGuid();&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;BR&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;return guid;&lt;BR&gt;}&lt;BR&gt;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;As I said, it was for a tool, and it would only get called once so the perf doesn't really matter; it gets the job done.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I just thought it was a pretty funny approach.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;The friend in question was an excellent programmer, so I am going to blame it on too many limoncellos.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;All I know is that now he's in law school.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Generating a GUID and just zeroing out the first two bytes (using ToByteArray and the appropriate Guid ctor) appears to be about 250,000 times faster.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;That seems about right, if you think about it.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1207543" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/natbr/archive/tags/The+Best+and+the+Brightest/default.aspx">The Best and the Brightest</category><category domain="http://blogs.msdn.com/natbr/archive/tags/C_2300_/default.aspx">C#</category></item><item><title>The Jordan Rules</title><link>http://blogs.msdn.com/natbr/archive/2006/11/28/the-jordan-rules.aspx</link><pubDate>Wed, 29 Nov 2006 01:33:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1167932</guid><dc:creator>Nathan Brixius</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/natbr/comments/1167932.aspx</comments><wfw:commentRss>http://blogs.msdn.com/natbr/commentrss.aspx?PostID=1167932</wfw:commentRss><wfw:comment>http://blogs.msdn.com/natbr/rsscomments.aspx?PostID=1167932</wfw:comment><description>&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Part of what I am enjoying about The Best and The Brightest are the profiles of the generals, presidents, and policy makers.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;McGeorge Bundy was the Special Assistant for National Security Affairs under JFK and LBJ; prior to this he was a faculty member and president of Harvard.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;p.58:&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;"Even the slight nastiness, which has from time to time been a Bundy trademark, was an advantage; he had the ability to be unfair, to go after special men and give them special privileges, people like Riesman and Erikson who did not teach as much as other members of the faculty."&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;When I read this passage I immediately thought to myself, "Jordan Rules".&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;&lt;A href="http://www.amazon.com/Jordan-Rules-Sam-Smith/dp/0671796666" mce_href="http://www.amazon.com/Jordan-Rules-Sam-Smith/dp/0671796666"&gt;The Jordan Rules&lt;/A&gt; is the name of Tribune writer Stan Smith's book on the Chicago Bulls' first championship season.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If I remember correctly, in the book the term refers not to &lt;A href="http://en.wikipedia.org/wiki/Jordan_Rules" mce_href="http://en.wikipedia.org/wiki/Jordan_Rules"&gt;how the Pistons would try to defend Jordan&lt;/A&gt; but instead the special accommodations made by teammates and coaches because of his star status.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Another theme is Jordan learning that he needs his teammates to win, but to me that's less interesting.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;What interests me is that there are two sets of rules - one for Jordan and one for everyone else - and ultimately that's okay because MJ is MJ.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;There's 12 (or maybe 15, I forget) guys on a team so the system can work.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;It is clear why Jordan gets special privileges because everyone sees the results (and the means) for themselves.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;If a guy is outworking you, whipping you in practice, and carrying your team in games it's hard to argue too much.&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;This kind of power can be damaging if taken too far (see: Kobe Bryant).&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;Back to the quote, I'm not so sure the Jordan Rules work as well in a larger organization like a university because "the stars" are less visible.&amp;nbsp; To be clear, I'm not necessarily advocating it, I&amp;nbsp;just think it's an interesting concept.&amp;nbsp; Questions like these have been popping up every few pages as I work through the book.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Calibri"&gt;Last note: David Halberstam has also written a book about Jordan, it's called "Playing for Keeps".&lt;SPAN style="mso-spacerun: yes"&gt;&amp;nbsp; &lt;/SPAN&gt;I haven't read it, though.&lt;/P&gt;
&lt;P style="FONT-SIZE: 11pt; MARGIN: 0in; FONT-FAMILY: Arial" mce_keep="true"&gt;&amp;nbsp;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1167932" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/natbr/archive/tags/The+Best+and+the+Brightest/default.aspx">The Best and the Brightest</category></item></channel></rss>