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

<channel>
	<title>NetQuarry &#187; Product</title>
	<atom:link href="http://www.netquarry.com/index.php/tag/product/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.netquarry.com</link>
	<description>The Enterprise Application Platform</description>
	<lastBuildDate>Wed, 21 Apr 2010 18:30:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Are we there yet?</title>
		<link>http://www.netquarry.com/index.php/2007/09/are-we-there-yet-1020/</link>
		<comments>http://www.netquarry.com/index.php/2007/09/are-we-there-yet-1020/#comments</comments>
		<pubDate>Tue, 04 Sep 2007 01:25:17 +0000</pubDate>
		<dc:creator>Ryan Reid</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Features]]></category>
		<category><![CDATA[Product]]></category>

		<guid isPermaLink="false">http://www.netquarry.com/?p=20</guid>
		<description><![CDATA[The thing that always surprises us is the fact that we have to do much of what we have to do to produce our product. The complexity of enterprise application development is startling. You basically need to be an expert on about 10 things just to get started.]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve been absorbed lately with the nagging question that keeps coming up every time I solve what I <em>thought</em> was going to be a simple problem &#8211; &#8220;Are we the only ones doing this?&#8221; This is followed by the more important question &#8211; &#8220;How is everyone else doing this?&#8221; At NetQuarry, we sell, effectively, answers to these questions. The problem, and the thing that always suprises me is the fact that we have to do much of what we have to do to produce our product. The complexity of enterprise application development is startling. You basically need to be an expert on about 10 things just to get started.</p>
<p>I&#8217;ve been personally involved in an enterprise architecture project for a well funded valley company (it was J2EE, to be fair) that had 100 people (including QA, Docs, and a <em>bunch</em> of managers) working for 2 years to implement an enterprise application architecture. We spent nearly 40 million dollars (seriously) on development. I&#8217;ve spoken to CTOs at software companies (ISVs) who are solving this and have arrived at the conclusion that nobody knows exactly where to start.</p>
<p>Most people in my position would roughly agree with me, at least in principle, but most would have a hard time citing real examples of why this is so hard. So, here are some examples:</p>
<p><strong>Simple example first &#8211; permissions. </strong></p>
<p>When you build an application of any reasonable complexity, you will have to architect and <em>implement</em> a way to authenticate users, retrieve a set of profiles (groups), and restrict access to parts of an application based on who the user is and which profiles have been assigned to them. How could you accomplish this? There are a ton of ideas out there. There is an idea of a database directory that .NET will build for you in SQL Server. There is a decent way to hook in Microsoft Passport authentication. There is a user/password/reset password control. There is the &#8220;forms based authentication&#8221; that takes a real time investment to understand and once you do you wish you hadn&#8217;t. What doesn&#8217;t exist anywhere is a reasonable way to consume the information you get from your authenticated users.</p>
<p>What also <em>doesn&#8217;t </em>exist (and this is the important bit) is a way for you to <em>declaratively </em>hide a column in a grid based on which user just logged in. Hold on, I&#8217;m going to explain.</p>
<p>Say I have a column in my DataView grid (say a salary column) that I only want users with the Administration Profile to see. Further, I want to define this by checking a little box somewhere that says &#8220;Hide from general users, please.&#8221; Then, I want that information stored in some persistent format that allows me to <strong>check it into source control</strong>. Asking too much? You might say this is easy. All you have to do is&#8230; build a file that holds the data, or put the data in a database (this sort of discussion ends relationships), write a little tool that edits the file or just screw with it yourself, store this file in source code, add it to your installation script, build a tool to change it inside your application (which you need to secure as well), copy it to the server before you go live, &#8230; Crazy.</p>
<p><strong>Another example  - filtering</strong></p>
<p>The .NET Framework and Visual Studio, along with the competition (J2EE, and the slew of tools available here) has a way to take data out of a database and present it in a grid. Generally there is a way to handle sorting, paging, hiding columns, and, of course, applying some sort of theme. However, what if you want to filter the list in some way? Simple, right? All you do is build another set of controls on the form for each column that you want to use in your filter. Some of the columns are foreign keys to other tables, so you&#8217;ll want to build some sort of interface to deal with these. Many of your foreign keys are really just lookup values, so you&#8217;ll want a way to build a DropDownList control with these values in it. Next, you&#8217;ll have to take the result of a postback on this form, determine if it has to do with your filter controls, and construct some sort of SQL filter for your database and re-display your list. If your users want to be able to filter on <em>multiple</em> values, well, then, its a bit harder. You&#8217;ll need either a new interface, or you&#8217;ll have to handle filters like: &#8220;BETWEEN x AND y&#8221; or &#8220;This Month&#8221; or &#8220;&gt;Today&#8221; or &#8220;=FRED&#8221; or &#8220;Starts With Fred&#8221; and likely a bunch of others.</p>
<p>The kicker &#8211; you have to do this with <strong>every </strong>grid. You&#8217;ll probably get clever and build a base class that reads information from the DataSource and builds some filtering capabilities. Once you&#8217;ve done this, you&#8217;ll think its pretty easy. Honestly, though, a full featured grid view with good filtering (forget about column wise permissions) is a bunch of work. Even if you are pretty good at this you&#8217;ll still have the problem of managing the thousands of foreign key lists. (Much more on this idea <a href="http://www.netquarry.com/?p=50">here</a>.) And, each one is just a little different. So, you probably end up with a bunch of pages all with slightly different code in them to change the properties of the particular page you are working with. At least you can check these into source control.</p>
<p><strong>Meaning?</strong></p>
<p>Enterprise application development is hard, really hard. Any way you look at it, you absolutely must solve most of these problems, even if you solve them poorly. Generally this is done by giving your Highly Paid talent the title of Architect and asking them to guide you through this process. If you are smart you&#8217;ll get two of these smart folks, because one smart guy alone will always come up with dumb ideas. If he is working by himself then you&#8217;ll usually end up implementing some of these ideas. Loosely quoting Brian DePalma &#8211; &#8220;Every time you think up a perfect architecture there are 50 ways to screw it up. If you think of 25 of them, you&#8217;re a genius.&#8221;</p>
<p>The solution always looks about like this:</p>
<ol>
<li>Hire 1 or 2 expensive people and let them think for 3-6 months.</li>
<li>Add a productive resource and start writing a low-level database access class library that wraps ADO.NET. or JDBC. This puts you 6-9 months into the project.</li>
<li>Add another productive resource and build a reasonable grid, detail view, and a simple navigation metaphor. You are at least 9 months into the task now.</li>
<li>Frantically add a bunch of not so productive (read, cheap) resources and tell them you are behind. Sometimes you send your application to India, China, or Iowa at this point.</li>
<li>Scramble for another 6 months or so until you begin slashing features as fast as you can.</li>
<li>Release your first version 18 months from the start of your project to resounding cries of disappointment and astonishment from your user base.</li>
</ol>
<p>This isn&#8217;t just me talking. There are well known research reports from respected analysts that assure us that more enterprise projects fail than don&#8217;t. Below, from <a href="http://www.softwaremag.com/L.cfm?Doc=newsletter/2004-01-15/Standish">Software Magazine</a>, a blurb on the Standish CHAOS report:</p>
<blockquote><p><em>&#8220;The 10th edition of the annual CHAOS report from The Standish Group, which researches the reasons for IT project failure in the United States, indicates that project success rates have increased to 34 percent of all projects. That’s more than a 100-percent improvement from the success rate found in the first study in 1994.&#8221;</em></p></blockquote>
<p>So, we&#8217;re getting better. Only 66% fail. I&#8217;m not suggesting that poor architecture implementation is the only reason projects fail. I&#8217;m betting that it isn&#8217;t even the leading <em>direct</em> cause. But I do know who gets blamed when the project doesn&#8217;t go correctly &#8211; the Highly Paid developers. And, I believe it isn&#8217;t necessary.</p>
<p><strong>Why hasn&#8217;t this been solved?</strong></p>
<p>I believe that eventually Microsoft will introduce enterprise infrastructure to the .NET Framework that solves a good chunk of this problem. What they have done so far is give us the <a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnpag2/html/entlib2.asp">Enterprise Library</a>, which solves some real problems, but is still, as its name suggests, a <em>library. </em>You&#8217;ll still need an implementation of an architecture <em>using</em> this library before you can start your application. Why the Enterprise Library isn&#8217;t directly part of .NET is another question. I <em>love </em>this quote:</p>
<blockquote><p><em>&#8220;Enterprise Library is a guidance offering, designed to be reused, customized, and extended. It is not a Microsoft product.&#8221;</em></p></blockquote>
<p>So, why hasn&#8217;t Microsoft solved this yet? I think they don&#8217;t want to offend anyone. When one implements an architecture you have to make choices that will cause concern and questions from almost any of the consumers. Where is the application metadata stored &#8211; relational database or the file system? Is the object mapping strictly typed or not? What is the external access strategy &#8211; Web Services? What about authentication? Permissions? Data Permissions? Deployment? Testing? Localization? Internationalization?</p>
<p>The other reason there isn&#8217;t any cohesive strategy around an implementation of an enterprise architecture is because there are a lot of people that get paid a lot of money who are pretty interested in continuing to get paid to design and implement terrible applications. If I had a choice between a year getting paid $200 (or more) an hour or simply using an available solution, it would be a simple choice.</p>
<p>The other problem is that depending on the group of people you are talking to, many are convinced that this problem can be solved by <em>using the right tools or selecting the correct grid control</em>. Really. I&#8217;ve spoken to presumably smart people who have told me that the problem with enterprise development is simply management process. This is generally followed by a conversation with someone who <em>knows</em> that if you would simply get the requirements right nothing would go wrong. Next, I&#8217;ll speak to an Architect who has landed on a architecture that is, in its entirety, .NET. And, of course, you can throw a rock and hit someone who believes that the answer is UML. The worst, of course, is this: &#8220;we&#8217;re using SOA.&#8221;</p>
<p><strong>I-got-a-good-idea</strong></p>
<p>NetQuarry is an <em>enterprise </em>application platform (for Microsoft .NET). What this means is that we have a layer of runtime code that reads a definition of your application at runtime and produces an ISV quality web-based application. The definition includes references to code that you write (extensions), profiles you declare, schema that you design, and presentation that you build. Much of the definition is built using our tooling (NetQuarry Studio). When you write your code you use Visual Studio, we&#8217;re not in the IDE business. <a href="http://www.netquarry.com/?page_id=7"> Read more here</a>.</p>
<p>The important point to understand about NetQuarry is that it is <em>both</em> an architecture and <em>an implementation </em>of an architecture. It is also important to understand what it is not. It is <strong>not</strong> a code generator and it is most decidedly <strong>not </strong>a framework.</p>
<p>We also think that the real promise of NetQuarry isn&#8217;t simply an architecture <em>with implementation</em>, but rather what you might do with this implementation once it becomes generally available. The largest idea is the concept of application content. What I mean by this is the availability of functional application parts that can be deployed into a platform (like NetQuarry). Real application assembly. Salesforce.com has done something like this with <a href="http://www.salesforce.com/developer/">AppExchange.</a> I like AppExchange but of course I can&#8217;t see how I&#8217;d use this to create <a href="http://www.optionease.com">OptionEase</a>, <a href="http://www.diforza.com/">DiForza</a>, or <a href="http://www.iluxcars.com/">iLUXCARS</a>. For these sorts of applications I have to build it myself. So, the content parts should be a bit less coupled with the application, which is hard, but possible, again, once we have a real implementation of a platform.</p>
<p>If you are interested in the NetQuarry platform or what you might be able to do with it please feel free to contact us: <a href="mailto:info@netquarry.com">info@netquarry.com</a>.</p>
<p>Ryan</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netquarry.com/index.php/2007/09/are-we-there-yet-1020/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>VisualBasic</title>
		<link>http://www.netquarry.com/index.php/2006/09/visualbasic-1037/</link>
		<comments>http://www.netquarry.com/index.php/2006/09/visualbasic-1037/#comments</comments>
		<pubDate>Thu, 14 Sep 2006 02:20:28 +0000</pubDate>
		<dc:creator>Ryan Reid</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[Code]]></category>
		<category><![CDATA[Legacy]]></category>
		<category><![CDATA[Product]]></category>
		<category><![CDATA[Rant]]></category>
		<category><![CDATA[Visual Basic]]></category>

		<guid isPermaLink="false">http://www.netquarry.com/?p=37</guid>
		<description><![CDATA[It occurs to me, and not just because we write and sell a .NET product, that a good number of owners of large VB 6.0 applications are about to become a little nervous. As part of a proposal for one of these companies, I was tracking down the support dates and end-of-life statements by Microsoft about VB 6.0. It says, basically, that the Visual Basic runtime (or an updated version) will ship will Windows Vista and will be supported fully for 5 years, and not so fully for 5 more years after that.]]></description>
			<content:encoded><![CDATA[<p>It occurs to me, and not just because we write and sell a .NET product, that a good number of owners of large VB 6.0 applications are about to become a little nervous. As part of a proposal for one of these companies, I was tracking down the support dates and end-of-life statements by Microsoft about VB 6.0. It says, basically, that the Visual Basic runtime (or an updated version) will ship will Windows Vista and will be supported fully for 5 years, and not so fully for 5 more years after that.</p>
<p>The actual support of Visual Basic and Visual Studio 6.0 (in which VB 6.0 shipped) is over now. This sort of surprised me. I assumed that Microsoft would continue to support VB more or less forever, silly as that may sound. The actual dates for &#8220;support&#8221; are here: <a href="http://support.microsoft.com/lifecycle/search/?sort=PNα=Visual+Basic+6.0">Visual Basic Product Lifecycle</a>, and this says that real support ended 3/31/2005, and extended support will last until 4/8/2008.</p>
<p>I was a <em>long</em> time Visual Basic user &#8212; our last product used it as the extension language &#8212; and if I had a large VB 6.0 application, I would probably worry. I&#8217;m pretty sure that many VB 6.0 applications will continue to run. I&#8217;m also pretty sure that if they didn&#8217;t, and if they were mission critical, most enterprises would be able to find someone to tweak their application so that it would continue correctly.</p>
<p>What <em>would</em> worry me is less concrete. If you manage or develop an important product for a large enterprise and the language that the application was written in was out of official support, I&#8217;d start thinking that maybe it was time to think about a port. Why? If nothing else because anything large enough to worry about is likely to take until April of 2008 to get ported.</p>
<p>All of this is a somewhat shameless pitch for NetQuarry, of course. Actually, I don&#8217;t see how one would begin a reasonable port of a large Visual Basic application without at least the start of the infrastructure that we provide. Many of these applications are <strong>huge</strong> &#8212; e.g. 1000s of pages, tables, and complex rules. Most of the folks who built and probably deeply understand the application are off on other projects (presumably in a more modern language).</p>
]]></content:encoded>
			<wfw:commentRss>http://www.netquarry.com/index.php/2006/09/visualbasic-1037/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
