<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1332797416376256498</id><updated>2024-10-06T21:05:27.279-07:00</updated><category term="custom application development"/><category term="information providers"/><category term="Software Innovation"/><category term="application development services"/><category term="cloud development"/><category term="agile development"/><category term="automated testing"/><category term="custom software development"/><category term="information supply chain"/><category term="AWS tips"/><category term="application development services cloud mobile open source"/><category term="cloud"/><category term="code quality"/><category term="content enrichment"/><category term="cross-platform mobile apps"/><category term="custom application development services"/><category term="domain understanding"/><category term="mapping"/><category term="mobile application development"/><category term="new product development"/><category term="outsourced product development"/><category term="paas"/><category term="software application maintenance"/><category term="software development process"/><category term="tips"/><category term="web 2.0"/><title type='text'>Software Innovation</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default?start-index=26&amp;max-results=25'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>28</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-879480907270554519</id><published>2013-02-24T13:07:00.005-08:00</published><updated>2013-02-24T13:07:48.118-08:00</updated><title type='text'>Set up Hadoop on OSX</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Let&#39;s say you&#39;re looking to get you MacBook Pro all set up with a local Hadoop instance to play with for that long flight across the Atlantic (or some other time when you really want to be running locally).&lt;br /&gt;
&lt;br /&gt;
The following steps work for OSX 10.7 Lion&lt;br /&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;
&lt;/div&gt;
&lt;ul style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Pull down the latest stable release (as of today, 1.0.4) from &lt;a href=&quot;http://hadoop.apache.org/&quot;&gt;http://hadoop.apache.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Un tar, and move to your favorite projects directory&lt;/li&gt;
&lt;li&gt;Following the &lt;a href=&quot;http://hadoop.apache.org/docs/r1.0.4/single_node_setup.html&quot; target=&quot;_blank&quot;&gt;Single Node Setup&lt;/a&gt; is a great way to get going&lt;/li&gt;
&lt;/ul&gt;
The following tips may be useful the first time you&#39;re setting this up on a new computer:&lt;br /&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Turn on SSH (System Preferences =&amp;gt; Sharing =&amp;gt; Remote Login =&amp;gt; &quot;On&quot;)&lt;/li&gt;
&lt;li&gt;For the JAVA_HOME variable, you could put in the current full path:&amp;nbsp;&lt;ul&gt;
&lt;li&gt;export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home&lt;/li&gt;
&lt;li&gt;or, you could do it the smart way:&lt;/li&gt;
&lt;li&gt;export JAVA_HOME=`/usr/libexec/java_home`&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;If you get this error:&amp;nbsp;
&lt;pre&gt;ERROR org.apache.hadoop.hdfs.server.datanode.DataNode: java.io.IOException: Incompatible namespaceIDs in /Users/jchen/Data/Hadoop/dfs/data: namenode namespaceID = 773619367; datanode namespaceID = 2049079249&lt;/pre&gt;
&lt;br /&gt;It&#39;s &lt;a href=&quot;http://stackoverflow.com/questions/3425688/why-does-the-hadoop-incompatible-namespaceids-issue-happen&quot; target=&quot;_blank&quot;&gt;because&lt;/a&gt;&amp;nbsp;you&#39;ve formatted the namenode twice. Happens when you&#39;re walking through tutorials. The answer is well spelled out &lt;a href=&quot;http://www.michael-noll.com/tutorials/running-hadoop-on-ubuntu-linux-multi-node-cluster/#javaioioexception-incompatible-namespaceids&quot; target=&quot;_blank&quot;&gt;here&lt;/a&gt; (which is another good setup tutorial). The summary is: either start over - delete the datanode directory and then reformat the name node - or manually fix the version file in the datanode to match the name node.&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/879480907270554519/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2013/02/set-up-hadoop-on-osx.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/879480907270554519'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/879480907270554519'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2013/02/set-up-hadoop-on-osx.html' title='Set up Hadoop on OSX'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-6397134078181947004</id><published>2011-07-12T13:27:00.000-07:00</published><updated>2011-07-12T13:37:24.261-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="AWS tips"/><title type='text'>Enabling X11 Forwarding to Ubuntu on AWS</title><content type='html'>If you&#39;re using Amazon Web Services EC2, you probably discovered that the RightScale Linux images are very good starting points. The Ubuntu server image is a good starting point for many standard dev or demo purposes. Usually the ssh session is good enough, but recently I wanted to run JConsole on the server to access some MBeans published by the graph database &lt;a href=&quot;http://neo4j.org&quot;&gt;Neo4J&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Here are the changes I made to my basic server set up script (you do automate all the steps you like to apply to any new EC2 image, right?). Add 2 X-related packages and switched from the headless OpenJDK to the full OpenJDK:&lt;/div&gt;&lt;div&gt;&lt;div&gt;apt-get install xauth -y&lt;/div&gt;&lt;div&gt;apt-get install x11-apps -y&lt;/div&gt;&lt;div&gt;#need full jdk, not headless in order to run jconsole as UI&lt;/div&gt;&lt;div&gt;#apt-get install openjdk-6-jre-headless -y&lt;/div&gt;&lt;div&gt;apt-get install openjdk-6-jdk -y&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And remember to update your SSH command to include trusted X11 forwarding&lt;/div&gt;&lt;div&gt;&lt;div&gt;ssh -i &lt;your ec2=&quot;&quot; keypair=&quot;&quot; file=&quot;&quot;&gt; root@&lt;your ec2=&quot;&quot; ip=&quot;&quot; address=&quot;&quot;&gt;.compute-1.amazonaws.com -Y -C&lt;/your&gt;&lt;/your&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/6397134078181947004/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2011/07/enabling-x11-forwarding-to-ubuntu-on.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/6397134078181947004'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/6397134078181947004'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2011/07/enabling-x11-forwarding-to-ubuntu-on.html' title='Enabling X11 Forwarding to Ubuntu on AWS'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-685345008546024028</id><published>2011-03-04T08:52:00.000-08:00</published><updated>2011-03-07T09:29:12.577-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="information providers"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Innovation"/><title type='text'>Content Access Becomes King</title><content type='html'>&lt;div&gt;The old mantra was that &quot;Content is King&quot; but that&#39;s changing quickly and it&#39;s now more true to say that &quot;Content Access is King.&quot; The &lt;a href=&quot;http://www.allianceglobalservices.com/services/outsourced-product-development&quot;&gt;software applications&lt;/a&gt; that put the content in front of the user is what determines the winner.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In the overall evolution of the mobile app market, the open web, and the semantic web one irony is that while content is becoming more accessible, more accessed, and more widely used the seeming importance of the actual content is going down. Consumers have always thought of the content access tool as the product, not the content itself. When it was difficult to get to the content repositories, the Bloomberg terminal, LexisNexis green screen, and the CompuServe dial-up software were the product and there was no way to get to the content without going through the access platform.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The internet and search engines started the trend - consumers did a search and got results and never knew that the content was not owned by Google or Yahoo - and did not think about the quality, accuracy, or completeness of the search results because they were much more focused on the ease of access. This trend accelerates with newer internet applications and the Mobile Internet in particular. Users, consumer and professionals, will buy the apps that give them access to content - regardless of the content source. Yelp! and Urban Spoon replaced Zagat because it was easy to find and contribute reviews on your mobile device, not because the content was better or more complete than Zagat.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;To compete in this industry today information services companies must:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;Continue to make your content better - try to maintain the Accuracy, Completeness, and Timeliness gap between proprietary content in captive repositories and the Free Content so that the upstarts stay at 80% solutions (or go down, not up)&lt;/li&gt;&lt;li&gt;Innovate and deliver the world class applications and access points that consumers want. Incumbent information providers need to create rich mobile, always on, easy-to-use apps that make it easy to find, read, and contribute content from any device at any time that consumers like to use and promote to their friends. Rich User Experience, cutting edge &lt;a href=&quot;http://www.allianceglobalservices.com/services/outsourced-product-development&quot;&gt;software development&lt;/a&gt;.&lt;/li&gt;&lt;li&gt;Open up your content repositories through APIs to get your content used by new innovators. Embedding your content in the largest social media applications, the new local apps, and every entrepreneur&#39;s crazy new idea gets &lt;b&gt;your&lt;/b&gt; content in front of new users and new &lt;b&gt;customers&lt;/b&gt;. By making it easy to use your content in new ways and new ideas, you also forestall the creation of even more competitive content sources and make your content the preferred choice for every new innovator.&lt;/li&gt;&lt;li&gt;Overhaul your content supply chain. Make it nimble, make it flexible. New content sources, new content enrichment, new content integration. &lt;i&gt;Faster, cheaper, and better.&lt;/i&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;More sophisticated customers may realize that free or smaller content providers do not meet the very high Accuracy, Completeness, and Timeliness hurdles that Professional information workers have. But they will still buy and use the easy-access mobile solutions to get access to the 80% content &lt;b&gt;anywhere&lt;/b&gt; and &lt;b&gt;all the time&lt;/b&gt;. As the 80% solutions get better (85%, 90%, ...), the professionals may decide they don&#39;t need to pay full price either.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Most ironically, the more content providers try to lock up their content, the more it will become commoditized -- startups who make great software products using a free content source because it&#39;s available and easy to use convince customers that the free content is &lt;i&gt;good enough.&lt;/i&gt; There goes your proprietary brand and content differentiation.&lt;span class=&quot;Apple-tab-span&quot; style=&quot;white-space:pre&quot;&gt; &lt;/span&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/685345008546024028/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2011/03/content-access-becomes-king.html#comment-form' title='1 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/685345008546024028'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/685345008546024028'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2011/03/content-access-becomes-king.html' title='Content Access Becomes King'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-8157202219672604297</id><published>2011-02-17T20:11:00.000-08:00</published><updated>2011-02-18T08:55:33.277-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile development"/><category scheme="http://www.blogger.com/atom/ns#" term="automated testing"/><title type='text'>Don&#39;t Fire QA - Embed QA in to Agile teams</title><content type='html'>&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;Mike Gualtieri recently wrote a &lt;a href=&quot;http://blogs.forrester.com/mike_gualtieri/11-02-17-want_better_quality_fire_your_qa_team&quot;&gt;post&lt;/a&gt; about how 1 financial data company was able to improve software quality by firing their QA team and making developers responsible for testing the software. This is a good concept - have the team of engineers responsible for creating the software also be responsible for proving the software works. I agree that you should break down the barrier between a development team and a QA team. I disagree that you should fire your testers. You should Embed them in to Agile teams.&lt;/div&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;I met with a client today who described doing weekly releases to a very high volume online advertising system. This system has hundreds of servers around the globe and is directly revenue generating software with complex algorithms. His approach was not to fire the QA but to embed them in to the development scrum teams to help the developers make even better software.&lt;/div&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;This is one of the basic tenets of typical Agile software development approaches. To quote Janet Gregory, Agile teams have &quot;Blurred Lines Between Roles&quot;:&lt;/div&gt;&lt;ul style=&quot;font-family: Arial; font-size: medium; &quot;&gt;&lt;li&gt;Agile developers are &quot;test infected&quot;&lt;/li&gt;&lt;li&gt;Agile testers and programmers collaborate&lt;/li&gt;&lt;li&gt;Agile testers and customers collaborate&lt;/li&gt;&lt;li&gt;&quot;Whole Team&quot; responsibility for testing&lt;/li&gt;&lt;li&gt;Everyone understands the business&lt;/li&gt;&lt;/ul&gt;&lt;span class=&quot;Apple-style-span&quot;   style=&quot;  ;font-family:Arial;font-size:medium;&quot;&gt;When you follow these approaches, you get Unit tests from your developers. You get acceptance tests written for user stories BEFORE the code is written. You get developers who try to prove their code works, not who just try the happy path and throw the code over the wall to QA and wait to see what bugs get reported back.&lt;/span&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;When you have developers who are responsible for executing regression tests, you get automated unit and regression tests to validate the software in every build. And when you have developers who are responsible for successfully deploying the software to production they think about how to automate the deployment so it works every time. This is all good!&lt;/div&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;But you still need people who are trained to think about testing, requirements, and user story completeness, and who are used to  looking for corner cases, and thinking like a user, and who have seen bad data, funny encodings, and the hundred other oddities that a skilled tester can find in software. &lt;/div&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;This is why it&#39;s better to embed the QA testers in to the scrum teams. The TEAM is responsible for the software quality. The 1 or 2 engineers on the team with a QA background go about ensuring quality differently - they work with the users and customers more to ensure the team really understands how the system is going to be used. They build &lt;a href=&quot;http://www.allianceglobalservices.com/services/software-qa-testing/test-Automation&quot;&gt;automated tests&lt;/a&gt; for parts of the system that are not easy to automate with unit tests. They double check the consistency of the look &amp;amp; feel. They run stress tests. They manage sample data. They ensure that 2 user stories do not conflict with each other. They do all the things that a developer focused on a single user story might miss or not realize was important, because after all the developer&#39;s code passed the unit test and passed the acceptance tests.&lt;/div&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;If you want great software, you need more than just coders. You need testers - but you need Agile testers who are part of the software creation process, not a separate team given an impossible task of &quot;finding all the bugs&quot; in code casually written by the coders. Don&#39;t fire, EMBED QA!&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/8157202219672604297/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2011/02/dont-fire-qa-embed-qa-in-to-agile-teams.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/8157202219672604297'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/8157202219672604297'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2011/02/dont-fire-qa-embed-qa-in-to-agile-teams.html' title='Don&#39;t Fire QA - Embed QA in to Agile teams'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-1115002227753152456</id><published>2011-02-17T19:16:00.000-08:00</published><updated>2011-02-17T19:24:20.821-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="application development services"/><category scheme="http://www.blogger.com/atom/ns#" term="cloud development"/><category scheme="http://www.blogger.com/atom/ns#" term="paas"/><title type='text'>Custom app dev is DEAD. Long live the Agile Business Platforms.</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: medium; &quot;&gt;Custom application development is dead. Over the next 3 years Agile Business Platforms development like&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: medium; &quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: medium; &quot;&gt;&lt;a href=&quot;http://force.com/&quot;&gt;force.com&lt;/a&gt;&lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: medium; &quot;&gt; &lt;/span&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial; font-size: medium; &quot;&gt;and &lt;a href=&quot;http://www.mendix.com/&quot;&gt;Mendix&lt;/a&gt; will replace custom development for 90% of business applications. The ability to rapidly prototype business requirements and deploy scalable, working applications in a fraction of the time of traditional Enterprise &lt;a href=&quot;http://www.allianceglobalservices.com/services/application-development&quot;&gt;application development&lt;/a&gt; processes is a game-changing business advantage. No one who understands the ROI and business value benefit will hire a Java or .Net developer to build a new business application from scratch. Anyone looking to reduce costs and improve business agility by reinventing their legacy systems needs to look at a tool like Mendix that can deliver immediate business applications and continuous Agile business improvements.&lt;/span&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;The traditional 2- or 3-year Enterprise application development process run in the traditional way by the IT team is a waste of money and time and sacrifices key business agility. In today&#39;s hyper competitive and fast moving world, no business can afford to wait that long to introduce new capabilities, integrate with new supply chain partners, or automate existing costly manual processes. Agility, flexibility, and lower cost are the name of the game.&lt;/div&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;These Agile Business Platforms can be either on-premise of cloud based Platforms-as-a-Service (PaaS) options. The key is to be able to have a business analyst sit with users and business people and turn requirements in to prototypes immediately. This way the business people can &quot;touch and feel&quot; the application and see how their business process will work. They can provide feedback and iterate through processes, problems, and ideas in a matter of days not months. This is the definition of an Agile business and it is the promise of on-demand IT services that require a minimum of custom coding and maintenance.  The companies who embrace and benefit from these cloud platforms will be able to out innovate and out compete their competitors by trying new business ideas,  improving business processes, and leveraging the global supply chain of partners to produce the best products, services, and customer experience. IT must be the enabler, not the bottleneck to this true Business Agility.&lt;/div&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style=&quot;font-family: Arial; font-size: medium; &quot;&gt;Long live the new Agile Business Platforms.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/1115002227753152456/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2011/02/custom-app-dev-is-dead-long-live-agile.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/1115002227753152456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/1115002227753152456'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2011/02/custom-app-dev-is-dead-long-live-agile.html' title='Custom app dev is DEAD. Long live the Agile Business Platforms.'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-574905201987813569</id><published>2011-02-08T07:39:00.001-08:00</published><updated>2011-02-08T08:24:49.874-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cross-platform mobile apps"/><category scheme="http://www.blogger.com/atom/ns#" term="mobile application development"/><title type='text'>Cross Platform Mobile App Development</title><content type='html'>&lt;a onblur=&quot;try {parent.deselectBloggerImageGracefully();} catch(e) {}&quot; href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRDq8k3dRPieMCqMgb5hbURaTT1TRUDVzj1foKeQQTekq02g3VllxZkjvHG3OMhyphenhyphenjCq_o5P_q2oecou0iW52OUjIiLDApqwE5cva3_AKVaHMuJpYrhlVt1u1xueX7orqj6z1ynmlMk0p8/s1600/droid-logo.png&quot;&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 64px; height: 48px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRDq8k3dRPieMCqMgb5hbURaTT1TRUDVzj1foKeQQTekq02g3VllxZkjvHG3OMhyphenhyphenjCq_o5P_q2oecou0iW52OUjIiLDApqwE5cva3_AKVaHMuJpYrhlVt1u1xueX7orqj6z1ynmlMk0p8/s200/droid-logo.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5571351956254541922&quot; /&gt;&lt;/a&gt;&lt;br /&gt;&lt;div&gt;In order to avoid headaches, reduce time, and reach a broader audience it is critical to have a good cross platform (or is that cross-device?) &lt;a href=&quot;http://www.allianceglobalservices.com/services/application-development&quot;&gt;mobile application development&lt;/a&gt; framework to enable a &quot;Write Once, Run Anywhere&quot; experience without having your dev team try to learn five different SDK&#39;s and a zillion different libraries. With the plethora of different mobile platforms and operating systems, to reach the largest audience you would need to target at least 3 separate major SDK&#39;s - Apple&#39;s iOS, Google&#39;s Android, and RIM&#39;s Blackberry. &lt;/div&gt;&lt;img style=&quot;float:right; margin:0 0 10px 10px;cursor:pointer; cursor:hand;width: 188px; height: 42px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhF04Q5K9hJ2kwF2iaP17DMWy06vCS0Q5fK7HA8rcIFt7me_Zujb02jV14Pgu9u8X-77dApOADyMJY8LypAv8nLnQm9G5Zo_NB-GdC2IkOv4pwc7lf8ifZbk5va2pX4AYI5o9jKD38uxxg/s200/blackberry-logo.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5571354273087217922&quot; /&gt;&lt;div&gt;And then let&#39;s not forget the other smaller (but still significant) players, HP/Palm webOS, Microsoft&#39;s Win Phone 7, and Symbian. &lt;/div&gt;&lt;div&gt;&lt;img style=&quot;float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;width: 90px; height: 90px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgXEJuq40yWGl5p3zgG9lvh92UNcvgtj3t5_DN3YUaMi5uzQnwEP6STO1tzAC0loET12a-NWghw3_wVRHjFF5jqXcpOO9JIGmaT5VAiglFzkc1tXSvdbYTtOur0XLApvN2DfhDXhkwhHqk/s200/iOS.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5571350696204677570&quot; /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So that&#39;s at least 6 separate SDK&#39;s and versions of mobile apps your team would have to build. Oh boy, that quick mobile app you wanted to build just got a lot harder.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Or did it?  What if you could use a standard &lt;a href=&quot;http://www.allianceglobalservices.com/services/application-development&quot;&gt;application development&lt;/a&gt; toolkit, maybe something a lot of developers already have experience with that worked across all the major mobile devices?  That would suddenly cut your 6 separate SDK&#39;s back down to 1, plus some wrappers to get the native app&#39;s built and deployed on each platform.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Sounds pretty good - right?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well - it&#39;s here, and it&#39;s HTML5.  That&#39;s right, your favorite good old fashioned web development toolkit is also the best mobile development toolkit for building cross device mobile applications.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;One of the best tools for packaging your HTML5 based app for each mobile platform is PhoneGap, an open source tool that uses each major SDK to provide a native mobile app for each platform. These HTML5 mobile apps have full access to native features and look like all the other apps you are already using. Heck, a lot of apps you are using are already developed using PhoneGap. They are working on additional enhancements to make automated build processes so that even the work of setting up and build five different flavors of your mobile app is automated.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Then there are various javascript libraries available to make your app shine and give you full development tools for building that killer business logic you need. Some of the ones AGS uses in our application development are:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;JQuery Mobile - open source jQuery plug-in with great mobile app theming support&lt;/li&gt;&lt;li&gt;Sencha - ExtJS based commercial desktop &amp;amp; mobile app library&lt;/li&gt;&lt;li&gt;Rhomobile - a set of products for full enterprise mobile application development&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;By leveraging these tools and techniques, we are able to build full-featured mobile apps that work on multiple platforms at the same speed (or faster in some cases) as traditional web applications.&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/574905201987813569/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2011/02/cross-platform-mobile-app-development.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/574905201987813569'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/574905201987813569'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2011/02/cross-platform-mobile-app-development.html' title='Cross Platform Mobile App Development'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjRDq8k3dRPieMCqMgb5hbURaTT1TRUDVzj1foKeQQTekq02g3VllxZkjvHG3OMhyphenhyphenjCq_o5P_q2oecou0iW52OUjIiLDApqwE5cva3_AKVaHMuJpYrhlVt1u1xueX7orqj6z1ynmlMk0p8/s72-c/droid-logo.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-461893549437736017</id><published>2011-02-05T18:07:00.000-08:00</published><updated>2011-02-05T18:22:48.862-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="tips"/><title type='text'>Dynamic Named Ranges in Excel</title><content type='html'>I want to share a tip I read about (and used) today for &lt;a href=&quot;http://www.ozgrid.com/Excel/DynamicRanges.htm&quot;&gt;Dynamic Named Range&lt;/a&gt;s in Excel. I&#39;ve used Excel for a long time, and spent many many many hours building spreadsheets that mimic little databases because a client or user couldn&#39;t support a database but really &quot;wanted&quot; a simple spreadsheet. I often use named ranges for data validation to substitute for lookup tables and foreign key constraints. A common problem is when the users go to add a new value to the bottom of the lookup table the new value would fall &lt;i&gt;outside&lt;/i&gt; the named range and not be used in the lookup table. &lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;I&#39;ve tried teaching users, writing instructions on how to expand the range, and had fallen in to the habit of making the last element be a row of dashes (&quot;-----&quot;) with instructions to &quot;add a new entry to the list by inserting a row ABOVE the dashes.&quot;  Not very elegant at all, but it did usually work.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The nice folks at ozgrid.com gave a good, simple explanation for how to create &lt;a href=&quot;http://www.ozgrid.com/Excel/DynamicRanges.htm&quot;&gt;Dynamic Named Ranges&lt;/a&gt; that will automatically expand to include new values added at the end of the list. Great time saver!&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/461893549437736017/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2011/02/dynamic-named-ranges-in-excel.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/461893549437736017'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/461893549437736017'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2011/02/dynamic-named-ranges-in-excel.html' title='Dynamic Named Ranges in Excel'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-6165163643044279088</id><published>2011-01-30T05:03:00.001-08:00</published><updated>2011-01-30T15:12:22.510-08:00</updated><title type='text'>Cloud Architecture Realizes 33% Savings and Faster Time To Market</title><content type='html'>In a previous &lt;a href=&quot;http://davidrader.blogspot.com/2011/01/why-use-cloud.html&quot;&gt;post&lt;/a&gt;, I noted that Economics - specifically cost savings and moving from up-front capital purchases to on-demand usage - was a key reason to adopt cloud based services. Recently, Alliance helped a publishing and information services client design a cloud based deployment for a new information portal web application that &lt;b&gt;&lt;i&gt;saved 33% in infrastructure costs&lt;/i&gt;&lt;/b&gt; and saved &lt;b&gt;&lt;i&gt;months &lt;/i&gt;&lt;/b&gt;on deployment time. This is a typical content based online publishing application, with large content repositories, search indexes, innovative user experience, and community feedback widgets like recommendations and filtering.&lt;div&gt;&lt;br /&gt;&lt;div&gt;&lt;center&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?chxl=0:|Time|Cost&amp;amp;chxt=y&amp;amp;chbh=a,5,20&amp;amp;chs=300x150&amp;amp;cht=bhg&amp;amp;chco=AA0033,008000&amp;amp;chd=t:100,100|67,20&amp;amp;chdl=Internal+Data+Center|Cloud+Provider&amp;amp;chm=t,000000,0,0,13|t,000000,0,1,13,-1|t,000000,1,0,13|t,000000,1,1,13&quot; width=&quot;300&quot; height=&quot;150&quot; alt=&quot;&quot; /&gt;&lt;/center&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The previous version of this web application was built and hosted in their corporate data center - which is a large and fairly efficient internal hosting operation. They follow ITIL standards, leverage bulk buying discounts, try to automate where possible, and many large billion dollar revenue web applications. But the internal hosting center is still in a craftsman mode - each new hosting application is custom designed, with very specific hardware specs and design, specific hardware ordered and configured for just this one application, and custom software installation followed for each and every machine in the environment. This type of craftsman approach is fairly typical in hosting (and software development) and drives a MUCH longer timeline as well as higher costs.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Cloud IaaS providers (like Amazon, Rackspace, or GoGrid) take a different approach - they give you a fixed set of virtual machines to choose from with defined compute specs and standard connectivity and let you turn them on at will. Instantly. Zero-delay. With no long planning, ordering, and set up. As you can imagine, this approach drastically reduces the time required to deploy an application to production. And it eliminates many of the error prone and manually intensive (and expensive) steps in planning, ordering, installing, and configuring hardware for the specific application. All of this is a clear win for IaaS over in-house hosting data centers. The Per Server savings are dramatic...&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;img src=&quot;http://chart.apis.google.com/chart?chxl=0:|Search+Server|Web+Server&amp;amp;chxt=y&amp;amp;chbh=a,5,20&amp;amp;chs=500x150&amp;amp;cht=bhg&amp;amp;chco=AA0033,DE3165,008000,31D631&amp;amp;chds=0,45000,0,45000,0,45000,0,45000&amp;amp;chd=t:26078,30313|38669,43639|2978,8760|5957,17520&amp;amp;chdl=Internal+1-Year|Internal+2-Year|Cloud+1-Year|Cloud+2-Year&amp;amp;chma=|5&amp;amp;chm=t,000000,0,0,13|t,000000,0,1,13,-1|t,000000,1,0,13|t,000000,1,1,13&amp;amp;chtt=Cloud+Server+Savings&quot; width=&quot;500&quot; height=&quot;150&quot; alt=&quot;Cloud Server Savings&quot; /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Combining a mix of on-premise database servers, data transfer costs, load balancers, and data storage costs gets the &lt;i style=&quot;font-weight: bold; &quot;&gt;typical total cost savings to 30-40%.&lt;/i&gt; When you consider that by using a cloud IaaS solution you can scale instantly and incrementally to meet demand as you grow your product, you can easily add disaster recovery (DR), and you follow best practices like automated deployment it&#39;s obvious why cloud based application architectures are becoming the norm, even for typical &quot;enterprise applications.&quot;&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/6165163643044279088/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2011/01/cloud-architecture-realizes-33-savings.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/6165163643044279088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/6165163643044279088'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2011/01/cloud-architecture-realizes-33-savings.html' title='Cloud Architecture Realizes 33% Savings and Faster Time To Market'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-8798439090450005778</id><published>2011-01-27T06:39:00.000-08:00</published><updated>2011-01-27T07:05:58.940-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="agile development"/><category scheme="http://www.blogger.com/atom/ns#" term="application development services"/><category scheme="http://www.blogger.com/atom/ns#" term="new product development"/><title type='text'>Iterative Development Key for New Product Development</title><content type='html'>&lt;div&gt;There is a lot of discussion about Agile vs. Plan Driven software development methodologies - usually driven by advocates of one or the other.  Certainly, it&#39;s a more complex topic and there is a wide spectrum of extremely structured, plan-driven approaches to extremely agile, change embracing approaches.  One well thought-out and nuanced explanation with advice for choosing where on the continuum to try to be can be found &lt;a href=&quot;http://www.matincor.com/Documents/Plan%20vs%20Agile.pdf&quot;&gt;here&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Two concepts are fairly easy to accept and understand - one is that when you need to coordinate many different parties a more planned approach with more formal communication between the parties is essential. This comes in to play when coordinating marketing campaigns, customer roll-outs, contracts with vendors, and corporate funding approval processes.  In all of these cases you need to have an idea of how long an effort will take and how much it will cost - and all of the stakeholders involved need to be formally updated to changes in the overall timeline or cost . This can form the basis of the overall planned Program at a high level.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The second is that at a lower level of detail, and especially with &lt;a href=&quot;http://www.allianceglobalservices.com/services/outsourced-product-development&quot;&gt;new product development&lt;/a&gt;, it is impossible to formally plan the software development with any degree of accuracy regarding how long each feature will take or whether every scalability and performance metric will be achieved by the first, second, or third attempt. Additionally, the new product development implementation process is really a R&amp;amp;D process, not a defined engineering approach. You need to explore whether customers can understand the new product, whether the new UI makes sense, whether the most anticipated features are actually used, and on and on. As part of your &lt;a href=&quot;http://www.allianceglobalservices.com/services/outsourced-product-development/product-conceptualization&quot;&gt;new product conceptualization&lt;/a&gt;, you need to prototyp, build, and let customers work with the software to learn what is really needed in the product. Josh Green, the CEO of &lt;a href=&quot;http://panjiva.com/&quot;&gt;Panjiva&lt;/a&gt;, explained it well during his presentation at the Information Industry Summit this week:&lt;/div&gt;&lt;div&gt;&lt;blockquote&gt;When we showed Panjiva to our first customers, we expected them to be blown away - we were giving them more data, more easily to use than they ever had before. But they kept asking for more data or asking for the data to be shown differently. After a while I realized that my customers were &lt;i&gt;TEACHING US HOW THE PRODUCT SHOULD REALY WORK!&lt;blockquote&gt;&lt;/blockquote&gt;&lt;/i&gt;&lt;/blockquote&gt;&lt;/div&gt;&lt;div&gt;This is the essential point about truly &lt;a href=&quot;http://www.allianceglobalservices.com/services/outsourced-product-development&quot;&gt;new product development&lt;/a&gt; - it is an exploration. No one can completely specify in advance how the product should be implemented. Users will teach you how to make the software better. But users can only teach you when they react to something that you put in front of them. Iterative development, and especially early prototyping and mock-ups are key to enabling this customer feedback loop. It is imperative to learn from your customers and deliver the next version quickly so that they continue to see the improvements and continue to help you make your product better.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;At the same time, you probably need a Program level plan - how much funding do you have? How many iterations can you afford? What conferences or industry events make sense to demo your software at?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So you see, it&#39;s not always either Planned or Agile, it&#39;s often &quot;&lt;i&gt;both&lt;/i&gt;.&quot;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/8798439090450005778/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2011/01/iterative-development-key-for-new.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/8798439090450005778'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/8798439090450005778'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2011/01/iterative-development-key-for-new.html' title='Iterative Development Key for New Product Development'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-3107295936389099574</id><published>2011-01-26T12:38:00.000-08:00</published><updated>2011-01-26T12:55:31.041-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="information providers"/><category scheme="http://www.blogger.com/atom/ns#" term="information supply chain"/><title type='text'>Networked Content Manifesto</title><content type='html'>Yesterday Temis distributed print outs of their newly released &quot;Networked Content Manifesto&quot; at the &lt;a href=&quot;http://www.siia.net/iis/2011/&quot;&gt;SIIA conference &lt;/a&gt;in New York.  Ignoring the irony of a firm focused on digital content processing printing copies of their content and handing them out (or maybe that&#39;s an accurate reflection of the current state of online publishing?), the manifesto is a good introduction to the concepts surrounding Semantic technologies and &quot;Content Enrichment&quot;.  In Alliance&#39;s &lt;a href=&quot;http://www.allianceglobalservices.com/industries/information-services&quot;&gt;Information Services&lt;/a&gt; industry focus, wework frequently with clients on implementing taxonomies, ontologies, classification systems, and other tools to automate the &quot;Enrichment&quot; portion of the &lt;a href=&quot;http://www.allianceglobalservices.com/industries/information-services&quot;&gt;information supply chain&lt;/a&gt; processing pipeline.  Combining these sophisticated tools with good Master Data or Master Entity repositories and linking with other internal content or the public Linked Data initiative provides a much richer experience for researchers and content users.&lt;br /&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;color:#0000EE;&quot;&gt;&lt;u&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;color:#000000;&quot;&gt;&lt;img style=&quot;display:block; margin:0px auto 10px; text-align:center;cursor:pointer; cursor:hand;width: 320px; height: 246px;&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgBV4-a8mEIG7c82KLhVljlmnGQxzz4GnVZt451LKa1uFERx0HCG8t9vattK81oFSpMZVLMZvcyD6crAI5XMUZr2NM8EyYNZAjffv-u8lvAZzCL4G1wmSrrdFpuNd_khXYddVf4PJrEaM/s320/Screen+shot+2011-01-26+at+3.38.03+PM.png&quot; border=&quot;0&quot; alt=&quot;&quot; id=&quot;BLOGGER_PHOTO_ID_5566599343750827474&quot; /&gt;&lt;/span&gt;&lt;/u&gt;&lt;/span&gt;&lt;br /&gt;By providing more meaning - more semantic information - about the concepts, people, and entities that are in the document and providing easy ways to navigate through the overall content space we can create a richer experience for the end user and make it easier to discover the information she is looking for. For the publisher this translates in to increased usage which means easy subscription renewals, so that&#39;s a good thing too!&lt;div&gt;&lt;br /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/3107295936389099574/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2011/01/networked-content-manifesto.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/3107295936389099574'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/3107295936389099574'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2011/01/networked-content-manifesto.html' title='Networked Content Manifesto'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhgBV4-a8mEIG7c82KLhVljlmnGQxzz4GnVZt451LKa1uFERx0HCG8t9vattK81oFSpMZVLMZvcyD6crAI5XMUZr2NM8EyYNZAjffv-u8lvAZzCL4G1wmSrrdFpuNd_khXYddVf4PJrEaM/s72-c/Screen+shot+2011-01-26+at+3.38.03+PM.png" height="72" width="72"/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-3992349591257190643</id><published>2011-01-22T07:31:00.000-08:00</published><updated>2011-01-22T07:44:56.953-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="automated testing"/><category scheme="http://www.blogger.com/atom/ns#" term="custom application development"/><title type='text'>Automated Functional Tester</title><content type='html'>This week saw the roll-out of Alliance&#39;s new &quot;Automated Functional Tester&quot; (AFT) framework.  This is a very comprehensive and powerful &lt;a href=&quot;http://www.allianceglobalservices.com/services/software-qa-testing/test-Automation&quot;&gt;automated testing&lt;/a&gt; framework enabling the end-to-end testing of complex web applications. It&#39;s driven by easy to write business requirements, handles rich AJAX interactions, integrated Windows security and file operations, enables fast regression suite runs, and rich reporting.  This framework is built on and integrates a number of open-source testing frameworks to provide full capability and more comprehensive testing than any individual tool. And by using standard test execution environments, like Selenium, it&#39;s possible to take tests generated by the framework and execute them in Cloud testing platforms for &lt;a href=&quot;http://www.allianceglobalservices.com/services/software-qa-testing/performance-testing-on-demand&quot;&gt;performance testing&lt;/a&gt; or large-scale cross browser testing.&lt;br /&gt;&lt;br /&gt;We use automated testing very extensively, from developer written unit tests to fully automated test suites. Sometimes clients balk at the high license fees associated with very full featured commercial testing tools like QTP and this open source testing framework is a great capability to provide our clients with &lt;a href=&quot;http://www.allianceglobalservices.com/services/application-development&quot;&gt;custom software development&lt;/a&gt; backed by fully automated testing at a lower price point!&lt;br /&gt;&lt;br /&gt;Great job to the AFT team!</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/3992349591257190643/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2011/01/automated-functional-tester.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/3992349591257190643'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/3992349591257190643'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2011/01/automated-functional-tester.html' title='Automated Functional Tester'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-2573656800243264534</id><published>2011-01-22T06:35:00.001-08:00</published><updated>2011-01-22T07:20:34.248-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud development"/><category scheme="http://www.blogger.com/atom/ns#" term="custom application development services"/><title type='text'>Why use the Cloud?</title><content type='html'>A lot of people ask &quot;What is Cloud Computing?&quot;  There are good answers for that, and I&#39;m sure I&#39;ll expand on it more in this blog as well.  SaaS, PaaS, IaaS, Public, Private, Hybrid, Virtualization, Storage, Compute, Developer Clouds, Production Clouds, etc.  Lots and lots of definitions of &quot;What is Cloud.&quot;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But there&#39;s a fundamental question I want to answer - Why use the Cloud?  What&#39;s the business value for Cloud Computing?&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Well - it&#39;s all about 3 things:&lt;/div&gt;&lt;div&gt;&lt;ol&gt;&lt;li&gt;&lt;b&gt;A&lt;/b&gt;gility&lt;/li&gt;&lt;li&gt;&lt;b&gt;C&lt;/b&gt;apability&lt;/li&gt;&lt;li&gt;&lt;b&gt;E&lt;/b&gt;conomics&lt;/li&gt;&lt;/ol&gt;&lt;/div&gt;&lt;div&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;&gt;&lt;i&gt;&lt;b&gt;Agility&lt;/b&gt; &lt;/i&gt;&lt;/span&gt;- using on demand software and infrastructure enables you to be more flexible and achieve a given result &lt;i&gt;faster&lt;/i&gt;.  If you&#39;re looking to implement a CRM package, turning on Salesforce.com or NetSuite takes a day or two to start and a week or two to get rolling - much quicker than the usual months-long implementation effort for on premise package installation.  If you need to turn on some developer or testing lab server instances you can sign up with an Skytap, GoGrid or Amazon.com, configure a virtual instance and be completely done by lunch instead of the usual few weeks procurement process to buy a new server, get the IT department to install and configure it, and be able to start using it productively. Using cloud based platforms for development, like Azure, Long Jump, Force.com or App Engine enable much faster &lt;a href=&quot;http://www.allianceglobalservices.com/services/application-development&quot;&gt;software development&lt;/a&gt; and implementation and let you start realizing the business benefit of your application much sooner.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;Capability&lt;/i&gt;&lt;/b&gt; - Using proven, scalable services to build on enables much richer functionality and incredible scalability that you would be very hard pressed to achieve from scratch even if you could afford to build out all of the infrastructure and functionality. You can add amazing rich features to your web application, whether it&#39;s web analytics, photo sharing, data entry forms, data visualization and other business functions so much faster by integrating existing software service like Google Analytics, Flickr, Caspio, or Birst than you ever could by trying to write requirements, design, build and test the software, deploy the new feature and worry about scalability. When you&#39;re looking to deploy robust, scalable applications that support thousands of users around the world, deliver fast performance to every corner of the globe, and meet modern expectations for responsiveness and user experience using Cloud based Content Delivery Networks, Cloud based in-memory caching or databases, cloud-based load balancing between data centers and across tiers, and instantaneously available storage and compute capacity enables companies to have world-class capabilities that they could never hope to achieve by building out their own internal data centers.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;&lt;i&gt;Economics&lt;/i&gt;&lt;/b&gt; - Like many revolutions, by &quot;doing things differently&quot; Cloud based solutions are able to provide very large cost savings.  For individual services, whether it&#39;s reliable storage or scalable web servers, a huge IaaS provider like Rackspace can provide much lower cost per unit than an internal data center could. These large Cloud providers make an investment in automation that enables them to efficiently manage orders of magnitude more capacity per engineer. They are able to buy in bulk from server and equipment vendors, site data centers next to low-cost electricity sources, and operate their data centers like a modern &quot;factory&quot; instead of the &quot;cottage industry&quot; of the internal corporate data centers - with all the cost savings you would expect. The same is true of SaaS providers, who are able to invest massive amounts in software engineering, user experience and design to produce world class software and share the costs across dozens, thousands, or millions of subscribers. An individual corporation will need to invest much much more to build their own version of a software package or service than it would cost to subscribe to a well implemented service.&lt;/div&gt;&lt;div&gt;For the Cloud subscriber, there is another benefit to subscribing to a cloud service rather than buying or building your own internal version - the switch from a large up-front capital investment to a monthly operating cost. This On Demand pricing model enables you to start small and incrementally increase your investment as users move to the service or your customer base grows, rather than requiring you to over-provision for your hoped-for 1 or 2 year projections. This subscription model also ensures you have continued flexibility to evaluate whether the deployed solution is meeting the needs of your customers - the cost to increase the service, switch to a different solution, or turn off the service completely if the business model is not working no longer hinges on huge up-front investments that must be managed and written off - you simply stop paying the monthly subscription and move on.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;As you can see, using Cloud based services provide very real, concrete business value by enabling more &lt;i&gt;&lt;b&gt;Agility&lt;/b&gt;&lt;/i&gt;, more &lt;b&gt;&lt;i&gt;Capability&lt;/i&gt;&lt;/b&gt;, and better &lt;b&gt;&lt;i&gt;Economics&lt;/i&gt;&lt;/b&gt;. There are also numerous other intangible benefits to moving to Cloud services. You need to automate your deployment, you can test more easily, you need to define real service boundaries and interfaces, you can prototype integration and new services quickly, you have access to a wider range of technology options, and on and on. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;That&#39;s Why you SHOULD use the Cloud!!&lt;/div&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/2573656800243264534/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2011/01/why-use-cloud.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/2573656800243264534'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/2573656800243264534'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2011/01/why-use-cloud.html' title='Why use the Cloud?'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-4150233866396484006</id><published>2010-12-16T19:00:00.001-08:00</published><updated>2010-12-16T19:44:46.078-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="application development services"/><category scheme="http://www.blogger.com/atom/ns#" term="cloud"/><category scheme="http://www.blogger.com/atom/ns#" term="content enrichment"/><category scheme="http://www.blogger.com/atom/ns#" term="information supply chain"/><title type='text'>The Best Tool for the Job</title><content type='html'>I spent some time this month learning more about the &lt;a href=&quot;http://www.lexisnexis.com/risk/about/technology.aspx&quot;&gt;LexisNexis Data Analytics Supercomputer&lt;/a&gt; (or HPCC) system.  This is a great tool for building and deploying lightning fast Content Services with high quality content enrichment to turn commodity content in to a valuable &lt;a href=&quot;http://www.allianceglobalservices.com/industries/information-services&quot;&gt;information product&lt;/a&gt; that professionals will pay for. It&#39;s purpose built by a team of very smart technologists who have been turning out content-based products for a long time. For re-engineering a large scale data processing system with hundreds or thousands of input files running on a variety of maxed out Unix servers or mainframes HPCC is a great fit.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The system design reminded me a lot of the notion that when you are doing something over and over again, the right approach is not to just get better and faster at repeating the specific task - but to find a better tool to eliminate the task. If you&#39;re a professional carpenter and putting in a lot of nails you may be tempted to look for a better hammer. The best hammer money can buy will certainly help you hammer in nails better. And that hammer will feel great - like an extension of your arm. It will have perfect balance and enable you to bang in nails all day long without feeling tired. You could be recognized as a true black belt hammering expert able to pound on those nails as long as anyone.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But if you spend the time to find &amp;amp; use a better tool (or even invent a new tool) -- say a nail gun! -- you won&#39;t be 5% or 10% faster at hammering - you won&#39;t be hammering at all.  For the first hour the new nail gun will feel klunky, the tool will be inelegant and ungainly compared to that perfectly balanced hammer you&#39;re used to. You may resist because the hammer you&#39;re used to has worked so well for so long - you can&#39;t count how many hours you&#39;ve used it to bang in the same nail over and over and over again.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;But once you grok the new nail gun and get to used to the new way of accomplishing your task you&#39;ll see how much faster the new tool lets you put in nails. In fact, you&#39;ll be so fast at putting in nails, you&#39;ll stop measuring how long it takes to put in a nail and start thinking about the fact that you&#39;re 1,000% faster at putting up wood framing, which is the actual goal.  This insightful leap requires you to realize that continuing down your existing path and perfecting your use of your current tool is not the best approach - optimization will not win over innovation.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In &lt;a href=&quot;http://www.allianceglobalservices.com/services/application-development&quot;&gt;software development&lt;/a&gt; we are blessed that it is so easy to become 5 or 10% more productive. There is always a new trick to learn, always a new pattern to understand, always one more tip for a language to master, always a faster hotkey or way to do that same task again with fewer clicks, always a piece of code to copy &amp;amp; paste from a previous module or an internet example, always a faster way to repeat the same solution from yesterday over again today.  Hmm... maybe &quot;blessed&quot; should really be &quot;cursed&quot;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And maybe the real blessing is that it is also very feasible to invent or find completely new approaches and new tools that make ourselves orders of magnitude more productive - to deliver more business value. The key is to recognize when using a new tool will not just save a few minutes here and there, but will actually save weeks or months of effort!&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;If you&#39;re working on an &lt;a href=&quot;http://www.allianceglobalservices.com/industries/information-services&quot;&gt;information supply chain&lt;/a&gt; that is processing terabytes of content or billions of rows of data, the LexisNexis DAS system and the ECL language is definitely one of those orders of magnitude improvement tools. It may take a while to stop thinking about SQL and good old RDBMS design, but once you get used to the power of your new nail-gun, you love it!&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/4150233866396484006/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2010/12/best-tool-for-job.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/4150233866396484006'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/4150233866396484006'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2010/12/best-tool-for-job.html' title='The Best Tool for the Job'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-3275775592085388647</id><published>2010-11-26T12:29:00.001-08:00</published><updated>2010-11-26T12:37:51.039-08:00</updated><title type='text'>Forcing new google gadget to load, not from cache</title><content type='html'>One common challenge when working with Google Gadgets is forcing a new development version to load, not reusing a cached version.  A quick search on finds several &lt;a href=&quot;http://www.google.com/support/forum/p/sites/thread?tid=718c84d7c1fe5e45&amp;amp;hl=en&quot;&gt;suggestions&lt;/a&gt; and &lt;a href=&quot;http://www.adambergman.com/2008/06/09/google-gadget-cache/&quot;&gt;conversations&lt;/a&gt; about how to do this, but they are not complete. Renaming the gadget for each save is overkill and not worth it.  The &lt;a href=&quot;http://www.google.com/ig/adde?moduleurl=www.google.com/ig/modules/developer.xml&quot;&gt;developer gadget&lt;/a&gt; does not appear to correctly skip the cache in Safari. A little playing reminded me that the key is to edit the bogus querystring parameter to make the URL unique each time you re-add the gadget.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So, as the first suggestion above says, add a parameter like ?nocache=1 to the end of your gadget moduleurl when adding it.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;AND... when you need to make another edit, change the parameter!  The 2nd time you need for force a reload, set the url to   ?nocache=2&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Next time, ?nocache=3&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;And so on...&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/3275775592085388647/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2010/11/forcing-new-google-gadget-to-load-not.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/3275775592085388647'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/3275775592085388647'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2010/11/forcing-new-google-gadget-to-load-not.html' title='Forcing new google gadget to load, not from cache'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-2263337032042680526</id><published>2010-11-26T11:59:00.000-08:00</published><updated>2010-11-26T12:28:57.340-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="cloud development"/><category scheme="http://www.blogger.com/atom/ns#" term="custom application development"/><title type='text'>Google Gadgets</title><content type='html'>I started experimenting with Google Gadgets today - and I am very impressed with how easy the iGoogle and OpenSocial frameworks are to use.  This is a great example of how a good framework, combined with some on-demand hosting services and mashups of REST-based data sources can make lightweight (or &quot;rowboat&quot;) &lt;a href=&quot;http://www.allianceglobalservices.com/services/application-development&quot;&gt;application development&lt;/a&gt; very simple.  Mixing data from multiple sources via easy-to-integrate URL&#39;s is a great development paradigm for creating operational dashboards or quick glance BI reports.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;In my particular case, I was looking to be able to quickly glance at a page of stock charts to see whether any stocks I&#39;m currently following are at an interesting point.  &lt;a href=&quot;http://www.finviz.com/&quot;&gt;FinViz.com&lt;/a&gt; is a wonderful freemium site for simple analysis, but to follow 4 or 5 stocks required just too many searches and clicks.  But FinViz follows the good Web 2.0 pattern of making their charts publishable and linkable through a URL, so you can combine them to make a dashboard or mashup very easily.  (More proof that REST-based web services are better for distributing your data or enabling partners to easily integrate.  SOAP is ok for heavy weight system integration, but if your goal is to get your data used, use REST!)&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;A few hours of reading the docs and scripting and now I&#39;ve got a configurable stock dashboard integrated with my iGoogle home page.  I just have to decide how to handle the charts when the gadget is not maximized -- any suggestions? :-)&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/2263337032042680526/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2010/11/google-gadgets.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/2263337032042680526'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/2263337032042680526'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2010/11/google-gadgets.html' title='Google Gadgets'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-2159531357168048248</id><published>2010-11-03T10:03:00.001-07:00</published><updated>2010-11-04T13:15:16.949-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="custom application development"/><category scheme="http://www.blogger.com/atom/ns#" term="information providers"/><title type='text'>Integrating Content in Customer Workflow Applications</title><content type='html'>As I discussed in my &lt;a href=&quot;http://davidrader.blogspot.com/2010/10/sell-where-your-customers-buy.html&quot;&gt;last post&lt;/a&gt;, it is critical for information firms to distribute and deliver their content where their customers want to purchase, read, and use it.  In addition to needing to support more platforms and mobile devices, publishers need to integrate their content in to their customer&#39;s workflow applications.  Typical customers do not purchase data, reports, articles, or analyses for fun - they purchase these content pieces to help them accomplish their larger business objectives.  This might mean checking the credit history of a loan applicant, scouring scientific literature for a grant application, or analyzing the legal precedents of an upcoming case. In each situation, the goal of the customer is not to get a document to display on her bookshelf, but to get access to the information in the course of performing a larger task.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Obviously, the key to make this easy is to not force the customer to leave their workflow tools and go to a discrete content website but to INTEGRATE the content in to the workflow tool. In many cases Information Providers are moving up the value chain and selling those workflow enabling tools - for example:&lt;/div&gt;&lt;div&gt;&lt;ul&gt;&lt;li&gt;LexisNexis &lt;a href=&quot;http://law.lexisnexis.com/full-service-law-firms/litigation-services-litigation-workflow&quot;&gt;Litigation Workflow Tools&lt;/a&gt;&lt;/li&gt;&lt;li&gt;D&amp;amp;B &lt;a href=&quot;http://www.dnb.com/us/dbproducts/risk_management/assess_risk/dnbi/index.html&quot;&gt;Risk Management Tools&lt;/a&gt;&lt;/li&gt;&lt;li&gt;Thomson Reuters Healthcare &lt;a href=&quot;http://thomsonreuters.com/products_services/healthcare/healthcare_products/clinical_deci_support/micromedex_clinical_evidence_sol/micromedex_2&quot;&gt;Clinical Evidence Solutions&lt;/a&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div&gt;In each case, the Information Provider adds value to the raw underlying content by providing a business process focused (or Knowledge Worker focused) workflow tool to help the knowledge worker turn the content from &quot;information&quot; in to &quot;knowledge&quot;.  Of course, this value-add is in addition to the direct content value-add through aggregation, classification, entity recognition &amp;amp; linking, and analytics applied in the Information Factory.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;By building these Workflow solutions on top of standard REST or WebServices API&#39;s, the provider is able to leverage the existing content repositories, search, and enrichment capabilities without having to create duplicate product stacks.  And, as I mentioned last time, the same content could be directly integrated with a customer&#39;s proprietary workflow tools or data.  A well thought out and designed API enables many additional distribution channels and revenue generation options with a high ROI by enabling both provider built workflow tools and customer integration. And of course those same API&#39;s can support the new mobile applications that customers want.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is also a very fast growing and productive middle ground for Information Providers to integrate with - Microsoft Sharepoint.  This is one of the fastest growing products in Microsoft history, and used (admittedly to varying extents) by many, or even most, Corporate customers.  The ability to provide pre-built Web Parts that customers can easily install in to their Sharepoint portal to integrate a provider&#39;s search and document retrieval capabilities are very powerful and provide a low-cost, very easy way to move beyond a generic internet content web site to a more integrated Enterprise application. Providing additional Sharepoint workflow enabled components can enable an information provider to provide the full range of on-premise, Enterprise capability without the cost and complexity of Enterprise application development and maintenance.&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/2159531357168048248/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2010/11/integrating-content-in-customer.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/2159531357168048248'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/2159531357168048248'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2010/11/integrating-content-in-customer.html' title='Integrating Content in Customer Workflow Applications'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-4204818184916690033</id><published>2010-10-04T17:48:00.000-07:00</published><updated>2010-10-04T18:25:59.570-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="custom software development"/><category scheme="http://www.blogger.com/atom/ns#" term="information providers"/><title type='text'>Sell Where Your Customers Buy</title><content type='html'>Many marketing or business planning discussions eventually hit on the seemingly self-evident notion that you should &quot;Sell What People Are Buying.&quot;  (For a humorous discussion of this, see this &lt;a href=&quot;http://ittybiz.com/selling-what-people-want-to-buy/&quot;&gt;blog&lt;/a&gt;)  In addition to this basic truth, it is also important to &quot;Sell &lt;b&gt;Where&lt;/b&gt; Your Customers Buy.&quot;  Think of the sidewalk entrepreneurs in New York City selling ice cold sodas or bottled water out of a cooler on the corner in lower Manhattan on a hot summer day.  These vendors are able to charge a premium for a cold drink because they are right where the people are walking and thirsty - they are selling &lt;b&gt;Where&lt;/b&gt; their customers want to buy.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;For Information Providers, this truth is becoming very important.  Not only is the Information industry moving heavily from a print to an all-digital delivery model, and not only are the roles of intermediaries and centralized procurement &quot;locations&quot; (such as corporate libraries) being diminished, and not only do Information Consumers have more choices and more access mechanisms than ever before, but in addition the easy access to information is changing the notion of information gathering from a stand alone task to simply one small (and hopefully automated) step within a larger process.  Let me explain what I mean in a little more detail.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;We all know that Print media is turning Digital.  See the news stories about declining Newspaper readership, Amazon&#39;s (and BN&#39;s, and Border&#39;s, and...) push for digital books, the frequent discussion about the &quot;Google Effect&quot; on content providers, and the Open Access Initiative. The digital content is available on many platforms - the web, your mobile phone, smartphones, tablet computers, and e-readers.  Information Consumers expect to be able to read the articles, analyze the data, and do their jobs on any of these devices, anytime during the day, on the train, in the airport, or wherever they are.  This is what I mean by &quot;Sell &lt;b&gt;WHERE&lt;/b&gt; Your Customers Buy&quot; - you need to be able to sell the article, or provide the data visualization, or the drill-down analysis on any device connected to the internet.  If your valued, long-term Customer is sitting in the airport, curious about something she is not going to wait to get back to her office to use her subscription service to order a new report - she wants to download it to her phone, &lt;i&gt;right now&lt;/i&gt;.  If your service does not provide that, she will &lt;i&gt;go to your competitor&#39;s app&lt;/i&gt; and get her Information &lt;i&gt;right now&lt;/i&gt;.  Your valued, long-term, trusted relationship goes right out the window because your Web 1.0 Information Delivery website cannot meet her expectation of instant information access.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The effect of this is to require every Information Provider to need an iPhone app.  Well an iPhone app and an Android app.  Oh, and an iPad app.  And probably a Galaxy and Playbook app.  And of course, a mobile friendly version of the web site.  You can see, this quickly adds up.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Early attempts to create mobile apps usually involved creating a separate application stack, content collection, or Information Delivery Channel.  This was the quickest, and least expensive approach to get the first mobile app out and does work.  But the cost curve is not pretty, and you soon need to maintain and support 10 different applications, delivery channels, etc at 10x the cost for only marginal revenue increases.  &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The better approach is to build an API.  Not just a dirty hack of a url that can be used to access content, but an actual, thought-out Service Oriented API that provides billing, metering, search, retrieval, and easy integration for apps.  Now those 10 apps are just thin layers reusing the core SOA enterprise services and can be built and maintained cheaply.  Better yet - if you have a loyal community who truly values your content, they will wind up building innovative apps on every platform you have &lt;i&gt;never&lt;/i&gt; heard of to access and embed your content.  This is because your customers are empowered to scratch their own itch, and build an application to solve their own personal or particular corporate need.  And it turns out that a lot of times your customers know how to use your content better than your own product development team -- so the apps they build and the embedded data usage they put together are more useful &lt;i&gt;to your customers &lt;/i&gt;than the pre-built website or stand alone applications you might design.  Your customers become your distributors and open up entire new retail channels you were not even aware of.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;So... you get more sales channels, at a cheaper delivery cost, with more customer value from enabling your content through an API.  Sounds like a Win-Win-Win!&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/4204818184916690033/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2010/10/sell-where-your-customers-buy.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/4204818184916690033'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/4204818184916690033'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2010/10/sell-where-your-customers-buy.html' title='Sell Where Your Customers Buy'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-3694394287041793609</id><published>2010-07-23T06:13:00.000-07:00</published><updated>2010-09-27T12:13:57.566-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="application development services cloud mobile open source"/><title type='text'>The New CMOS - Cloud Mobile Open-source Social</title><content type='html'>CMOS is a well-known acronym in chip manufacturing meaning &quot;Complementary Metal-Oxide-Semiconductor&quot;.  According to Wikipedia: &lt;blockquote&gt;&quot;CMOS&quot; refers to both a particular style of digital circuitry design, and the family of processes used to implement that circuitry on integrated circuits (chips). CMOS circuitry dissipates less power than logic families with resistive loads. Since this advantage has increased and grown more important, CMOS processes and variants have come to dominate, thus the vast majority of modern integrated circuit manufacturing is on CMOS processes.&lt;/blockquote&gt;&lt;div&gt;In other words - because this way of designing and building chips has distinct advantages in improving efficiency and enabling new features, it has become the dominant approach to building chips.  Any mainstream (non-experimental) chip manufacturer has settled on this process because of the inherent benefits.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There is a new CMOS taking over the software development industry - &quot;&lt;b&gt;C&lt;/b&gt;loud &lt;b&gt;M&lt;/b&gt;obile &lt;b&gt;O&lt;/b&gt;pen-source &lt;b&gt;S&lt;/b&gt;ocial.&quot; New applications, whether they are commercial software products, internal enterprise applications, or B2C web applications (think &quot;Web 2.0&quot;, Linked Data and related) are - by default - leveraging the combination of Cloud, Mobile, Open-source, and Social technologies to enable rich feature, scalable, always on applications that are developed faster and cheaper.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Users expect 24/7 access.  Consumers expect to be able to share and tag and link content.  Readers expect to be able to access articles and applications on any computer, any device, anywhere.  This is a fundamentally different mindset than &quot;traditional&quot; application development and traditional publishing models.  It requires new ways of architecting applications and new ways of thinking about data and content.  It&#39;s a heck of a good place to work!&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/3694394287041793609/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2010/07/new-cmos-cloud-mobile-open-source.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/3694394287041793609'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/3694394287041793609'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2010/07/new-cmos-cloud-mobile-open-source.html' title='The New CMOS - Cloud Mobile Open-source Social'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-697155822214410602</id><published>2010-01-11T06:21:00.000-08:00</published><updated>2010-01-11T06:23:23.583-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="custom application development"/><category scheme="http://www.blogger.com/atom/ns#" term="software development process"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Innovation"/><title type='text'>Ten Steps to Agile Software Development Process Improvement</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Arial, Helvetica, sans-serif; font-size: 11px; &quot;&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;In a &lt;a href=&quot;http://www.allianceglobalservices.com/blog/drader/ten-steps-software-development-process-improvement&quot; style=&quot;outline-style: none; outline-width: initial; outline-color: initial; color: rgb(102, 102, 102); text-decoration: underline; &quot;&gt;previous blog entry&lt;/a&gt;, I mentioned 10 Steps to Improve Software Development Process.  If you read these and pause for a minute, you&#39;ll notice that many of these are actually principles of Agile development. I want to expand on a few of these thoughts here.&lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt; &lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;1. Focus on the top 20% of features:&lt;br /&gt;This is one of the primary drivers of value in Agile &lt;a href=&quot;http://www.allianceglobalservices.com/services/application-development/custom-business-application-development&quot; style=&quot;outline-style: none; outline-width: initial; outline-color: initial; color: rgb(102, 102, 102); text-decoration: underline; &quot;&gt;custom application development&lt;/a&gt;practices.  By prioritizing and rank-ordering every item in the feature request backlogs, only the most important ones are developed. By focusing on these Top 20%, you can often satisfy 80% of what end users want, and they can start using the system sooner, to add to the profitability of your company. (If the most important 20% of the features do not add to your company profitability, you should probably cancel the project!)&lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;2. Break things up into smaller projects:&lt;br /&gt;Big projects turn in to huge projects.  And miss deadlines. And run over budget. Reading the Standish Group CHAOS report figures on failed IT projects always makes me wonder why more people don&#39;t follow the simple advice to &quot;not bite off more than you can chew&quot;?&lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;Again, the Agile concept of smaller, more frequent releases echoes through this item.  Getting a working system in to the hands of users is always a good thing - that&#39;s why you are implementing the system to begin with! Giving an important and useful portion of functionality early is even better.  This has many organization benefits - from psychological ones like proving that the overall program can work and the enthusiasm from a successful launch, to risk mitigation benefits like the ability to redirect spending on an investment after the first release if priorities change, to the practical one that it is a lot easier to notice a project in trouble if a specific release is over budget or late than if fuzzy &#39;milestones&#39; are being missed.&lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;5. Obtain user feedback&lt;br /&gt;During the implementation process, keep the end users constantly in the picture.  Show them early versions of the system - for instance at each Sprint Demonstration or at least with small, frequent releases. Let them give you feedback, and above all, let them change their minds without being punished.  Trust your end users; they know what works and what does not - and they are the ones who are going to use the system every day! When they see working features, they may be able to better prioritize other changes or features to be able to complete an important business process or simplify many steps.&lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;7. Mistakes are a way of learning&lt;br /&gt;Remove the blame culture.  Let people make mistakes quickly - failing early is much better than missing a delivery date.  These so-called mistakes are part of the overall discovery process and will help lead and evolve to the eventual solution.  If you blame people for mistakes (picking the wrong feature for a Sprint, not seeing a bug, very bad color choices) they will react to the blame and change their own behavior. Rather than being an active participant in making the project a success, they will become &quot;followers&quot;, just doing what they are told - no way to get blamed there - and punching the clock.  The good people will hate the blame culture enough to look for work somewhere better.&lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;10. Something has to give in the Iron Pyramid (Quality, Time, Cost, Features)&lt;br /&gt;The old Iron Triangle, which I&#39;ve always thought should be an Iron Pyramid with Quality as an explicit dimension, still holds true today. In an agile development process you try to &quot;bake in&quot; high Quality by using unit tests, refactoring, engaged people, and frequent review processes.  You fix the Time or at least the time cycles - every two weeks you have a Sprint release; and the Cost is essentially fixed based on the size and members of the team. The Features dimension is what gives - and that is where the prioritization comes in. By putting the most important features first, you complete as many in each Sprint as you can and know that you are achieving the most important features at any given time.&lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;Over a longer time horizon, say a Release of 5 to 6 Sprints, you can adjust the Time and Cost dimensions, by letting the process run for more Sprints or deciding that enough Features are ready to stop this project.&lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;I focus on the Iron Pyramid because we all know the truth. If you push people hard enough, they will relax some of the quality checks, and they will get one extra feature in. But you have lowered the quality level - maybe not enough to notice today, but you will pay for it in the future. Whether it is the performance testing that is skipped, leading to a slow web application, or &quot;smelly code&quot; that costs more and more to maintain over time you pay for the lapse in quality.&lt;/p&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/697155822214410602/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2010/01/ten-steps-to-agile-software-development.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/697155822214410602'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/697155822214410602'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2010/01/ten-steps-to-agile-software-development.html' title='Ten Steps to Agile Software Development Process Improvement'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-7519494961869767127</id><published>2009-12-24T05:53:00.000-08:00</published><updated>2010-01-11T06:21:23.631-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="custom application development"/><category scheme="http://www.blogger.com/atom/ns#" term="custom software development"/><category scheme="http://www.blogger.com/atom/ns#" term="mapping"/><category scheme="http://www.blogger.com/atom/ns#" term="Software Innovation"/><category scheme="http://www.blogger.com/atom/ns#" term="web 2.0"/><title type='text'>Data Visualization and Web 2.0</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot;   style=&quot;  ;font-family:Arial, Helvetica, sans-serif;font-size:11px;&quot;&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;I love data visualization techniques.  From my early days as a operations data analyst and all of my software development career, finding patterns in data and finding an easy way to convey the pattern through a graph or other visualization has always been fun.  Working on &lt;a href=&quot;http://www.allianceglobalservices.com/services/application-development/custom-business-application-development&quot; style=&quot;outline-style: none; outline-width: initial; outline-color: initial; color: rgb(102, 102, 102); text-decoration: underline; &quot;&gt;custom application development&lt;/a&gt; projects that provided a picture of how the business was doing, where customers were spending, etc is &lt;i&gt;fun&lt;/i&gt;.  Now working with our &lt;a href=&quot;http://www.allianceglobalservices.com/industries/information-services&quot; style=&quot;outline-style: none; outline-width: initial; outline-color: initial; color: rgb(102, 102, 102); text-decoration: underline; &quot;&gt;Business Information Services&lt;/a&gt; clients to help create innovative approaches to information discovery and data analysis is &lt;i&gt;fun&lt;/i&gt;. It really is true that often &quot;a picture is worth 1,000 words.&quot;&lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;I vividly recall a stubborn memory leak my team had been trying to track down for several weeks.  This was a long time ago, in the days of VB6 COM dll&#39;s running inside ASP web pages, and we were pretty sure our code was not leaking.  The team had found memory leaks before, and tracked every single one of them down to circular references in our COM object model so that the automatic release never occurred. Historically, it had been easy to find a leak by running a simple load script, executing each page thousands of time in isolation and watch to see which page shows the memory leak. But not this time.  We had run the load tests several times and never found the leak.  We scanned the code thoroughly.  We added as many &quot;set obj = nothing&quot; safety lines as we could.  But still the production web servers kept leaking memory, and we were forced to move the automatic restarts of the servers from weekly to daily and hope our band-aid would hold.&lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;One day, I had some down time and decided to see if I could find a correlation between the memory used and what pages were invoked on the production system.  An hour or two later, I had pulled all the IIS log files, gotten dumps of memory traces from the systems team and started my analysis.  A bit of awk, grep, Access, and other quick and dirty processes later to pull out the data I wanted, adjust for timezones, aggregate hits to cumulative 15 minute buckets and otherwise line up the datasets and I was ready to plot the data.&lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;&lt;i&gt;Instantly&lt;/i&gt;, the answer of where the leak was was obvious.  The two lines, cumulative hits to a particular URL and memory in use were nearly on top of each other.  The correlation jumped out, completely overwhelming the noise of other URL&#39;s, pages, etc.  This is the power of a good visualization.  (Of course, it turned out that the leak was coming from a web services API proxy URL, not a page in the website that everyone had focused on!  Since the proxy was not &#39;in&#39; the website it had been ignored for weeks as the team hunted for the answer.)&lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt; &lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;Recently, some colleagues and i were discussing what areas Alliance Global Services provides solutions to clients in. This is a pretty broad topic, and we talked about the types of industries we serve (including our focus on &lt;a href=&quot;http://www.allianceglobalservices.com/industries/information-services&quot; style=&quot;outline-style: none; outline-width: initial; outline-color: initial; color: rgb(102, 102, 102); text-decoration: underline; &quot;&gt;Business Information Services&lt;/a&gt;), the geographies we serve (mostly North East US, from about Virginia to Boston), the types of services we provide (&lt;a href=&quot;http://www.allianceglobalservices.com/services/application-development/custom-business-application-development&quot; style=&quot;outline-style: none; outline-width: initial; outline-color: initial; color: rgb(102, 102, 102); text-decoration: underline; &quot;&gt;Custom Software Development&lt;/a&gt;,&lt;a href=&quot;http://www.allianceglobalservices.com/services/strategic-guidance/assessment-services&quot; style=&quot;outline-style: none; outline-width: initial; outline-color: initial; color: rgb(102, 102, 102); text-decoration: underline; &quot;&gt;Application Architecture Analysis&lt;/a&gt;).  And we talked about the easiest way to visualize our coverage areas.&lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;Well, today I had a little downtime before the holidays.  So I took a list of our client locations used some simple geocoding tools, and put together two quick samples of mapping in the Web 2.0 world - one using a Yahoo! map through batchgeocode.com and the other using the Google visualization API.&lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;Batchgeocode.com made it very easy to process the first set of data and create a map but then you were stopped.  Google was a different story - getting the map running required coding, but then I had full control. To see the first map, visit this &lt;a href=&quot;http://www.allianceglobalservices.com/blog/drader/data-visualization-and-web-20&quot;&gt;blog&lt;/a&gt; on Alliance Global Services.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style=&quot;color: rgb(102, 102, 102); margin-top: 5px; margin-right: 0px; margin-bottom: 5px; margin-left: 0px; padding-top: 0px; padding-right: 30px; padding-bottom: 0px; padding-left: 0px; font-size: 11px; &quot;&gt;Obviously it&#39;s not perfect, but lots of fun for a quick afternoon&#39;s work!&lt;/p&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/7519494961869767127/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2009/12/data-visualization-and-web-20.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/7519494961869767127'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/7519494961869767127'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2009/12/data-visualization-and-web-20.html' title='Data Visualization and Web 2.0'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-8334910106770542699</id><published>2009-11-28T05:51:00.000-08:00</published><updated>2009-11-28T05:52:31.871-08:00</updated><title type='text'>10 Steps To Software Development Process Improvement</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 20px; color: rgb(65, 65, 65); font-size: 14px; &quot;&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;I spend a lot of time workingwith customers and talking with colleagues about how to build better software,faster, and cheaper.  Yes, &quot;better, faster, cheaper&quot; is hard,maybe impossible, but boy is it an enticing goal in &lt;a mce_href=&quot;http://www.allianceglobalservices.com/services/application-development&quot; href=&quot;http://www.allianceglobalservices.com/services/application-development&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;custom application development&lt;/a&gt;.  Ourdiscussions often look at various technologies that promise improvements -Silver Bullets. Every few months someone launches a new technology withpromises of huge efficiency gains, and a lot of these do offer productivitygains, after an appropriate learning curve - of course, first the productivityactually drops, as the team learns the new technology, spends time oninfrastructure setup, etc.  The better, smaller options have very easylearning curves and quickly add to overall productivity, but there is always some initial drop before the the benefits begin to accrue. &lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;&lt;img mce_src=&quot;/Portals/30827/images//productivitygraph.png&quot; alt=&quot;&quot; border=&quot;0&quot; hspace=&quot;&quot; vspace=&quot;&quot; align=&quot;center&quot; title=&quot;&quot; src=&quot;http://info.allianceglobalservices.com/Portals/30827/images//productivitygraph.png&quot; style=&quot;border-top-style: none; border-right-style: none; border-bottom-style: none; border-left-style: none; border-width: initial; border-color: initial; border-width: initial; border-color: initial; &quot; /&gt; &lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;We are technologists, and weare always looking for interesting new frameworks, tools, and ideas to improvethe technology we use to deliver our projects.  Whether it is a newautomated static analysis tool, like &lt;a mce_href=&quot;http://www.castsoftware.com/&quot; href=&quot;http://www.castsoftware.com/&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;CAST Software&lt;/a&gt; to help with &lt;a mce_href=&quot;http://www.allianceglobalservices.com/services/strategic-guidance/assessment-services&quot; href=&quot;http://www.allianceglobalservices.com/services/strategic-guidance/assessment-services&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;application architecture analysis&lt;/a&gt; or abetter IDE for &lt;a mce_href=&quot;http://www.allianceglobalservices.com/services/application-development&quot; href=&quot;http://www.allianceglobalservices.com/services/application-development&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;Java application development&lt;/a&gt; (likeIntelliJ) or new testing tools and frameworks to make our &lt;a mce_href=&quot;http://info.allianceglobalservices.com/software-quality-testing/&quot; href=&quot;http://info.allianceglobalservices.com/software-quality-testing/&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;software testing outsourcing&lt;/a&gt; serviceseven better we often get excited about a &quot;shiny new toy&quot; that we canuse to be more productive and deliver better software every day.&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;Of course, these SilverBullets usually turn out the same way - a good tool, with some definitebenefit, but definitely not a game changing advance that will provide aorder-of-magnitude improvement in the quality of software developed.  Themost effective way to improve the the overall software delivered - making itbetter, faster, and cheaper - is to improve the &lt;a mce_href=&quot;http://www.allianceglobalservices.com/rightware&quot; href=&quot;http://www.allianceglobalservices.com/rightware&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;SoftwareDevelopment Process&lt;/a&gt;.  When we sit down to work with clients, weoften talk about a list such as the following as a starting point for ensuringsuccess -- measured in terms of Business Value in the delivered software -- forour projects.&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;1.    Focuson the top 20% of features&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;2.    Breakthings up into smaller projects&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;3.    Noneed for minuscule details&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;4.    Letthe system evolve&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;5.    Obtainuser feedback&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;6.    Empoweryour users&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;7.    Mistakesare a way of learning&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;8.    Lesspeople in meetings&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;9.    Smallerteams&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;10. Somethinghas to give in the Iron Pyramid (Quality, Time, Cost, Features)&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;It&#39;s no surprise that this list closely embodies many of the principles that the Agile development movement espouses.  Agile development concepts are rooted in basic idea of trying to produce more value for an organization.  In software development terms this means better software for the same cost (or faster, or cheaper, or all 3!). By having the business customer prioritize the features in the backlog, showing incremental progress each week or two, and being focused on measuring Running, Tested, Features the investment in software development is always focused on providing the best value for the business customers for the given investment.&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;In future posts I&#39;ll expand each of these topics further. &lt;/p&gt;&lt;div&gt;&lt;span class=&quot;Apple-style-span&quot;  style=&quot;font-size:100%;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: 13px; line-height: 21px;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/8334910106770542699/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2009/11/10-steps-to-software-development.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/8334910106770542699'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/8334910106770542699'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2009/11/10-steps-to-software-development.html' title='10 Steps To Software Development Process Improvement'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-4333575199023701158</id><published>2009-11-14T06:15:00.001-08:00</published><updated>2009-11-14T06:15:52.224-08:00</updated><title type='text'>IntelliJ Open Source -- Good for Java Application Development</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 23px; color: rgb(65, 65, 65); font-size: 14px; &quot;&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;I was excited to see the &lt;a mce_href=&quot;http://blogs.jetbrains.com/idea/2009/10/intellij-idea-open-sourced/&quot; href=&quot;http://blogs.jetbrains.com/idea/2009/10/intellij-idea-open-sourced/&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;announcement &lt;/a&gt;that JetBrains is making the core IntelliJ platform available under an Apache 2.0 Open Source license. IntelliJ is a great IDE, and one of the main ones we use for &lt;a mce_href=&quot;http://www.allianceglobalservices.com/services/application-development&quot; href=&quot;http://www.allianceglobalservices.com/services/application-development&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;Java application development&lt;/a&gt;. Having a community edition that makes the platform available more widely is great and hopefully will enable more developers to take advantage of the great quality checking and productivity tools IntelliJ has.&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;During a recent discussion with a client, we brainstormed ways to customize or add on to the open source IntelliJ platform to improve the &lt;a mce_href=&quot;http://www.allianceglobalservices.com/rightware&quot; href=&quot;http://www.allianceglobalservices.com/rightware&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;software development process&lt;/a&gt; and improve the quality of the code produced.  We quickly came up with a number of ideas for custom facets - templates for common types of classes, custom analysis rules, and specific refactorings for best practices in this particular code base.  All good ideas that could make the &lt;a mce_href=&quot;http://www.allianceglobalservices.com/services/application-development&quot; href=&quot;http://www.allianceglobalservices.com/services/application-development&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;web application development&lt;/a&gt; faster and result in higher quality.  A good win!&lt;/p&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/4333575199023701158/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2009/11/intellij-open-source-good-for-java.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/4333575199023701158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/4333575199023701158'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2009/11/intellij-open-source-good-for-java.html' title='IntelliJ Open Source -- Good for Java Application Development'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-8606670262817327382</id><published>2009-11-14T06:05:00.001-08:00</published><updated>2009-11-14T06:05:42.419-08:00</updated><title type='text'>Application Risk Assessment, Code Quality, and C#</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Verdana, Arial, Helvetica, sans-serif; line-height: 23px; color: rgb(65, 65, 65); font-size: 14px; &quot;&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;I have the opportunity to review and analyze a lot of different application code bases, across a number of difference technology stacks.  Some of these are &lt;a mce_href=&quot;http://www.allianceglobalservices.com/services/application-development&quot; href=&quot;http://www.allianceglobalservices.com/services/application-development&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;custom software applications&lt;/a&gt; that Alliance is building or maintaining for our clients.  Some of these are open source packages we are using in our work.  Others are analyzed for our clients as part of our Application Assessment and &lt;a mce_href=&quot;http://info.allianceglobalservices.com/software-quality-testing/&quot; href=&quot;http://info.allianceglobalservices.com/software-quality-testing/&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;software testing outsourcin&lt;/a&gt;g solution.&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;One of the things that continues to surprise me is the wide variance in code quality.  After seeing so many different applications, created by so many different development teams of different skill levels I&lt;i&gt;know &lt;/i&gt;I shouldn&#39;t be surprised at some of the things that I see.  Every now and then a particular issue jumps out as so obvious, why didn&#39;t the original developers write the code better?&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;One recent example involves a &lt;a mce_href=&quot;http://www.allianceglobalservices.com/services/strategic-guidance/assessment-services&quot; href=&quot;http://www.allianceglobalservices.com/services/strategic-guidance/assessment-services&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;Application Architecture Analysis&lt;/a&gt;we did for a government client using the &lt;a mce_href=&quot;http://www.castsoftware.com/Product/Application-Intelligence-Platform.aspx&quot; href=&quot;http://www.castsoftware.com/Product/Application-Intelligence-Platform.aspx&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;CAST Application Intelligence&lt;/a&gt; tool.  The application was a medium sized .NET web application connecting to an Oracle database.  The application was a port of an existing Powerbuilder desktop app, and exhibited a lot of classic problems with simplistic porting. Each screen in the desktop application was directly mapped to a web screen, without regard for whether the type of navigation and state management - not to mention browser round trips - made sense in a web application.&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;At the start of the engagement, the client identified that they had concerns around the correct handling of database connections. CAST is a great tool for finding problems like this in &lt;a mce_href=&quot;http://www.allianceglobalservices.com/services/application-development&quot; href=&quot;http://www.allianceglobalservices.com/services/application-development&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;custom .NET applications&lt;/a&gt;, as the .NET analyzer is able to identify specific methods in which a database connection is opened but not closed. It&#39;s certainly much faster and more accurate to browse an easy-to-use Dashboard pointing to the exact 18 locations in the 400,000 Lines of Code (400 kLOC) that should be checked rather than trying to manually search ASP.NET pages and code behind files, dozens of VS.NET projects, and hundreds of C# classes, to find the needle in this haystack.&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;After identifying and fixing the specific problems, the database connection leaks were fixed, and the application was able to proceed through user testing.  A perfect quick win for &lt;a mce_href=&quot;http://www.allianceglobalservices.com/services/strategic-guidance/assessment-services&quot; href=&quot;http://www.allianceglobalservices.com/services/strategic-guidance/assessment-services&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;Application Risk Assessment&lt;/a&gt; &amp;amp; Code Quality analysis.&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;One of the surprising (yeah, I know, I &lt;i&gt;shouldn&#39;t &lt;/i&gt;be surprised!) things in this case was that in many parts of the code base the developers had taken advantage of the &quot;using&quot; keyword in C# to automatically perform resource management of the database connection.  This is a much simpler approach than trying to enforce correct usage of finally{} blocks for resource clean up and has been available for several versions and many years.  Yet many developers are not aware of it, and do not use it regularly! This is a simple best practice that would enable higher quality code with less effort and fewer defects.&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;And that means higher productivity. Sounds like an obvious win to me!&lt;/p&gt;&lt;p style=&quot;font-size: 0.9em; line-height: 21px; &quot;&gt;These are the types of best practices we teach to our teams as part of our &lt;a mce_href=&quot;http://www.allianceglobalservices.com/rightware&quot; href=&quot;http://www.allianceglobalservices.com/rightware&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;RightWare &lt;/a&gt;&lt;a mce_href=&quot;http://www.allianceglobalservices.com/rightware&quot; href=&quot;http://www.allianceglobalservices.com/rightware&quot; style=&quot;color: rgb(65, 65, 65); &quot;&gt;Software Development Process&lt;/a&gt;.&lt;/p&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/8606670262817327382/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2009/11/application-risk-assessment-code.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/8606670262817327382'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/8606670262817327382'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2009/11/application-risk-assessment-code.html' title='Application Risk Assessment, Code Quality, and C#'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-7211937643394025121</id><published>2009-11-06T06:50:00.003-08:00</published><updated>2009-11-06T06:50:56.758-08:00</updated><title type='text'>Automation in Software Development</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Times; line-height: 23px; &quot;&gt;&lt;div style=&quot;font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 1em; line-height: 145%; background-color: transparent !important; background-image: none !important; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; &quot;&gt;&lt;p&gt;There are many discussions about productivity and ways to increase quality in software development.  There is no single magic bullet, but by far the most important overall technique I&#39;ve ever seen is to aggressively automate the software development process and overall lifecycle.&lt;/p&gt;&lt;p&gt;This is a broad topic and covers many different specific areas such as automated unit testing that can also serve as the foundation for &lt;a mce_href=&quot;http://www.allianceglobalservices.com/services/return-on-quality/test-Automation&quot; href=&quot;http://www.allianceglobalservices.com/services/return-on-quality/test-Automation&quot;&gt;automated regression testing&lt;/a&gt;. Automation includes the build &amp;amp; deployment process. Automation includes functional testing and acceptance testing. It includes monitoring and error alerting.  It includes code quality analysis and compliance checks. It includes providing self-test harnesses to prove an environment is configured correctly. It can also include automatically generating code or portions of an application as part of the software development process.&lt;/p&gt;&lt;p&gt;Without fail, when we look across our &lt;a mce_href=&quot;http://www.allianceglobalservices.com/services/application-development&quot; href=&quot;http://www.allianceglobalservices.com/services/application-development&quot;&gt;custom application development&lt;/a&gt; projects the ones that have implemented a significant amount of automation are able to deliver more value (in terms of running, tested features) per time or per unit cost than those that have skimped on automation.  This holds across technologies and types of systems and holds across various team sizes.&lt;/p&gt;&lt;p&gt;Why does automation play such a big role in improving Application Quality and Productivity?  It&#39;s fairly simple and relates to key ideas in Lean Development and other &quot;manufacturing&quot; optimization strategies.  Automation enables the whole software development team (including the development engineers, testers, operations, and business sponsors) to focus on adding specific value and avoid waste by:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Eliminating repetitive, low-value tasks - freeing time for knowledge creating work &lt;/li&gt;&lt;li&gt;Lowering QA and bug fixing effort by finding errors sooner through executing test suites more frequently&lt;/li&gt;&lt;li&gt;Enabling more complete test coverage by executing test suites automatically not through brute force&lt;/li&gt;&lt;li&gt;Enabling faster, moge agile, development by providing a robust safety net to catch problems sooner&lt;/li&gt;&lt;li&gt;Eliminating wasted time chasing configuration problems by reliably producing builds and deploying to all environments consistently&lt;/li&gt;&lt;li&gt;Enabling new team members to contribute value sooner by speeding the creation of new environments and providing a framework to show how the system works &lt;/li&gt;&lt;li&gt;Producing higher quality and lower maintenance systems by automating redundant code or module development&lt;/li&gt;&lt;li&gt;Converting time spent on routine monitoring to value-add investigations in to problems&lt;/li&gt;&lt;li&gt;Quickly alerting operations and development support teams to problems with running systems&lt;/li&gt;&lt;/ul&gt;&lt;div&gt;Teams that focus on keeping the unit tests Green, look at their code coverage metrics, and know the current production system performance characteristics can spot problems before customers do.  Teams that continually look for ways to streamline their tasks and ensure that any common process can be done through one command or one click have fewer problems and spend much more of their time building new features rather than solving the same silly problems over and over.  Teams that ensure the basic smoke testing can be run by every engineer every day know that many fewer bugs will creep in to the testing environments and less time will be wasted with back and forth rework. These are the traits of successful teams that provide more value to the business and are truly successful!&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/7211937643394025121/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2009/11/automation-in-software-development.html#comment-form' title='0 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/7211937643394025121'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/7211937643394025121'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2009/11/automation-in-software-development.html' title='Automation in Software Development'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1332797416376256498.post-7130971284461222084</id><published>2009-11-06T06:50:00.001-08:00</published><updated>2009-11-06T06:50:15.292-08:00</updated><title type='text'>Expert Knowledge Model and Custom Application Development</title><content type='html'>&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: Times; line-height: 23px; &quot;&gt;&lt;div style=&quot;font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 1em; line-height: 145%; background-color: transparent !important; background-image: none !important; margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; text-align: left; &quot;&gt;&lt;p&gt;I recently read Andy Hunt&#39;s book &lt;a mce_href=&quot;http://www.pragprog.com/titles/ahptl/pragmatic-thinking-and-learning&quot; href=&quot;http://www.pragprog.com/titles/ahptl/pragmatic-thinking-and-learning&quot;&gt;&quot;Pragmatic Thinking and Learning.&quot;&lt;/a&gt; It&#39;s a very interesting book combining ideas about cognitive science, management, software development, and personal development.  (It&#39;s also well written and fun to read)&lt;/p&gt;&lt;p&gt;The 2nd chapter discusses the Dreyfus skill model, and the &quot;Journey from Novice to Expert&quot; along five stages of skill development.  This is relevant for any skill, but especially for technical skills requiring years of practice to achieve a suitable level of mastery.  Certainly different people are capable of learning at different rates, and some people are able to actively learn and apply new concepts while others seem to repeat the exercise but not learn the concept (the classic interviewing criteria of actually having 10-years of experience, rather than 1-year of experience 10 times over), but overall when looking at a community or organization (or team) recognizing the different skill levels and capabilities associated with them is critical.&lt;/p&gt;&lt;p&gt;For instance, many agile teams have individual developers designing the implementation for a specific user story (or more accurately, a task as part of a user story).  By recognizing that a particular developer may be a Novice and a different team member may be Proficient the team can change the dynamic around the design effort when these two are paired together.  The Proficient team member can act as a mentor for the Novice, more carefully reviewing and enhancing any designs the Novice developer creates and fully explaining any designs the Proficient developer creates as a teaching exercise.  This enables the peer review process to work as both a technical review exercise and as a learning process. Similarly, the team may recognize that it does not make sense for a Novice developer to peer review an architecture that is created by the Expert member of the team - it would be more appropriate for someone who is Competent or Proficient to peer review, as they will more easily understand the design and be able to more easily offer suggestions to improve the design rather than feeling overwhelmed or lost when reviewing the design.&lt;/p&gt;&lt;p&gt;Additionally, when establishing the engineering practices for a &lt;a mce_href=&quot;http://www.allianceglobalservices.com/services/application-development&quot; href=&quot;http://www.allianceglobalservices.com/services/application-development&quot;&gt;custom application development&lt;/a&gt; effort, a team of all Novices or even mostly Advanced Beginners should not be expected to realize the best approach to continuous integration, automated unit testing, and test coverage. A more knowledgeable mentor should help the team implement the best practices, teaching as they go, but insisting on the appropriate integration and automation techniques to ensure high quality. &lt;/p&gt;&lt;p&gt;And of course, the skill model applies equally to the technical and business domain aspects.  It is important for both the individual developers, managers, testers, and architects to realize that although they might be Expert at their technical craft, they may be Novices in the &lt;a mce_href=&quot;http://info.allianceglobalservices.com/blogs/software-innovation/bid/20859/Importance-of-Business-Domain-Understanding&quot; href=&quot;http://info.allianceglobalservices.com/blogs/software-innovation/bid/20859/Importance-of-Business-Domain-Understanding&quot;&gt;business domain&lt;/a&gt; of their current application. Once this realization occurs, the team members should seek out additional information on the business domain - through web sites, books, the Product Owner or business sponsor, or other more knowledgeable members of their organization.  This type of self realization that you &quot;know what you don&#39;t know&quot; is a key step towards ensuring you are always delivering high quality, useful,&lt;i&gt;valuable&lt;/i&gt; software.&lt;/p&gt;&lt;/div&gt;&lt;/span&gt;</content><link rel='replies' type='application/atom+xml' href='http://davidrader.blogspot.com/feeds/7130971284461222084/comments/default' title='Post Comments'/><link rel='replies' type='text/html' href='http://davidrader.blogspot.com/2009/11/expert-knowledge-model-and-custom.html#comment-form' title='2 Comments'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/7130971284461222084'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1332797416376256498/posts/default/7130971284461222084'/><link rel='alternate' type='text/html' href='http://davidrader.blogspot.com/2009/11/expert-knowledge-model-and-custom.html' title='Expert Knowledge Model and Custom Application Development'/><author><name>David Rader</name><uri>http://www.blogger.com/profile/09532084936974010082</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='25' height='32' src='//blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjGZbnyMY7uodb6hsjJH8Q3DLTggTDa2VDfuiTn9y7EtY_jxMJsot7-5KNwZx-JFV9GQPkekSrAH4BDevN867TiREgiF_GVOYEcpTqXPdxgmWNA-cfKNX6TE-8KQR9Y4a4/s220/Rader-02.jpg'/></author><thr:total>2</thr:total></entry></feed>