<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0"><channel><title>Jeffrey Palermo (.com)</title><link>http://jeffreypalermo.com/</link><description>Chief Technology Officer, Headspring Systems</description><generator>Graffiti CMS 1.2 (build 1.2.0.2308)</generator><lastBuildDate>Fri, 04 Nov 2011 14:57:45 GMT</lastBuildDate><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/jeffreypalermo" /><feedburner:info uri="jeffreypalermo" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:emailServiceId>jeffreypalermo</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item><title>New docking station for Samsung Series 7 Windows tablet</title><link>http://feedproxy.google.com/~r/jeffreypalermo/~3/pgU8SGULBt4/</link><pubDate>Fri, 04 Nov 2011 13:57:45 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/new-docking-station-for-samsung-series-7-windows-tablet/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>3</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;Yesterday, the docking station for the Samsung Series 7 tablet came in the mail.&amp;#160; I hooked it up to the computer and set it up as the computer running our 50” plasma TV in the main room from which we do our stand-up meetings in the morning.&amp;#160; Now we have Windows 8 running on the big screen at the &lt;a href="http://www.headspring.com"&gt;Headspring&lt;/a&gt; office.&lt;/p&gt; &lt;iframe height="315" src="http://www.youtube.com/embed/j8dcfLbs7NI" frameborder="0" width="560" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;  &lt;p&gt;Take a look.&amp;#160; It’s a rough video, but you can see what the dock looks like.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=pgU8SGULBt4:ThRQnPEJCm8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=pgU8SGULBt4:ThRQnPEJCm8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=pgU8SGULBt4:ThRQnPEJCm8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/pgU8SGULBt4" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/new-docking-station-for-samsung-series-7-windows-tablet/</feedburner:origLink></item><item><title>Installing Windows 8 on the Samsung Series 7 tablet</title><link>http://feedproxy.google.com/~r/jeffreypalermo/~3/futkvaIYl4c/</link><pubDate>Tue, 01 Nov 2011 20:55:48 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/installing-windows-8-on-the-samsung-series-7-tablet/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>3</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;&lt;a href="http://jeffreypalermo.com/blog/new-windows-tablet-pc-unboxed/"&gt;Earlier&lt;/a&gt; this week, &lt;a href="http://www.headspring.com"&gt;Headspring&lt;/a&gt; received shipment of some &lt;a href="http://www.microsoftstore.com/store/msstore/en_US/pd/productID.238020100"&gt;Samsung Series 7 tablet&lt;/a&gt; computers from the Microsoft Store.&amp;#160; &lt;a href="http://www.kurtschindler.net/"&gt;Kurt Schindler&lt;/a&gt; volunteered to installed Windows 8 on the computer, so he made a rather large USB drive &lt;/p&gt; &lt;iframe height="315" src="http://www.youtube.com/embed/gB6rU9_FYnE" frameborder="0" width="560" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;  &lt;p&gt;bootable with the &lt;a href="http://www.microsoftstore.com/store/msstore/html/pbPage.Help_Win7_usbdvd_dwnTool"&gt;Windows 7 USB/DVD download tool&lt;/a&gt; (&lt;a href="http://liliputing.com/2011/09/how-to-install-windows-8-using-a-usb-flash-drive.html"&gt;how-to article here&lt;/a&gt;).&amp;#160; I briefly go over the initial experience in this video.&amp;#160; You can see the new tablet interface called Metro.&amp;#160; These apps run in the WinRT runtime, which is a constrained runtime similar to Silverlight’s runtime.&amp;#160; You can also write C++ and Html/JavaScript apps in this runtime.&amp;#160; When running applications you are familiar with, like the desktop version of Skype, you tap the Skype tile that is laid out there for you.&amp;#160; No more hunting around in a huge start menu.&amp;#160; &lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=futkvaIYl4c:w2rZluAvcA8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=futkvaIYl4c:w2rZluAvcA8:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=futkvaIYl4c:w2rZluAvcA8:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/futkvaIYl4c" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/installing-windows-8-on-the-samsung-series-7-tablet/</feedburner:origLink></item><item><title>Could the app be the solution to the failed software project problem?</title><link>http://feedproxy.google.com/~r/jeffreypalermo/~3/LUaNdsWg8XU/</link><pubDate>Tue, 01 Nov 2011 20:46:15 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/could-the-app-be-the-solution-to-the-failed-software-project-problem/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>1</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;&lt;a href="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/Couldtheappbethesolutiontothefailedsoftw_DDCC/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; margin: 0px 5px 5px 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" align="left" src="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/Couldtheappbethesolutiontothefailedsoftw_DDCC/image_thumb_1.png" width="112" height="165" /&gt;&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;In Fred Brooks’ book, The Mythical Man-Month, Mr. Brooks provides several essays that share his experience in the software industry going back to 1959.&amp;#160; One of the common themes found through several essays is that the size of the project is directly related to the risk of failure.&lt;/p&gt;  &lt;p&gt;If the size of the project puts the project at a greater risk to fail, then a smaller project mitigates the size and scope risk.&amp;#160; There are many factors that could contribute to a failed project, but it is interesting to ponder whether we will see project success statistics change at a macro level when the normal size of an interactive application decreases because of the industry’s move to tablet form factors over the next five years.&amp;#160; &lt;/p&gt;  &lt;p&gt;What do you think?&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=LUaNdsWg8XU:XwCNiCG_b3I:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=LUaNdsWg8XU:XwCNiCG_b3I:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=LUaNdsWg8XU:XwCNiCG_b3I:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/LUaNdsWg8XU" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/could-the-app-be-the-solution-to-the-failed-software-project-problem/</feedburner:origLink></item><item><title>New Windows tablet PC unboxed</title><link>http://feedproxy.google.com/~r/jeffreypalermo/~3/qwgu2rNZNh8/</link><pubDate>Mon, 31 Oct 2011 20:59:57 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/new-windows-tablet-pc-unboxed/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>4</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;Here at &lt;a href="http://www.headspring.com"&gt;Headspring&lt;/a&gt;, I purchased some of the &lt;a href="http://www.microsoftstore.com/store/msstore/en_US/pd/productID.238020100"&gt;Samsung Series 7 Slate PC’s&lt;/a&gt; from the online Microsoft store.&amp;#160; The computer comes with Windows 7, which is touch-enabled, and uses a stylus as well as your finger.&amp;#160; It’s only single touch, though.&amp;#160; We bought them to promptly install the &lt;a href="http://msdn.microsoft.com/en-us/windows/home/"&gt;Windows 8 developer preview&lt;/a&gt;.&amp;#160; I believe Windows 8 will be a huge catalyst for upgrading inside businesses everyone.&amp;#160; Many business users have looked at their personal iPads hoping for the day where they could carry around a tablet computer and still run all their old software.&amp;#160; With Windows 8, they will be able to.&lt;/p&gt; &lt;iframe height="315" src="http://www.youtube.com/embed/xaqplGWo1Kg" frameborder="0" width="560" allowfullscreen="allowfullscreen"&gt;&lt;/iframe&gt;  &lt;p&gt;The mobile space has brought a lot of discussion to our industry for what “normal” is.&amp;#160; The mouse and pointer fundamentally changed the way people used computers.&amp;#160; Now, the pointer is the touch, and you can have many of them (multi-touch).&amp;#160; The fundamentals of computing are changing again.&lt;/p&gt;  &lt;p&gt;About 13 years ago, you saw some people carrying around a watch, a cell phone, a PDA, and a heavy laptop computer.&amp;#160; We have seen the watch, cell phone and PDA converge into a single device, the smart phone.&amp;#160; Fewer and fewer people wear wristwatches these days.&amp;#160; 13 years ago, people who used heavy laptops also had fully-featured desktop computers.&amp;#160; Now, they have a laptop for all of their computing needs.&amp;#160; The iPad has proven that thin-computing devices can help perform many tasks that we have grown accustomed to using laptops for.&amp;#160; Some people proclaim “thin clients are here to stay”.&amp;#160; I don’t think that’s true.&amp;#160; I think that we are in a temporary transition state where thin tablets are pulling laptops to a smaller form factor.&amp;#160; With Windows 8, the thin tablet can now do just about everything that was possible with the laptop computer.&amp;#160; Gamers and CAD engineers will continue to use specialized computers, but the vast number of business users will find all their needs met with a single tablet computer running Windows 8.&amp;#160; It’s not a far stretch to imagine a laptop dock for the tablet for easy keyboard use in meetings.&amp;#160; Back in the office, a normal dock connects the tablet computer with a full-sized keyboard and mouse for entrenched business applications like SAP or Oracle financials.&lt;/p&gt;  &lt;p&gt;Needless to say, we at Headspring are very excited about the transition to multi-touch computing.&amp;#160; We think many businesses will be upgrading their software to work on Windows 8.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=qwgu2rNZNh8:9w_SI-9aSkk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=qwgu2rNZNh8:9w_SI-9aSkk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=qwgu2rNZNh8:9w_SI-9aSkk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/qwgu2rNZNh8" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/new-windows-tablet-pc-unboxed/</feedburner:origLink></item><item><title>Challenging non-local session scope (session-per-request)</title><link>http://feedproxy.google.com/~r/jeffreypalermo/~3/KdKfBMBHwqY/</link><pubDate>Mon, 17 Oct 2011 13:12:27 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/challenging-non-local-session-scope-session-per-request/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>10</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;I posted the following on the &lt;a href="https://groups.google.com/forum/#!topic/nhusers/isFSCcR9PVo"&gt;nhusers mailing list&lt;/a&gt;, and &lt;a href="http://unhandled-exceptions.com/blog/"&gt;Steve Bohlen&lt;/a&gt; was nice enough to weigh in.&amp;#160; I was hoping to get broader feedback on this, so I’m posting it here.&amp;#160; &lt;/p&gt;  &lt;p&gt;======================================================&lt;/p&gt;  &lt;p&gt;I want to challenge a presumed best practice with NHibernate.&amp;#160; I'm challenging it honestly given my experience using it and helping many clients use it as well.&lt;/p&gt;  &lt;p&gt;On the official NHibernate community website, &lt;a href="http://nhforge.org/"&gt;nhforge.org&lt;/a&gt;, there is an &lt;a href="http://nhforge.org/blogs/nhibernate/archive/2011/03/03/effective-nhibernate-session-management-for-web-apps.aspx"&gt;article on session-per-request&lt;/a&gt;.&amp;#160; I have used this technique for most of the years I've used NHibernate.&amp;#160; I have been able to use it effectively.&amp;#160; But, I couldn't get over the fact that all of our clients have problems with this and end up in situations where lazy-load queries happen at all layers of the application.&lt;/p&gt;  &lt;p&gt;My problem, then, is that this pattern, while technically sound and useful, introduces complexity that requires a deeper understanding of NHibernate to manage.&amp;#160; Because of this, we have begun disposing of the session after each and every transaction.&amp;#160; See here:&lt;/p&gt;  &lt;pre class="csharpcode"&gt;&lt;span class="kwrd"&gt;public&lt;/span&gt; Employee GetByUserName(&lt;span class="kwrd"&gt;string&lt;/span&gt; userName)
{
    &lt;span class="kwrd"&gt;using&lt;/span&gt; (ISession session = DataContext.GetSession())
    {
        IQuery query =
            session.CreateQuery(
            &lt;span class="str"&gt;&amp;quot;from Employee emp left join fetch emp.Roles where emp.UserName = :username&amp;quot;&lt;/span&gt;);
        query.SetParameter(&lt;span class="str"&gt;&amp;quot;username&amp;quot;&lt;/span&gt;, userName);
        var match = query.UniqueResult&amp;lt;Employee&amp;gt;();
        &lt;span class="kwrd"&gt;return&lt;/span&gt; match;
    }
}&lt;/pre&gt;
&lt;style type="text/css"&gt;


.csharpcode, .csharpcode pre
{
	font-size: small;
	color: black;
	font-family: consolas, "Courier New", courier, monospace;
	background-color: #ffffff;
	/*white-space: pre;*/
}
.csharpcode pre { margin: 0em; }
.csharpcode .rem { color: #008000; }
.csharpcode .kwrd { color: #0000ff; }
.csharpcode .str { color: #006080; }
.csharpcode .op { color: #0000c0; }
.csharpcode .preproc { color: #cc6633; }
.csharpcode .asp { background-color: #ffff00; }
.csharpcode .html { color: #800000; }
.csharpcode .attr { color: #ff0000; }
.csharpcode .alt 
{
	background-color: #f4f4f4;
	width: 100%;
	margin: 0em;
}
.csharpcode .lnum { color: #606060; }&lt;/style&gt;

&lt;p&gt;Here, I get the employee, dispose of the session, and pass the object back.&amp;#160; For each variation of loading, we have a different method that eager fetches the right level of association or collection.&amp;#160; This way, the application has the data it needs, and there aren't any lazy-load exceptions.&lt;/p&gt;

&lt;p&gt;This approach simplified the code in a few ways:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Each query to the database is known, and there is a method for each &lt;/li&gt;

  &lt;li&gt;All queries are executed while the call stack is in the data layer (no UI-level lazy loading) &lt;/li&gt;

  &lt;li&gt;&lt;b&gt;It forces the developer to think about each data scenario&lt;/b&gt; &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In coaching and training other developers (we actually teach NHibernate in our &lt;a href="http://www.headspring.com/services/developer-training"&gt;Agile Boot Camp&lt;/a&gt; training class), we have come up with a simple message for how to think about NHibernate and other ORMs.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;When moving from stored procedures to an ORM, don't forget what was good about sprocs (you had a list of every query that would be run against your database) &lt;/li&gt;

  &lt;li&gt;Use an ORM for just Object to Relational Mapping.&amp;#160; That is the core strength.&amp;#160; The other features, like lazy-loading, can be useful, but they also add complexity &lt;/li&gt;

  &lt;li&gt;Keep all your relationships and collections mapped as lazy, but don't allow them to lazily-load &lt;/li&gt;

  &lt;li&gt;Dispose of a session immediately after using it. &lt;/li&gt;

  &lt;li&gt;Keep the NHibernate reference out of the your core library and behind data access interfaces. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;I'll pause here because there is nothing wrong with session-per-request technically.&amp;#160; I successfully used it on many projects.&amp;#160; The problem is that it is complicated.&amp;#160; I understand it just fine, but I'm also an NHibernate expert.&amp;#160; Lots of other developers just want to use it and be done with it.&amp;#160; They don't want surprises.&amp;#160; &lt;b&gt;Elevating the session past local scope up to a global variable&lt;/b&gt; brings unintended consequences.&amp;#160; When developing, I might dereference another collection on an object, and NHibernate happily runs another select statement against my database.&amp;#160; As that developer, I don't have profiler perpetually open to see this happen.&amp;#160; There is absolutely no signal that I just put something undesirable in my application.&amp;#160; Developers need fast feedback on what they are doing.&amp;#160; If there was no session hanging around, the lazy-load invocation would throw and excepting right then.&amp;#160; The developer would then go back and modify the query or decide that we need a new one.&amp;#160; We have used session-per-transaction on two projects now, and it hasn't led to any other difficulties, so I view it very favorably.&lt;/p&gt;

&lt;p&gt;A &amp;quot;best practice&amp;quot; should generally lead a developer to a desirable result.&amp;#160; I think that here, the best practice needs to lead to simplicity, even while the &amp;quot;advanced&amp;quot; practice may still be session-per-request.&lt;/p&gt;

&lt;p&gt;I have not drawn a final conclusion, but given the bad effects I've seen from this, wouldn't it be a simpler (better) practice to just dispose of the session immediately and create a few more explicit repository methods for different loading levels?&amp;#160; &lt;/p&gt;

&lt;p&gt;I appreciate any discussion that arises from this.&amp;#160; The best place would be on the &lt;a href="https://groups.google.com/forum/#!topic/nhusers/isFSCcR9PVo"&gt;NHibernate Users mailing list&lt;/a&gt;.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=KdKfBMBHwqY:juYJBEypLBo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=KdKfBMBHwqY:juYJBEypLBo:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=KdKfBMBHwqY:juYJBEypLBo:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/KdKfBMBHwqY" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/challenging-non-local-session-scope-session-per-request/</feedburner:origLink></item><item><title>Steiner Ranch fire update 9/5/2011</title><link>http://feedproxy.google.com/~r/jeffreypalermo/~3/rvrKfhyqrvI/</link><pubDate>Mon, 05 Sep 2011 17:15:55 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/steiner-ranch-fire-update-9-5-2011/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>4</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;&amp;nbsp;For anyone who is concerned about our well-being: &amp;nbsp;First, thank you for your concern. &amp;nbsp;Our neighborhood, Steiner Ranch, is completely evacuated, and 30 houses has been lost so far to the large fire in the neighborhood. &amp;nbsp;Latest official information is here:&amp;nbsp;&lt;a href="http://www.austinhsem.com/"&gt;http://www.austinhsem.com&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Liana, Gwyneth Rose, Xander, and I were in College Station this weekend for a class reunion and football game. &amp;nbsp;In the third quarter, we learned that our neighborhood was on fire. &amp;nbsp;The immediate threat is at the front of the neighborhood, and we are about half-way back. &amp;nbsp;For now, we think our house is OK, but we can't go home.&lt;/p&gt;
&lt;p&gt;&lt;img alt="" src="http://images.texas.ynn.com/media/2011/9/4/images/photo.JPG" /&gt;&lt;/p&gt;
&lt;p&gt;This is a picture of what the neighborhood looks like from RM 620. &amp;nbsp;It takes up many acres of hills, very country.&lt;/p&gt;
&lt;p&gt;We are traveling back to Austin today, but we don't know where we will be sleeping tonight because Steiner Ranch is still restricted, and all electricity is cut off to the neighborhood to avoid further sparks or explosions. &amp;nbsp;Since we were on a weekend trip, we do have small suitcases with a few changes of cloths, so we will be looking to get those washed so they can be worn again.&lt;/p&gt;
&lt;p&gt;Luckily, we brought the pack-n-play so that Xander (1 yr old) can have a nap somewhere.&lt;/p&gt;
&lt;p&gt;If you know any of our friends, you can point them to this post &amp;nbsp;(we have lots of TXT messages still unanswered). &amp;nbsp;I'll also be updating on twitter as anything happens.&amp;nbsp;&lt;a href="http://twitter.com/#!/jeffreypalermo"&gt;http://twitter.com/#!/jeffreypalermo&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thanks for your prayers, and yes, if the fire is still going this afternoon, we'll need a place to stay tonight.&lt;/p&gt;
&lt;p&gt;Regards,&lt;/p&gt;
&lt;p&gt;Jeffrey Palermo&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=rvrKfhyqrvI:qEKJEXXq4hA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=rvrKfhyqrvI:qEKJEXXq4hA:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=rvrKfhyqrvI:qEKJEXXq4hA:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/rvrKfhyqrvI" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/steiner-ranch-fire-update-9-5-2011/</feedburner:origLink></item><item><title>How to access controller methods from a view in ASP.NET MVC</title><link>http://feedproxy.google.com/~r/jeffreypalermo/~3/-hlTXxLUxOg/</link><pubDate>Sat, 30 Jul 2011 03:17:44 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/how-to-access-controller-methods-from-a-view-in-asp-net-mvc/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>8</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;This question has been posed in several places.&amp;#160; One of the places is on &lt;a href="http://stackoverflow.com/questions/1417168/asp-net-mvc-access-controller-instance-from-view"&gt;StackOverflow here&lt;/a&gt;.&amp;#160; The use case here is that my controller has important state or an important function, and I’d like to leverage it from the view.&amp;#160; It’s not appropriate to factor out to an html helper or other view-based utility class.&amp;#160; It is something unique to the controller.&amp;#160; It would be very easy to just pass the controller over to the view so that the view could make use of its methods, but there is a lot of discussion why that is “dirty.”&amp;#160; &lt;/p&gt;  &lt;p&gt;For the lay-programmer, that solution would function just fine.&amp;#160; For the professional, the MVC pattern was chosen to keep the view away from the business of knowing the storyboard flow of an application.&amp;#160; That is the responsibility of the controller; therefore, the pattern states that the controller knows the view, but the view does not know the controller.&lt;/p&gt;  &lt;p&gt;In ASP.NET MVC, the controller passes an object called a ViewBag to the view.&amp;#160; As an aside, it is really interesting that when ASP.NET MVC 1 was being developed, many .Net developers were using MonoRail, which was another MVC implementation for ASP.NET.&amp;#160; It’s passed object from the controller to the view was called PropertyBag, and many lobbied for the use of the word “bag”, but ViewData was the first term used.&amp;#160; The new ViewBag object comes to us in ASP.NET MVC 3 as a dynamic object.&lt;/p&gt;  &lt;h1&gt;Desired use case&lt;/h1&gt;  &lt;p&gt;Let’s consider a page that lists out a series of odd numbers.&amp;#160; We want to alert the user when there is an odd number that is not prime.&amp;#160; Here is the screen.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/Howtoaccesscontrollermethodsfroma.NETMVC_13812/image_4.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/Howtoaccesscontrollermethodsfroma.NETMVC_13812/image_thumb_1.png" width="536" height="578" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The view for this screen looks like this.&lt;/p&gt;  &lt;p&gt;   &lt;p&gt;&lt;a href="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/Howtoaccesscontrollermethodsfroma.NETMVC_13812/image_8.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/Howtoaccesscontrollermethodsfroma.NETMVC_13812/image_thumb_3.png" width="473" height="334" /&gt;&lt;/a&gt; &lt;/p&gt;    &lt;p&gt;Notice that inside my loop, I am actually passing the enumerated value of the view model to a method on the ViewBag.&amp;#160; Remember that ViewBag doesn’t come with any methods like this.&amp;#160; It is an empty dynamic object until we define something on it.&amp;#160; &lt;/p&gt;    &lt;h1&gt;&lt;/h1&gt;    &lt;h1&gt;Solution&lt;/h1&gt;    &lt;p&gt;It appears that we have defined a new method on ViewBag called GetWarning().&amp;#160; This new method is the gateway that we longed for to take us back to the controller.&amp;#160; Let’s look at the code for the controller, and we will see that the controller provides the logic for deciding what warning message to display next to the number, if any.&lt;/p&gt;    &lt;p&gt;&lt;a href="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/Howtoaccesscontrollermethodsfroma.NETMVC_13812/image_10.png"&gt;&lt;img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://jeffreypalermo.com/files/media/image/WindowsLiveWriter/Howtoaccesscontrollermethodsfroma.NETMVC_13812/image_thumb_4.png" width="646" height="813" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;There are several things to look at.&amp;#160; First, we define a property, not a method on the ViewBag.&amp;#160; It is a Func, so it can be invoked because it is a method being passed as an object thanks to delegates/closures.&amp;#160; The definition of the method that is passed takes in a number and makes use of a method that belongs to the controller.&amp;#160; Because closures/delegates have access to the scope in which they are defined, our GetContextAwareWarning method can access the IsPrime method even when the method is invoked way over in the view.&lt;/p&gt;    &lt;p&gt;Now, we can give the view everything it needs to function without ever being tempted to pass a reference to the controller itself.&amp;#160; If you want to see a slightly different take on this, check out my similar post on my &lt;a href="http://www.headspring.com/2011/07/how-to-add-a-method-to-viewbag-in-asp-net-mvc"&gt;Headspring blog&lt;/a&gt;.&lt;/p&gt;&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=-hlTXxLUxOg:KGwORfFzCks:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=-hlTXxLUxOg:KGwORfFzCks:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=-hlTXxLUxOg:KGwORfFzCks:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/-hlTXxLUxOg" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/how-to-access-controller-methods-from-a-view-in-asp-net-mvc/</feedburner:origLink></item><item><title>I am speaking at the Austin Cloud User Group on May 24, 2011 (Tuesday)</title><link>http://feedproxy.google.com/~r/jeffreypalermo/~3/HIXD5TRqW9c/</link><pubDate>Wed, 18 May 2011 16:29:15 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/i-am-speaking-at-the-austin-cloud-user-group-on-may-24-2011-tuesday/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>0</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;&lt;font size="3"&gt;Topic: &lt;strong&gt;How &lt;a href="http://www.headspring.com/"&gt;Headspring&lt;/a&gt; Does Business in the Cloud: A Technical Perspective&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;  &lt;p&gt;If you’d like to come, RSVP here: &lt;a href="http://www.eventbrite.com/event/1707145117"&gt;http://www.eventbrite.com/event/1707145117&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;The meet is held at the offices of Pervasive Software.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;AGENDA (from website):&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;6:30-8:00&lt;/strong&gt; Jeffrey Palermo (COO, &lt;a href="http://twitter.com/jeffreypalermo"&gt;@jeffreypalermo&lt;/a&gt;), Kevin Hurwitz (Chief Architect), Pedro Reys (Consultant, &lt;a href="http://twitter.com/pedroreys"&gt;@pedroreys&lt;/a&gt;) from &lt;a href="http://www.headspring.com/"&gt;Headspring&lt;/a&gt; (@headspring)will present on &lt;strong&gt;How Headspring Does Business in the Cloud: A Technical Perspective&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Abstract&lt;/strong&gt;:&amp;#160; The cloud is very sexy.&amp;#160; Business is boring.&amp;#160; Headspring is a custom software development firm that develops, deploys, and runs in the cloud.&amp;#160; Even client solutions deployed to on-premise servers are developed and managed in the cloud before finding their on-premise home.&amp;#160; This presentation will cover how: &lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Every company department operates in the cloud &lt;/li&gt;    &lt;li&gt;The developers build and test software in the cloud &lt;/li&gt;    &lt;li&gt;We manage the consulting practice in the cloud.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;We use at least eight different cloud providers, and we will share the uses and strengths of each.&amp;#160; Because each of our projects is a custom solution for clients of various industries, we almost always never do the same thing twice.&amp;#160; This is designed to be an interactive presentation, so ask questions at any time.&amp;#160; We are happy to share our experience with cloud offerings, what has worked, and what turned out to be a resounding “fail”.&amp;#160; Hopefully our findings will help you and your company not fail.&lt;/p&gt;  &lt;hr /&gt;  &lt;p&gt;Bios: A trio from Headspring joins to share how the company runs everything in the cloud.&amp;#160; Jeffrey Palermo, Chief Operating Officer, will share the boring business services that streamline the management of the software consulting company.&amp;#160; Chief Architect, Kevin Hurwitz will share the technical side, and Consultant, Pedro Reys, will share how this structure enables custom software systems to be easily developed, tested, and deployed.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=HIXD5TRqW9c:Jb3xk447imk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=HIXD5TRqW9c:Jb3xk447imk:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=HIXD5TRqW9c:Jb3xk447imk:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/HIXD5TRqW9c" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/i-am-speaking-at-the-austin-cloud-user-group-on-may-24-2011-tuesday/</feedburner:origLink></item><item><title>Growing a professional services company–my experience, critical drivers, metrics, and business intelligence</title><link>http://feedproxy.google.com/~r/jeffreypalermo/~3/9_RD-y0SSVg/</link><pubDate>Thu, 05 May 2011 15:54:30 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/growing-a-professional-services-company-ndash-my-experience-critical-drivers-metrics-and-business-intelligence/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>2</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;In September of 2007, I joined &lt;a href="http://www.headspring.com/"&gt;Headspring Systems&lt;/a&gt; as the CTO.&amp;#160; Now I serve as the Chief Operating Officer (COO).&amp;#160; When I joined, there were 4 other employees including the original found serving as CEO.&amp;#160; He founded the company in 2001.&amp;#160; It has always been professional services, but the strategy has changed a few times over the years.&amp;#160; I have been meaning to share some of what I have learned since Sept 2007, and this post is about one thing I am really excited about: operational metrics.&amp;#160; I also will share what I’ve learned about financial metrics at some point.&amp;#160; I work with our accountant to ensure our monthly financial statements paint a clear picture of what is going on with the company.&lt;/p&gt;  &lt;p&gt;Every day, I glance at our &lt;strong&gt;operational dashboard&lt;/strong&gt;.&amp;#160; While I won’t share full screen-shots yet, I want to share some of the graphs I use every day to ensure the company is doing well.&amp;#160; Consider this graph.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://jeffreypalermo.com/files/media/image/Windows-Live-Writer/d066af3fb6f3_8D6C/CropperCapture%5B27%5D_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="CropperCapture[27]" border="0" alt="CropperCapture[27]" src="http://jeffreypalermo.com/files/media/image/Windows-Live-Writer/d066af3fb6f3_8D6C/CropperCapture%5B27%5D_thumb.png" width="567" height="302" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;“BD” stands for “big dial”.&lt;/strong&gt;&amp;#160; We have 3 big dials we glance at every day.&amp;#160; If we don’t like what we see, we have some “smaller dials” we can look at.&amp;#160; We use the analogy of a plane cockpit. There are a few things pilots always glance at, and then there are smaller, more detailed ones that are consulted as the need arises.&lt;/p&gt;  &lt;p&gt;This graph shows us our utilization breakdown in the categories that are relevant.&amp;#160; Here are the categories:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;strong&gt;Personal Time&lt;/strong&gt;: holidays, vacations, dentist appts, etc.&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Assigned Time&lt;/strong&gt;: Department meetings, 1x1’s, stand-up meetings, etc&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Bench Time&lt;/strong&gt;: Time without available project work (doesn’t show because it’s zero)&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Other Time&lt;/strong&gt;: Unplanned unproductive time, such as having a flat tire on the way to work&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Sales Time&lt;/strong&gt;: Mostly used by the sales department: work to acquire a client&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Billed Time&lt;/strong&gt;: self-explanatory&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;Unbilled Time&lt;/strong&gt;: Working for a client, but not charging&lt;/li&gt;    &lt;li&gt;&lt;strong&gt;CI Time&lt;/strong&gt;: Continuous Improvement time:&amp;#160; We expect 10% of the time, our people are working to improve: comes out to 5.2 business weeks of the 52-week year.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You will notice the big dip during the week of 4/7.&amp;#160; We had our Q1 &lt;strong&gt;quarterly off-site&lt;/strong&gt; during that week.&amp;#160; We spent 12% of that week to use as a fun off-site where the entire company toured Inner Space Cavern hundreds of feet under Georgetown.&amp;#160; It shows up on the dashboard because it affects the performance of the company.&amp;#160; As an executive team, we decided it was a good investment in the future productivity of our staff.&lt;/p&gt;  &lt;p&gt;You might have also noticed that 4/7 was a Thursday in 2011.&amp;#160; How can it be the week of 4/7?&amp;#160; We use the concept of &lt;strong&gt;“moving weeks”&lt;/strong&gt; instead of calendar weeks.&amp;#160; We used to use calendar weeks, but the last data point of the graph was always skewed because it didn’t represent a full data point until people logged their time for Friday.&amp;#160; By taking data from a moving week, when I look at the data on Thursday, it pulls data from the previous Thursday through this Wednesday (yesterday).&amp;#160; That way, every point on the graph represents exactly the same size of a data point.&amp;#160; We do the same for months, quarters and years.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;There is a big problem with pull metrics by calendar month&lt;/strong&gt;:&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;January has &lt;strong&gt;21&lt;/strong&gt; business days&lt;/li&gt;    &lt;li&gt;February has &lt;strong&gt;20&lt;/strong&gt; business days&lt;/li&gt;    &lt;li&gt;March has &lt;strong&gt;23&lt;/strong&gt; business days&lt;/li&gt;    &lt;li&gt;April has &lt;strong&gt;21&lt;/strong&gt; business days&lt;/li&gt;    &lt;li&gt;May has &lt;strong&gt;22&lt;/strong&gt; business days&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;You can see how using calendar months can &lt;strong&gt;wreak havoc&lt;/strong&gt; on the comparability of month metrics.&amp;#160; We expect larger months to pose better numbers than the smaller months.&amp;#160; On the financial side, we have to accrue the payroll appropriately as well in order to keep net income from becoming skewed.&lt;/p&gt;  &lt;p&gt;To deal with this, we use the concept of a &lt;strong&gt;moving month&lt;/strong&gt;.&amp;#160; There are 13 moving months in a year.&amp;#160; Each moving month is a 28-day time period from yesterday to 28 days before yesterday.&amp;#160; In this way, every data point will be exactly the same size as the other.&amp;#160; There are also 4, 13-week moving quarters in a year.&amp;#160; The following graph is our 2nd big dial shown by moving month.&lt;/p&gt;  &lt;p&gt;&lt;a href="http://jeffreypalermo.com/files/media/image/Windows-Live-Writer/d066af3fb6f3_8D6C/CropperCapture%5B28%5D_4.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="CropperCapture[28]" border="0" alt="CropperCapture[28]" src="http://jeffreypalermo.com/files/media/image/Windows-Live-Writer/d066af3fb6f3_8D6C/CropperCapture%5B28%5D_thumb_1.png" width="590" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Before moving to moving months, the calendar month line was consistently &lt;strong&gt;misrepresented&lt;/strong&gt; by the larger months.&amp;#160; Where the line moves, we need to know why.&amp;#160; We made the switch so that every curve of the line was meaningful.&amp;#160; We didn’t want our data communicating falsehoods or April-fools jokes.&amp;#160; You think I’m kidding, but April always looks bad coming straight out of March, which boasts 2 more full business days.&amp;#160; In professional services, a business day accounts for a &lt;strong&gt;significant amount of revenue&lt;/strong&gt;.&lt;/p&gt;  &lt;p&gt;Using Big Dial 1 and Big Dial 2, we can keep the ship on the right course.&amp;#160; As long as our staff is billing a consistently high percentage: we shoot for 78-79%, and our hourly margins are high enough to account for our unbillable staff (sales, marketing, corporate) and our fixed costs (facilities, supplies, etc.), our company will remain healthy.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;These dials are tactical, not strategic&lt;/strong&gt;.&amp;#160; The next dial is strategic.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;&lt;a href="http://jeffreypalermo.com/files/media/image/Windows-Live-Writer/d066af3fb6f3_8D6C/CropperCapture%5B31%5D_2.png"&gt;&lt;img style="background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px" title="CropperCapture[31]" border="0" alt="CropperCapture[31]" src="http://jeffreypalermo.com/files/media/image/Windows-Live-Writer/d066af3fb6f3_8D6C/CropperCapture%5B31%5D_thumb.png" width="590" height="314" /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;This gives us a view into the &lt;strong&gt;structure&lt;/strong&gt; of our company.&amp;#160; &lt;strong&gt;We have hired at least 9 new employees since Jan 1, 2011&lt;/strong&gt;.&amp;#160; With that, it’s important to keep tabs on how we are changing the structure of our company.&amp;#160; When we hired &lt;a href="http://lostechies.com/stevedonie/"&gt;Steve Donie&lt;/a&gt; for the operations department, we expanded billable staff.&amp;#160; When we hired &lt;a href="http://www.linkedin.com/pub/katie-barbaro/12/403/b43"&gt;Katie Barbaro&lt;/a&gt; for marketing, we increased non-billable staff.&amp;#160; Keeping the right balance is important.&amp;#160; &lt;/p&gt;  &lt;p&gt;You can see that our % of Operations staff to the rest has dipped a little bit over the last 7 months.&amp;#160; We have done that while growing, and we are re-leveling the organization now.&amp;#160; To level out the organization, we need to &lt;strong&gt;add about three more people&lt;/strong&gt; to the Operations department.&amp;#160; This graph, while very high level, gives critical insight into how the other two graphs affect our income statement.&amp;#160; &lt;/p&gt;  &lt;p&gt;Using these three charts together, I have a very good sense of what I need to do to improve the financial performance of the company.&amp;#160; Right now:&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;I need to hire 3 more great .Net developers&lt;/li&gt;    &lt;li&gt;I need to keep Client Time at the level of Operations % plus Contractor % (since both types bill)&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;If you have read all the way through the end of this post, &lt;strong&gt;you might be interested&lt;/strong&gt; in one of the following two things.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;You might want to see our &lt;a href="http://www.headspring.com/careers/#Con"&gt;careers page&lt;/a&gt; and send a resume to &lt;a href="mailto:resumes@headspring.com"&gt;resumes@headspring.com&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;You may want our help in creating a business intelligence (BI) solution for your business to help you gain insight into the critical drivers specific to your industry and products/services.&amp;#160; Call 512-459-2260.&lt;/li&gt; &lt;/ol&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=9_RD-y0SSVg:jgAP3JyJv5Y:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=9_RD-y0SSVg:jgAP3JyJv5Y:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=9_RD-y0SSVg:jgAP3JyJv5Y:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/9_RD-y0SSVg" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/growing-a-professional-services-company-ndash-my-experience-critical-drivers-metrics-and-business-intelligence/</feedburner:origLink></item><item><title>Party without Palermo at Tech Ed 2011</title><link>http://feedproxy.google.com/~r/jeffreypalermo/~3/GxtN1tIDTCE/</link><pubDate>Wed, 04 May 2011 14:37:12 GMT</pubDate><guid isPermaLink="false">http://jeffreypalermo.com/blog/party-without-palermo-at-tech-ed-2011/</guid><dc:creator>Jeffrey Palermo</dc:creator><slash:comments>2</slash:comments><category domain="http://jeffreypalermo.com/blog/">Blog</category><description>&lt;p&gt;I am really sorry to say that there will not be a &lt;a href="http://partywithpalermo.com"&gt;Party with Palermo&lt;/a&gt; at Tech Ed this year.&amp;#160; I have had to make some priority decisions, and I have decided to prioritize my daughter’s tap dance recital over throwing the party.&amp;#160; I want to thank my sponsors and the enthusiastic attendees to always looking forward to and supporting the party.&amp;#160; &lt;/p&gt;  &lt;p&gt;Party with Palermo has always been a personal thing, not connected to any business.&amp;#160; The size of the bar tab has always been connected to the amount of sponsorships I’ve been able to get.&amp;#160; I look forward to planning the next one at the next major Microsoft conference I attend.&lt;/p&gt;  &lt;p&gt;Party with Palermo started in 2005 the night before Tech Ed in Orlando, FL.&amp;#160; It was held at the hotel restaurant inside the Peabody hotel.&amp;#160; With no budget and no sponsors, 35 people came to have dinner together.&amp;#160; The original purpose was to provide a venue where folks could gather the night before the conference when everyone is getting in to town with no place to go.&amp;#160; Over time, I have been able to bring on sponsors to provide funds to rent a venue, provide food as well as tasty beverages.&lt;/p&gt;  &lt;p&gt;In the spirit of this purpose, feel free to use the comments on this blog post to direct people to other social venues available the night before Tech Ed starts on Sunday, May 15, 2011.&amp;#160; The traditional time has been 7PM.&lt;/p&gt;  &lt;p&gt;A special shoutout to anyone who wants to plan a “&lt;strong&gt;Party without Palermo&lt;/strong&gt;”.&lt;/p&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=GxtN1tIDTCE:ZQtrwVZjyaE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/jeffreypalermo?a=GxtN1tIDTCE:ZQtrwVZjyaE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/jeffreypalermo?i=GxtN1tIDTCE:ZQtrwVZjyaE:F7zBnMyn0Lo" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/jeffreypalermo/~4/GxtN1tIDTCE" height="1" width="1"/&gt;</description><feedburner:origLink>http://jeffreypalermo.com/blog/party-without-palermo-at-tech-ed-2011/</feedburner:origLink></item></channel></rss>

