<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://footheory.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>this.Reflect(); - Donn&amp;#39;s Weblog : Design</title><link>http://footheory.com/blogs/donnfelker/archive/tags/Design/default.aspx</link><description>Tags: Design</description><dc:language>en</dc:language><generator>CommunityServer 2007 SP2 (Debug Build: 20611.960)</generator><item><title>Is Premature Optimization Really Evil?</title><link>http://footheory.com/blogs/donnfelker/archive/2008/07/23/is-premature-optimization-really-evil.aspx</link><pubDate>Thu, 24 Jul 2008 04:41:31 GMT</pubDate><guid isPermaLink="false">9ce7e6ef-4587-4f0e-939d-3f75f3a8ddfc:400</guid><dc:creator>donnfelker</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://footheory.com/blogs/donnfelker/rsscomments.aspx?PostID=400</wfw:commentRss><comments>http://footheory.com/blogs/donnfelker/archive/2008/07/23/is-premature-optimization-really-evil.aspx#comments</comments><description>&lt;p&gt;   &lt;table align="left"&gt;       &lt;tr&gt;         &lt;td&gt;&lt;img title="dominos" style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;margin:10px 10px 10px 0px;border-right-width:0px;" height="361" alt="dominos" src="http://footheory.com/blogs/donnfelker/WindowsLiveWriter/IsPrematureOptimizationReallyEvil_12D7C/dominos_3.jpg" width="504" align="left" border="0" /&gt;&lt;/td&gt;       &lt;/tr&gt;        &lt;tr&gt;         &lt;td&gt;Photo Courtesy of: &lt;a href="http://www.flickr.com/photos/rosendahl/" target="_blank"&gt;rosendahl&lt;/a&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/table&gt; My first initial answer is … it depends. (Isn’t that the case for everything?) :)&lt;/p&gt;  &lt;p&gt;Today I had conversation with a colleague and we were discussing how application developers don’t plan ahead. &lt;/p&gt;  &lt;p&gt;This eventually brought up the question/topic:&lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;&lt;font style="background-color:#ffffff;" color="#00296c"&gt;“Is premature optimization pure evil?”&lt;/font&gt;&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;My colleague stated that all optimization should be done up front, while I on the other hand, disagree. In my opinion all development should be done first and then lets figure out where we might have some problems, with some exceptions (which we both agreed upon). &lt;/p&gt;  &lt;h3&gt;So, what did we agree upon? &lt;/h3&gt;  &lt;p&gt;Lets look at a classic example: &lt;/p&gt;  &lt;p&gt;Developer Joe and his team were asked to create an order management system that could handle up to 10,000 orders a day. This doesn’t sound like that big of an issue, and Joe and his team also agreed. It shouldn’t be a big issue. A fast database, a fast web server, and a few third party controls to interact with. No problem! Heck, this is pretty straightforward they thought. In reality, the requirements were very straight forward, no hidden features, no scope creep, nothing like that. Heck, it was a dream project come true. With that said - development ensued, and two months later Joe’s team delivered the product and everyone was excited to see the product run from end to end. (By the way, this was not done &lt;a href="http://en.wikipedia.org/wiki/Test-driven_development" target="_blank"&gt;TDD&lt;/a&gt; or with any &lt;a href="http://en.wikipedia.org/wiki/Agile_software_development" target="_blank"&gt;Agile&lt;/a&gt; Methods – which &lt;a href="http://www.urbandictionary.com/define.php?term=imo" target="_blank"&gt;IMO&lt;/a&gt; would have caught any of our upcoming issues, if the tests were written correctly. But then again “&lt;a href="http://www.urbandictionary.com/define.php?term=if%20if%20was%20a%20fifth" target="_blank"&gt;If ‘if’ was a fifth then we’d all be drunk&lt;/a&gt;”). &lt;/p&gt;  &lt;p&gt;Joe’s team fired up the application for a demo and ran some orders through it and it worked great. They even ran 10 orders through the system in one minute (~14,400 Orders a day). They had gone above and beyond the call of duty (original requirement being 10,000 orders a day)! They were due for a raise! Life couldn&amp;#39;t be better! The system was released and the company started to use it. Orders were flowing through the system without failure and the business was happy. &lt;/p&gt;  &lt;h3&gt;Until the company decided to sell an exclusive hot item two weeks later … &lt;/h3&gt;  &lt;p&gt;Then &lt;a href="http://www.urbandictionary.com/define.php?term=SHTF" target="_blank"&gt;SHTF&lt;/a&gt;… All of a sudden, customers were experiencing time outs,&amp;#160; orders were being duplicated, and the customer service line was being rung off the hook. Essentially, all hell broke loose. After looking into the system, the developers noticed that the system had only accepted 6,000 orders. What gives? This system should handle 14,400 according to their tests. *everyone is scratching their head at this point* &lt;/p&gt;  &lt;h3&gt;Scalability is Relative&lt;/h3&gt;  &lt;p&gt;Scalability in this case, is relative. While looking at the stats, Joe’s team realized that those 6000 orders came in in about 1.5 hours. This was the first 1.5 hours that this product was available. At the end of the day the company eventually sold under 10,000 units, so why did this issue happen? &lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;Lets take a look at some stats: &lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td&gt;&amp;#160;&lt;/td&gt;        &lt;td&gt;Orders Per Minute&lt;/td&gt;        &lt;td&gt;Time Between Orders (seconds)&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Original Spec (10,000 Per day)&lt;/td&gt;        &lt;td&gt;~7&lt;/td&gt;        &lt;td&gt;8.64&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;Current State (6000 in 90 Minutes)&lt;/td&gt;        &lt;td&gt;~67&lt;/td&gt;        &lt;td&gt;0.9&lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;  &lt;p&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Orders Per Minute Equation: Orders / Minutes&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Minutes: (HoursInDay * MinutesInHour)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&lt;em&gt;Orders Per Second Equation: Seconds / Orders&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Seconds: (HoursInDay * MinutesInHour * SecondsInMinute)&lt;/em&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Do we see the problem here? &lt;/p&gt;  &lt;p&gt;Again, scalability is relative. In this case, analysis and optimization was not done ahead of the time to anticipate the flood of orders at a peak period. The spec was straight forward:&amp;#160; &lt;strong&gt;The system is to be designed to handle an order rate of 10,000 orders a day. &lt;/strong&gt;The system was designed exactly to the spec, and in this case, &lt;u&gt;the system was designed incorrectly&lt;/u&gt;.&lt;/p&gt;  &lt;p&gt;Now, I have a confession… 6 years ago, I was Joe. Yes, I made this very mistake. I was a hero for a couple of weeks, then SHTF. :) Live and learn. Live and learn. &lt;/p&gt;  &lt;h3&gt;When We Agreed&lt;/h3&gt;  &lt;p&gt;My colleague and I both agreed that in certain instances premature optimization should be done, such as this case. The developers should optimize the order process to handle issues at peak times. Perhaps implementing a order service, based on MQ, or implementing a service bus for this type of high-availability process would be the best. In this case, we agree. All of this analysis and optimization should be done up front because this type of thing WILL be a problem at any peak utilization times. We both agree that neglecting to analyze the problem domain can and will lead to performance problems down the road. Plain and simple. &lt;/p&gt;  &lt;h3&gt;When We Disagreed&lt;/h3&gt;  &lt;p&gt;My colleague and I still disagree on the statement of “all code should be optimized up front”. In my opinion this is a &lt;a href="http://en.wikipedia.org/wiki/Big_Design_Up_Front" target="_blank"&gt;BDUF&lt;/a&gt; approach that I tend to shy away from. I don’t necessary mean that no design should happen up front, but I do think it should be limited. In an agile environment things tend to change, and we need to be able to adapt quickly. Wasting months in front of a whiteboard, with of reams of documentation, and endless meetings only slows the process down if something has to change down the road. Re-updating project baselines, and adjusting documentation and so forth is a huge hassle. I would like to state that there is a place for this type of development though. Some companies do require BDUF approaches because of huge regulatory compliance issues, so sometimes there is not much you can do about it. However process driven approaches such as &lt;a href="http://www.google.com/search?q=ITIL+%2B+AGILE&amp;amp;ie=utf-8&amp;amp;oe=utf-8&amp;amp;aq=t&amp;amp;rls=org.mozilla:en-US:official&amp;amp;client=firefox-a" target="_blank"&gt;ITIL and Agile can work together if done properly&lt;/a&gt;. With that said, I tend to shy away from BDUF approaches because of a simple example that is also exemplified by &lt;a href="http://www.codinghorror.com/blog/archives/000061.html" target="_blank"&gt;Jeff Atwood in a previous post of his&lt;/a&gt; (and I agree with him and the many other experts in the field). Jeff adds a third rule to &lt;a href="http://cisx2.uma.maine.edu/NickTemp/JSP&amp;amp;JSDLec/jsd.html" target="_blank"&gt;M.A. Jacksons Optimization Rules&lt;/a&gt; that I like agree with the most: &lt;/p&gt;  &lt;blockquote&gt;   &lt;p&gt;And I would add a third: don&amp;#39;t optimize work that doesn&amp;#39;t have to be done.&amp;#160; - Jeff Atwood&lt;/p&gt; &lt;/blockquote&gt;  &lt;p&gt;This can be demonstrated as a sort routine. Lets say you have a menu that will be populated via user selections and the maximum number of values you can have in the menu is 100. You can either implement &lt;a href="http://msdn.microsoft.com/en-us/library/4d7sx9hd.aspx" target="_blank"&gt;IComparable&lt;/a&gt; and utilize the &lt;a href="http://msdn.microsoft.com/en-us/library/b0zbh7b6.aspx" target="_blank"&gt;List&amp;lt;T&amp;gt;.Sort() method&lt;/a&gt; to sort the class (which utilizes the &lt;a href="http://en.wikipedia.org/wiki/Quicksort" target="_blank"&gt;Quicksort Algorithm&lt;/a&gt;) which would be SUPER easy but may not be the “Fastest” method of sorting, or you could write an extension method to create your own sort routine to sort the 100 items. At this point we’re splitting hairs. A millisecond, or even 10 milliseconds, wont matter at this point in UI response. We’re only sorting a menu that will never grow beyond 100 items. At this point, pre-mature optimization is evil. There is NO need to rewrite something that that does the job well enough. Can we do it better? Yes! Is there a need to? NO. We wont get any value out of it. The time spend on development is wasted compared to the benefit to the application. &lt;/p&gt;  &lt;p&gt;On the other hand, if the menu had no upper bound limit, then we would want to implement the best sort routine we could because some routines are exponentially faster than others. In this case we would want to optimize early because the possibility of a bottleneck can and might occur in certain situations. &lt;/p&gt;  &lt;h3&gt;It all boils down to: “It Depends”&lt;/h3&gt;  &lt;p&gt;At the end of the day, the true answer to “Is Premature optimization evil?” is “It Depends”. &lt;/p&gt;  &lt;p&gt;It depends on the problem. It depends on the architecture and design. It depends on analysis of the domain. It depends on the factors which “could” come into play. &lt;/p&gt;  &lt;p&gt;Finally, what it really boils down to is: &lt;u&gt;It depends on MONEY&lt;/u&gt;. We can optimize all day and gobs of the companies money in development/optimization costs. This is why deep analysis into the problems need to take place. As architects we need to define the business process that could impact our architecture design and implementation and development of code. At some point we need the business to interject into this analysis and optimization party to say “Listen, I’m willing to deal with X, but I’m not willing to deal with Y”. At that point, our jobs as Architects is to define how much X costs compared to how much Y costs. Only then will the business truly know what should be done juxtaposed with what should not be done. &lt;/p&gt;  &lt;p&gt;To sum it up in my own personal opinion, premature optimization &lt;em&gt;can&lt;/em&gt; be evil. We, as architects and developers need to think about the problem at hand before we write a line of code. As I stated above, there is no need for a full 90 page document on the process, but at least whiteboard with your colleagues. Are you a solo developer and need someone to bounce ideas off of? Join your local user group, join some groups online, visit the MSDN architecture forum and ask questions. &lt;/p&gt;&lt;img src="http://footheory.com/aggbug.aspx?PostID=400" width="1" height="1"&gt;</description><category domain="http://footheory.com/blogs/donnfelker/archive/tags/Agile/default.aspx">Agile</category><category domain="http://footheory.com/blogs/donnfelker/archive/tags/.NET/default.aspx">.NET</category><category domain="http://footheory.com/blogs/donnfelker/archive/tags/Design/default.aspx">Design</category><category domain="http://footheory.com/blogs/donnfelker/archive/tags/Architecture/default.aspx">Architecture</category></item><item><title>By Far, The Coolest Flash App I've EVER Played With</title><link>http://footheory.com/blogs/donnfelker/archive/2008/05/01/by-far-the-coolest-flash-app-i-ve-ever-played-with.aspx</link><pubDate>Thu, 01 May 2008 07:13:03 GMT</pubDate><guid isPermaLink="false">9ce7e6ef-4587-4f0e-939d-3f75f3a8ddfc:377</guid><dc:creator>donnfelker</dc:creator><slash:comments>0</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://footheory.com/blogs/donnfelker/rsscomments.aspx?PostID=377</wfw:commentRss><comments>http://footheory.com/blogs/donnfelker/archive/2008/05/01/by-far-the-coolest-flash-app-i-ve-ever-played-with.aspx#comments</comments><description>&lt;p&gt;I&amp;#39;ve played with a lot of Flash applications, hell, I&amp;#39;ve written a TON of them. I was one of the very few developers developing/integrating PHP/MySQL/Flash 5/MX/ActionScript programming that I know of at the time. Here&amp;#39;s a few links to some of them I built that are still online. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;&lt;a href="http://www.universatilemusic.com/artists/bradb/ecard/" target="_blank"&gt;Brad B ECard&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://www.universatilemusic.com/artists/scarub/ecard" target="_blank"&gt;Scarub Online Media One Sheet&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;a href="http://universatilemusic.com/artists/dieyoung/ecard/" target="_blank"&gt;Die Young Online Media One Sheet&lt;/a&gt; (looks like the music is broken for some reason) &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;Unfortunately the &lt;a href="http://www.archive.org" target="_blank"&gt;Internet archive&lt;/a&gt; doesn&amp;#39;t keep track of flash movies that well otherwise I&amp;#39;d link the SUPER COOL ones (tons of animation based upon user input and data from the persistence store) I did that had TONS of integration. I had a ton of other ones that I&amp;#39;ve done but either the band or label went under so they&amp;#39;re not online and I don&amp;#39;t have a portfolio site for them (although I should for historical purposes). Between my stints at Lava Records, Atlantic Records, Dreamworks Records, Nitro Records and the now defunct Grave 9 Records I wrote a lot of PHP/MySQL and Actionscript. Thank god those days are over. Oh .NET how I love thee... anyway... enough geek talk. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;h3&gt;Why The Best Ever? &lt;/h3&gt;  &lt;p&gt;One of my favorite hip-hop artists, &lt;a href="http://www.rhymesayers.com" target="_blank"&gt;Atmosphere&lt;/a&gt;, released a new album called &amp;quot;When Life Gives You Lemons&amp;quot; (You Paint That Sh!t Gold). Seriously, its a great album, but this isn&amp;#39;t a music review site - its a technology blog so lets back to topic Felker ...&lt;/p&gt;  &lt;p&gt;With the release of this album they released a web app that allows users to &amp;quot;&lt;a href="http://www.paintitgold.com/" target="_blank"&gt;Tag The World&lt;/a&gt;&amp;quot; (&lt;a href="http://www.paintitgold.com"&gt;www.paintitgold.com&lt;/a&gt;) which in effect lets the user take a screen capture (through the use of a Flash App) by typing in a URL and then you can use a set of tools to &lt;a href="http://en.wikipedia.org/wiki/Graffiti" target="_blank"&gt;tag up&lt;/a&gt; the site of your choice. &lt;/p&gt;  &lt;p&gt;You can use spray paint, stencils, different colors, sizes, markers, etc, its cool. I literally lost about 2 hours on this site. I got sucked in this evening. That NEVER happens, so when it does I&amp;#39;m completely amazed at how the site did it. After being on the net for 10+ years I thought I&amp;#39;d seen it all, NOPE. This is cool. I&amp;#39;ve seen some &amp;quot;Paint&amp;quot; sites before, but this one got me sucked in.&amp;#160; The other sites that implemented the &amp;quot;paint&amp;quot; feature were very MSPaint. Lets face it, MSPaint, well... sucks. Its great to grab screen shots, but then again, &lt;a href="http://blog.donnfelker.com/2008/03/31/PhotoShopExpressVsPaintNET.aspx" target="_blank"&gt;why aren&amp;#39;t you using Paint.NET&lt;/a&gt;? &lt;/p&gt;  &lt;p&gt;Anyway, that aside here&amp;#39;s what I did to my site. Honestly, I must have created over 50 of these before I just said screw it and decided to save it for the heck of it. &lt;/p&gt;  &lt;p&gt;(click the image to see a larger version on the actual site) &lt;/p&gt; &lt;a href="http://www.paintthatshitgold.com/submission.php?id=975"&gt;&lt;img src="http://www.paintthatshitgold.com/artwork/bloggable/QDw0R72Nt38DIvxzlx8W5qAlSQHpIbPGZuqE3sV2fuhgI2nMR1tSxrPJ3mK9Qk12OuW6DgSftD6W6SYBIVyRzyAMB6Cj0upLjqoR.jpg" border="0" alt="" /&gt;&lt;/a&gt;   &lt;p&gt;The real awesome-ness is that the spray paint has pressure, and you can size the stencils, rotate them, and just go crazy in general. Afterwards,&amp;#160; you can submit your &amp;quot;masterpiece&amp;quot; (if you want to call it that - mine definitely is ... look at my new digs on my picture above - *haha*) to a gallery on the site. Afterwards it gives you code to post your masterpiece on your blog (which is how I got it to my site).&lt;/p&gt;  &lt;h3&gt;Conclusion&lt;/h3&gt;  &lt;p&gt;Take a look at how simple it is to use this site. &lt;/p&gt;  &lt;p&gt;I mean it, literally look at how easy it is to use. You dont have to be a computer genius to get it to work. It just works. This site has a GREAT &lt;a href="http://en.wikipedia.org/wiki/User_experience" target="_blank"&gt;UX&lt;/a&gt; and its fun as hell. There is music playing in the background. You get to tag up a site, hell, just have fun, and you can save your drawing in the end. Every single Web 2.0 designer that wants to make a fun compelling app can learn something from this site. The saying goes &amp;quot;&lt;a href="http://en.wikipedia.org/wiki/Don&amp;#39;t_Make_Me_Think" target="_blank"&gt;Don&amp;#39;t Make Me Think&lt;/a&gt;&amp;quot;. Not only did this site NOT make me think, it led my hand to allow me to escape into their site (and literally escape reality for a couple of hours). &lt;/p&gt;  &lt;p&gt;The only thing I wish they had was a &amp;quot;undo&amp;quot; feature that worked as I expected. From what I could find it you could only &amp;quot;clear the canvas&amp;quot; ... but... then again... this is a hip hop site and the &lt;a href="http://en.wikipedia.org/wiki/Hip_hop_culture" target="_blank"&gt;hip hop culture&lt;/a&gt; embraces &lt;a href="http://en.wikipedia.org/wiki/Graffiti" target="_blank"&gt;graffiti&lt;/a&gt;, and in a true blank canvas sort of way this site embraces the graffiti element beautifully. In the real world you can&amp;#39;t just &amp;quot;undo&amp;quot; a line of paint on a wall (or train for that matter). :) You have to keep on going whether you like the piece or not. Its art. :) &lt;/p&gt;  &lt;h3&gt;&lt;strong&gt;Final Thoughts &lt;/strong&gt;&lt;/h3&gt;  &lt;p&gt;Kudos to the developers of this site, great job guys. &lt;/p&gt;  &lt;p&gt;&lt;a href="http://www.timheuer.com/" target="_blank"&gt;Heuer&lt;/a&gt; lets create a version in Silverlight that blows this one out of the water. :) &lt;/p&gt;&lt;img src="http://footheory.com/aggbug.aspx?PostID=377" width="1" height="1"&gt;</description><category domain="http://footheory.com/blogs/donnfelker/archive/tags/Design/default.aspx">Design</category><category domain="http://footheory.com/blogs/donnfelker/archive/tags/Web+2.0/default.aspx">Web 2.0</category><category domain="http://footheory.com/blogs/donnfelker/archive/tags/Silverlight/default.aspx">Silverlight</category></item><item><title>PhotoShop Express vs. Paint.NET</title><link>http://footheory.com/blogs/donnfelker/archive/2008/03/31/photoshop-express-vs-paint-net.aspx</link><pubDate>Mon, 31 Mar 2008 15:58:03 GMT</pubDate><guid isPermaLink="false">9ce7e6ef-4587-4f0e-939d-3f75f3a8ddfc:362</guid><dc:creator>donnfelker</dc:creator><slash:comments>1</slash:comments><wfw:commentRss xmlns:wfw="http://wellformedweb.org/CommentAPI/">http://footheory.com/blogs/donnfelker/rsscomments.aspx?PostID=362</wfw:commentRss><comments>http://footheory.com/blogs/donnfelker/archive/2008/03/31/photoshop-express-vs-paint-net.aspx#comments</comments><description>&lt;p&gt;Almost daily, I use some sort of digital editing program. Over the years my top 5 tools for digital editing have been &lt;a href="http://www.getpaint.net" target="_blank"&gt;Paint.NET&lt;/a&gt; and &lt;a href="http://www.adobe.com/photoshop/" target="_blank"&gt;Photoshop&lt;/a&gt;. I use both programs daily for editing screen shots, creating educational material/training manuals, and blog posts. I love Paint.NET simply for the fact that its VERY quick to load and performs easy tasks quite quickly. On my machine Paint.NET is up and running in under 5 seconds. Paint.NET helped get the easy tasks done, but when I wanted to perform true graphics manipulation and do some hardcore stuff, I&amp;#39;d fire up Photoshop. The one thing that always crossed my mind was why Adobe did not offer a &amp;quot;Photoshop Lite&amp;quot; type of program. Paint.NET has always been my &amp;quot;Photoshop Lite&amp;quot; since it was released. But, I still wondered why Adobe was missing out on this market. &lt;/p&gt;  &lt;p&gt;Well, the other day Adobe released &lt;a href="https://www.photoshop.com/express" target="_blank"&gt;Photoshop Express&lt;/a&gt;. With my previous pondering finally answered, I HAD TO check out this product from Adobe. Could this be the &amp;quot;Photoshop Lite&amp;quot; I was hoping for? &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;My First False Assumption &lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;My first initial impression upon reading the product SKU name &amp;quot;&lt;a href="https://www.photoshop.com/express" target="_blank"&gt;Photoshop Express&lt;/a&gt;&amp;quot; was that it was going to be a slimmed down version of Photoshop similar to Paint.NET that was installable. Having worked with Visual Studio for a very long time, I&amp;#39;ve become adjusted to recommending the &amp;quot;Express&amp;quot; SKU&amp;#39;s to developers interested in .NET development. I&amp;#39;d recommend the &lt;a href="http://www.microsoft.com/express/" target="_blank"&gt;Visual Studio Express SKU&lt;/a&gt; because it allowed them to get the feel for a good IDE (slimmed down on features of course) but they still got to use a lot of built in functionality, and it was FREE. That was the nice thing (note: if you&amp;#39;re a student you can utilize the &lt;a href="https://downloads.channel8.msdn.com/" target="_blank"&gt;Dreamspark campaign&lt;/a&gt; to get a &lt;strong&gt;free version of Visual Studio Pro&lt;/strong&gt;, and other products). &lt;/p&gt;  &lt;p&gt;Was this the slimmed down version? No... not at all. Not only was this version not slimmed down, it wasn&amp;#39;t even installable - its a pure browser based solution. I was thinking that maybe it was a &amp;quot;Click Once&amp;quot; app, nope. Not even close. This is purely a browser based solution. Ok, that&amp;#39;s not too bad, then I started to use it...&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;My Second False Assumption&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I believe a company of &lt;a href="http://www.adobe.com" target="_blank"&gt;Adobe&amp;#39;s&lt;/a&gt; caliber would be able to create a compelling graphics app that would be very responsive and effective - regardless of the platform (install or web). Anyone who has worked with any graphics program knows that they are memory hogs. Literally, they eat memory for breakfast, brunch, lunch and dinner (and some snacks between). They need to utilize a vast memory base to keep the program responsive - I like to say - &lt;em&gt;if its a&amp;#39; swappin&amp;#39; it&amp;#39;s a&amp;#39; doggin&amp;#39;&lt;/em&gt;. I had assumed that this program would be snappy like its big brother Photoshop. Nope. Not at all. &lt;/p&gt;  &lt;p&gt;Since Photoshop Express is a web based hosted solution the images have to be uploaded to the server. The problem lies in the last four words of that sentence. &lt;em&gt;Uploaded to the server. &lt;/em&gt;I don&amp;#39;t know about you, but there is nothing snappy about loading up a 2MB file to a web site. Applying the filters are rudimentary, adjusting contrast, color balance and other tasks leave your image looking like you took a trip back to hippyville with too many pink elephants. &lt;/p&gt;  &lt;p&gt;&lt;strong&gt;Conclusion&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;I had assumed I might be able to replace Paint.NET with Photoshop Express upon its initial release. Unfortunately Photoshop Express is insanely slow and the graphic manipulation tools that I need to accomplish my tasks are not what I need them to be. The lack of options are kind of a bummer and the responsiveness of the app is less than lackluster. But I&amp;#39;ll say this... its a good attempt. Maybe version 2.x will be better. &lt;/p&gt;  &lt;p&gt;How could Adobe get me to use the app? They could make it a Click-Once app. Make it a local installation. Follow the Visual Studio Express SKU model. Look at Paint.NET, It&amp;#39;s worked great for them, why wouldn&amp;#39;t it work for Adobe? I know they have a ginormous &lt;a href="http://www.apple.com" target="_blank"&gt;Apple&lt;/a&gt; following so they&amp;#39;d have to use a installation procedure that would work with MAC&amp;#39;s as well as Windows. Possibly supporting two different models of the software is just too much for them at this point to foot the bill for a Free product and support. But, if they did go down the route of an installable Express type of app, I&amp;#39;d be all over it. &lt;/p&gt;  &lt;p&gt;For the meantime I&amp;#39;ll be sticking with &lt;a href="http://www.getpaint.net" target="_blank"&gt;Paint.NET&lt;/a&gt;. It&amp;#39;s installable. Its a subset of Photoshop Features, and the real key is... &lt;strong&gt;ITS FAST&lt;/strong&gt;. Any tool that I use MUST BE FAST. If its not, its gone. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Click thumbs for larger image&lt;/p&gt;  &lt;table cellspacing="0" cellpadding="2"&gt;     &lt;tr&gt;       &lt;td&gt;&lt;strong&gt;Screenshot of Paint.NET&lt;/strong&gt;&lt;/td&gt;        &lt;td&gt;&lt;strong&gt;Screenshot of Photoshop Express&lt;/strong&gt;&lt;/td&gt;     &lt;/tr&gt;      &lt;tr&gt;       &lt;td&gt;&lt;a href="http://footheory.com/blogs/donnfelker/WindowsLiveWriter/PhotoShopExpressvs.Paint.NETandthewinne_782B/image_2.png"&gt;&lt;img style="border-top-width:0px;border-left-width:0px;border-bottom-width:0px;border-right-width:0px;" height="149" alt="image" src="http://footheory.com/blogs/donnfelker/WindowsLiveWriter/PhotoShopExpressvs.Paint.NETandthewinne_782B/image_thumb.png" width="244" border="0" /&gt;&lt;/a&gt;&lt;/td&gt;        &lt;td&gt;&lt;a href="http://footheory.com/blogs/donnfelker/WindowsLiveWriter/PhotoShopExpressvs.Paint.NETandthewinne_782B/image_4.png"&gt;&lt;img style="border-right:0px;border-top:0px;border-left:0px;border-bottom:0px;" height="188" alt="image" src="http://footheory.com/blogs/donnfelker/WindowsLiveWriter/PhotoShopExpressvs.Paint.NETandthewinne_782B/image_thumb_1.png" width="244" border="0" /&gt;&lt;/a&gt; &lt;/td&gt;     &lt;/tr&gt;   &lt;/table&gt;&lt;img src="http://footheory.com/aggbug.aspx?PostID=362" width="1" height="1"&gt;</description><category domain="http://footheory.com/blogs/donnfelker/archive/tags/Productivity/default.aspx">Productivity</category><category domain="http://footheory.com/blogs/donnfelker/archive/tags/Design/default.aspx">Design</category></item></channel></rss>