<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>mhinze.com&#187; A few thoughts</title>
	<atom:link href="http://mhinze.com/category/deep-thoughts/feed/" rel="self" type="application/rss+xml" />
	<link>http://mhinze.com</link>
	<description>Matt Hinze, learning in public</description>
	<lastBuildDate>Tue, 20 Apr 2010 22:42:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>A few thoughts</title>
		<link>http://mhinze.com/thoughts2/</link>
		<comments>http://mhinze.com/thoughts2/#comments</comments>
		<pubDate>Tue, 09 Sep 2008 22:29:21 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Deep thoughts]]></category>
		<category><![CDATA[Agile]]></category>
		<category><![CDATA[ASP.NET MVC]]></category>
		<category><![CDATA[aspnetmvc]]></category>
		<category><![CDATA[headspring]]></category>
		<category><![CDATA[programming]]></category>
		<category><![CDATA[uml]]></category>
		<category><![CDATA[yagni]]></category>

		<guid isPermaLink="false">http://mhinze.com/?p=96</guid>
		<description><![CDATA[Microsoft wants you to think of a web page as an action, but it&#8217;s really a collection of subcontrollers. Mahendra Mavani is one of the very talented software engineers working at Headspring and he knows all the obscure Resharper shortcuts (serious geek cred). Coding is an indulgent, wasteful activity.&#160; Design is best done away from [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li>Microsoft wants you to think of a web page as an <strong>action</strong>, but it&#8217;s really a <a href="http://groups.google.com/group/mvccontrib-discuss/browse_thread/thread/b050e21fe322c08a">collection of subcontrollers</a><strong>.</strong>
<li><a href="http://mahendramavani.blogspot.com/">Mahendra Mavani</a> is one of the very talented software engineers working at Headspring and he knows all the obscure Resharper shortcuts (serious geek cred).
<li>Coding is an indulgent, wasteful activity.&nbsp; Design is best done away from the keyboard.&nbsp; Sure, once we get to writing tests and writing code things change, but for a general understanding nothing works better than a whiteboard, pseudo-UML and sequence diagrams.
<li>It&#8217;s really, really easy to under-estimate and over-commit.&nbsp; Under estimating is the default.&nbsp; It&#8217;s much harder to under-promise and over-deliver because that requires technical experience <strong>along with</strong> people-skills.
<li>Conventions enable rapid development.&nbsp; Following them takes discipline.
<li><a href="http://www.ayende.com/Blog/archive/2008/08/27/JFHCI-Quote-of-the-Day.aspx">JFHCI</a>: look for ways to do this.&nbsp; YAGNI takes discipline &#8211; this fact is counterintuitive.&nbsp;
<li>100% code coverage isn&#8217;t important in and of itself, but as a track on which to glide towards the goal of well designed software, nothing works better.
<li>Stack Overflow .com is pretty sweet, and fun.&nbsp; Except for all the regular internet discussion problems.
<li>There&#8217;s a certain sweet satisfaction in the progress of story cards from left to right.&nbsp; If you aren&#8217;t being transparent in your work (up and down the org. structure)&#8230; try it. It&#8217;s truly refreshing.
<li>Austin is a great town for software.&nbsp; AgileATX, ADNUG, etc.&nbsp; Lots of cool and smart people to hang out with and talk to about our [a]vocation. </ul>
]]></content:encoded>
			<wfw:commentRss>http://mhinze.com/thoughts2/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>My boss&#8217; boss&#8217; boss</title>
		<link>http://mhinze.com/my-boss-boss-boss/</link>
		<comments>http://mhinze.com/my-boss-boss-boss/#comments</comments>
		<pubDate>Thu, 10 Jul 2008 01:54:03 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Deep thoughts]]></category>
		<category><![CDATA[business]]></category>
		<category><![CDATA[culture]]></category>

		<guid isPermaLink="false">http://mhinze.com/?p=42</guid>
		<description><![CDATA[I had a one on one meeting with my boss&#8217; boss&#8217; boss today.&#160; In the organizational chart he is a direct report to the CIO.&#160; He was meeting with everyone reporting to our director to assess the state of our transition after a merger. As a disclaimer, this is a 55k employee, $11 bil. company. [...]]]></description>
			<content:encoded><![CDATA[<p>I had a one on one meeting with my boss&#8217; boss&#8217; boss today.&nbsp; In the organizational chart he is a direct report to the CIO.&nbsp; He was meeting with everyone reporting to our director to assess the state of our transition after a merger.</p>
<p>As a disclaimer, this is a 55k employee, $11 bil. company.</p>
<p>He said he wanted to organize &#8220;communities of practice&#8221; (in other words: &#8220;networks of experts&#8221;) so that people interested and expert in various IT subjects could collaborate.&nbsp; So, for example, there would be a .NET community of practice &#8211; a venue, for example, for questions, answers, ideas and experiences to be shared across a globally and organizationally distributed set of company .NET developers.</p>
<p>This was taking some time &#8211; his directs are wanting plans, structure, resources and causing delays. </p>
<p>I&#8217;m definitely not at the level my boss (3rd removed) is at, nor do I have anything approaching his experience in business or IT, but this struck me as super strange.</p>
<p>We spend millions of dollars on servers, client software and email servers to facilitate these discussions.&nbsp; I told him he could do it in 5 minutes.&nbsp; Send an email to the helpdesk requesting that an email distribution list be created, all the developers subscribed to the list.&nbsp; Then send a note to the list asking everyone to send an introductory email.&nbsp; If the list gets busy and starts asking questions and sending interesting things, problem solved, task accomplished.&nbsp; If they don&#8217;t, then you don&#8217;t need the community of practice to begin with.&nbsp; If the list needs to share code snippets or something then they&#8217;ll find a service or make one. </p>
<p>I&#8217;m sure there&#8217;s more to this than what I understand, but I can&#8217;t help but wonder if sometimes we think an entire culture needs to change when all it really needs is an email to the helpdesk.</p>
]]></content:encoded>
			<wfw:commentRss>http://mhinze.com/my-boss-boss-boss/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Looking back</title>
		<link>http://mhinze.com/looking-back/</link>
		<comments>http://mhinze.com/looking-back/#comments</comments>
		<pubDate>Fri, 04 Jul 2008 21:48:15 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Deep thoughts]]></category>
		<category><![CDATA[career]]></category>
		<category><![CDATA[continuous improvement]]></category>

		<guid isPermaLink="false">http://mhinze.com/?p=41</guid>
		<description><![CDATA[Taking a moment to look back.&#160; When I accepted my current job in January 2006 I was looking to grow up as a software developer. Since then I&#8217;ve learned a lot of things and these, for me and in no particular order, were the some of the most important. 1.&#160; The strategy pattern and others [...]]]></description>
			<content:encoded><![CDATA[<p>Taking a moment to look back.&nbsp; When I accepted my current job in January 2006 I was looking to grow up as a software developer. Since then I&#8217;ve learned a lot of things and these, for me and in no particular order, were the some of the most important.</p>
<p>1.&nbsp; The strategy pattern and others</p>
<p>Chapter 1 of Head First Design Patterns changed my life, and I&#8217;m not afraid to admit it.&nbsp; I devoured the rest of the book.&nbsp; And then, newly motivated, I read a bunch of other books.&nbsp; This led to the understanding of other patterns and formalized principles behind OOP, and I gained a base upon which to build more skill.</p>
<p>2. Inversion of control</p>
<p>Tools that transform patterns and principles out of the realm of &#8220;elegance&#8221; and into the reality of &#8220;efficiency&#8221; have changed the way I work.</p>
<p>3. Test first</p>
<p>I attended TechEd 2005 and the VS 2005 team was showing off all the new features.&nbsp; The one that grabbed my attention was the &#8220;object workbench&#8221; &#8211; where you could instantiate objects and play with them in isolation.&nbsp; &#8220;This is great,&#8221; I thought, &#8220;because now I&#8217;ll be able to see exactly what my code is doing.&#8221;&nbsp; I never did play with the object workbench (was it just vapor?), but when I understood later that this vision had been realized already in the form of unit testing I was immediately hooked. </p>
<p>I didn&#8217;t get it at first.&nbsp; Like everything else, I had to cut my teeth on it.&nbsp; I picked some side project and did it with TDD.&nbsp; I could see my design being different than I would have done it before.&nbsp; When I went to make a change I was able to do so with confidence.</p>
<p>I test drive almost everything now.&nbsp; And trust me &#8211; I still make many stupid mistakes.&nbsp; But I understand that&#8217;s part of the process and it&#8217;s trivial to fix most of them.</p>
<p>4. Refactoring</p>
<p>Specifically <a href="http://www.amazon.com/Refactoring-Improving-Existing-Addison-Wesley-Technology/dp/0201485672">the book</a>.&nbsp; This is something they don&#8217;t (or didn&#8217;t) teach at University.&nbsp; I can actually use a rigorous process to correct myself!</p>
<p>5. The transition from ADO.NET to ORM</p>
<p>I started with ADO.NET (that&#8217;s all I knew about) and had my little helper classes and everything, just like everyone else did.&nbsp; I built some nice active recordy type frameworks for applications I wrote. </p>
<p>I read with great enthusiasm Mitchell&#8217;s data access tutorials for/from Microsoft and built entire applications with those practices.&nbsp; I remember cringing every time I had to add a row to a grid or change a screen &#8211; the logic was almost entirely in the markup.</p>
<p>I discovered Subsonic, and found it very cool but mostly unusable for several reasons I won&#8217;t list.</p>
<p>Then I finally got around to reading <a href="http://www.codeproject.com/KB/architecture/NHibernateBestPractices.aspx">Billy McAfferty&#8217;s NHibernate article</a> and stepped through the demos.&nbsp; What took me so long? I built a sample app to cut my teeth and have never looked back.&nbsp; Nothing in my career, in my daily tasks, has saved my company more money than my tiny start at understanding NHibernate.&nbsp; &#8220;Finally,&#8221; I thought, &#8220;I can program with objects.&#8221;&nbsp; I later tried several other ORMs and shelved them for reasons usually related to friction.</p>
<p>I find it very odd that a lot of guidance from Microsoft (MSDN, the <a href="http://www.microsoft.com/learning/en/us/syllabi/2124Cfinal.mspx">MOC</a> I was teaching as an MCT) centers around object orientation but their data access strategies do not properly support it.&nbsp; Line of business software is (or has been, for me this is starting to change) all about data &#8211; reports, CRUD, legacy data, etc. is involved in almost every feature I deliver to the business.&nbsp; And if the data access is not OO, nothing is OO.</p>
<p>6. Domain driven design</p>
<p>I have to admit I haven&#8217;t trudged my way through the entire book.. I have it and I&#8217;ve probably read most of the words in it but I find it a terrible beating to read straight through.&nbsp; My understanding is therefore limited.&nbsp; But concepts I have picked up while working on open source and through the community have helped.&nbsp; I also read <a href="http://www.infoq.com/news/2006/12/domain-driven-design">DDD Quickly</a>, a summary pdf ebook.&nbsp; I get the <a href="http://tech.groups.yahoo.com/group/domaindrivendesign/">yahoo group</a> messages in my email inbox.</p>
<p>DDD has allowed me to further my application of object oriented programming even more. DDD took what I had learned from NHibernate examples and blew it up to a fuller and richer object orientation.</p>
<p>7. Contributing to open source&#8230;</p>
<p>&#8230; is one of the most exhilarating things in the world for me.&nbsp; This is not an exaggeration.. there is <em>nothing</em> like it.&nbsp; I will never forget my first sweaty-palmed commit, watching cctray like a hawk.</p>
<p>8. Community</p>
<p>I spent a long time just looking for communities without realizing that&#8217;s what I was doing.&nbsp; Joining them has elevated my level of discourse (technically), exposed me to new ideas, and introduced me to people I can social network with.&nbsp; Communities oriented around software user groups, ecosystems and practices are extremely helpful.&nbsp; Mentors are the best &#8211; if you don&#8217;t have one, get one.&nbsp; A lot of the time, online, you don&#8217;t even need their permission.&nbsp; =)</p>
<p>I have had 5 minute phone conversations with people that have enabled me to jump ahead farther than any one book or principle.</p>
<p>I have always been pretty good at using social networking tools, but now I have a frame of reference that allows me to collect more and better information.</p>
<p>Passion breeds quality.&nbsp; Passionate people are involved in communities.&nbsp; Involving myself in communities and surrounding myself with other passionate people has upped my quality.</p>
<p>9. Vertical slices</p>
<p>My professional experience with Agile is limited.&nbsp; It is not &#8220;what we do&#8221; on my current team.&nbsp; Because I usually work on projects by myself and have a large degree of control over the software I produce, I am able to practice pieces of it on a micro level.&nbsp; The main tenet that I have found to be helpful is to deliver working software early.&nbsp; Working software is all we have to give, the rest are &#8220;gets&#8221;.&nbsp; As I work in vertical slices rather than in horizontal tiers, and refactor as I go, my designs are much more robust and flexible.&nbsp; Frictionlessness is also key.&nbsp; XP concepts like contiuous integration have really made things much easier than the &#8220;Program and pray&#8221; method.&nbsp; Time to login screen is a great metric.</p>
<p>10. The old &#8220;The more you know the more you know you don&#8217;t know&#8221; thing</p>
<p>I realize that a lot of these things are so common now and passe (at least it feels that way compared to the level of the people in the communities I listen to).&nbsp; I strive to be the &#8220;dumbest guy in the room.&#8221;</p>
<p>11. Technical books read different</p>
<p>I have learned that reading technical books is different than reading textbooks and not at all like reading fiction or prose.&nbsp; I always thought I was a quick reader, but I am not afraid to read a page several times to understand it completely.</p>
<p>12. I do something new in every project</p>
<p>Because of the level of control I have over my projects I require myself to try something new with each one.&nbsp; This has not caused me more friction &#8211; I consider it self guided training.&nbsp; I spike random stuff more often.</p>
]]></content:encoded>
			<wfw:commentRss>http://mhinze.com/looking-back/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Relativism, crucibles and criticism</title>
		<link>http://mhinze.com/relativism-crucibles-criticism/</link>
		<comments>http://mhinze.com/relativism-crucibles-criticism/#comments</comments>
		<pubDate>Tue, 01 Jul 2008 11:20:13 +0000</pubDate>
		<dc:creator>Matt</dc:creator>
				<category><![CDATA[Deep thoughts]]></category>

		<guid isPermaLink="false">http://mhinze.com/?p=40</guid>
		<description><![CDATA[Crucibles&#160; A crucible is a &#8220;severe test&#8221; or a &#8220;trial&#8221; &#8211; something through which an idea is passed so that it may be refined, hardened by time, sharpened with experience, and clarified by intellect until it becomes acceptable for practice. A good idea has suffered through the crucibles of competition and community, emerged from it [...]]]></description>
			<content:encoded><![CDATA[<ul>
<li>Crucibles&nbsp; </li>
<ul>
<li>A crucible is a &#8220;severe test&#8221; or a &#8220;trial&#8221; &#8211; something through which an idea is passed so that it may be refined, hardened by time, sharpened with experience, and clarified by intellect until it becomes acceptable for practice.
<li>A good idea has suffered through the crucibles of competition and community, emerged from it more robust, and is elevated within those communities as more optimal than alternatives.
<li>There&#8217;s really no other way for non-scientific ideas to prove useful or not.</li>
</ul>
<li>Criticism </li>
<ul>
<li>Criticism as an aspect of crucible is vital
<li>Criticism as avoidance of crucible is crippling
<li>How do we know the difference? </li>
<ul>
<li>Crucible criticism: Practiced, intentional, provides alternatives, instructive, cautionary, demonstratable, clear
<li>Crippling criticism: Defensive, personal, unfamiliar with alternatives, destructive, reactionary, abstract</li>
</ul>
</ul>
<li>There&#8217;s a better way of doing things. It&#8217;s not relative.
<li>If you don&#8217;t understand that, you&#8217;ll never <em>find</em> a better way of doing things.&nbsp; There&#8217;s no motivation to grow and adapt if the status quo is acceptable.
<li>Software development, while still a young field, has a rich history of internal debate, agreed-upon best practices, and deep community expertise.
<li>Nothing is set in stone, but that doesn&#8217;t mean you&#8217;re not doing it wrong.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://mhinze.com/relativism-crucibles-criticism/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
