{"id":72,"date":"2008-11-27T06:51:42","date_gmt":"2008-11-27T06:51:42","guid":{"rendered":"http:\/\/blog.wholetomato.com\/?p=72"},"modified":"2014-05-21T19:17:57","modified_gmt":"2014-05-21T19:17:57","slug":"recursive-products","status":"publish","type":"post","link":"https:\/\/www.wholetomato.com\/blog\/recursive-products\/","title":{"rendered":"Recursive Products"},"content":{"rendered":"<p>One of my first tasks at Whole Tomato was to do some code cleanup in the name of learning the Visual Assist codebase.\u00a0 After just a few <a href=\"http:\/\/www.wholetomato.com\/products\/features\/findReferences.asp\">Find References<\/a>, <a href=\"http:\/\/www.wholetomato.com\/products\/features\/rename.asp\">Renames<\/a>, and <a href=\"http:\/\/www.wholetomato.com\/products\/features\/goto.asp\">Goto Definitions<\/a>, I realized the recursive nature of this product:\u00a0 I was using VA to learn VA.\u00a0 I was using VA to refactor VA&#8217;s refactoring code.\u00a0 I was even using the codebase as a test suite for itself.<\/p>\n<p>Most products aren&#8217;t like this.\u00a0 Clearly other development tools, IDEs and compilers fall into this category.\u00a0 And perhaps source control and bug tracking tools qualify, although more indirectly.\u00a0 But outside of software, I have trouble thinking of similar examples.\u00a0 Manufacturing?\u00a0 Chemical reactions?\u00a0 Books about making books?<\/p>\n<p>What other companies use their own product in the direct production of that very product?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>One of my first tasks at Whole Tomato was to do some code cleanup in the name of learning the Visual Assist codebase.\u00a0 After just a few Find References, Renames, and Goto Definitions, I realized&#8230;<\/p>\n","protected":false},"author":980745,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_newsletter_tier_id":0,"footnotes":"","jetpack_publicize_message":"","jetpack_is_tweetstorm":false,"jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":false,"jetpack_social_options":{"image_generator_settings":{"template":"highway","enabled":false}}},"categories":[2514],"tags":[],"class_list":["post-72","post","type-post","status-publish","format-standard","hentry","category-archive"],"jetpack_publicize_connections":[],"aioseo_notices":[],"jetpack_featured_media_url":"","jetpack_likes_enabled":true,"jetpack_sharing_enabled":false,"jetpack_shortlink":"https:\/\/wp.me\/pfpLS4-1a","aioseo_head":"\n\t\t<!-- All in One SEO Pro 4.9.6.2 - aioseo.com -->\n\t<meta name=\"description\" content=\"One of my first tasks at Whole Tomato was to do some code cleanup in the name of learning the Visual Assist codebase. After just a few Find References, Renames, and Goto Definitions, I realized the recursive nature of this product: I was using VA to learn VA. I was using VA to refactor VA&#039;s\" \/>\n\t<meta name=\"robots\" content=\"max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n\t<meta name=\"google-site-verification\" content=\"DtHrwoEjg0KG_fbuPSp5j_wNIf-g5hSh4EH6tZBoCIw\" \/>\n\t<link rel=\"canonical\" href=\"https:\/\/www.wholetomato.com\/blog\/recursive-products\/\" \/>\n\t<meta name=\"generator\" content=\"All in One SEO Pro (AIOSEO) 4.9.6.2\" \/>\n\t\t<meta property=\"og:locale\" content=\"en_US\" \/>\n\t\t<meta property=\"og:site_name\" content=\"Tomato Soup - Visual Assist Team Blog\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"Recursive Products - Tomato Soup\" \/>\n\t\t<meta property=\"og:description\" content=\"One of my first tasks at Whole Tomato was to do some code cleanup in the name of learning the Visual Assist codebase. After just a few Find References, Renames, and Goto Definitions, I realized the recursive nature of this product: I was using VA to learn VA. I was using VA to refactor VA&#039;s\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/www.wholetomato.com\/blog\/recursive-products\/\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2008-11-27T06:51:42+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2014-05-21T19:17:57+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/wholetomatosoftware\" \/>\n\t\t<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n\t\t<meta name=\"twitter:site\" content=\"@visualassist\" \/>\n\t\t<meta name=\"twitter:title\" content=\"Recursive Products - Tomato Soup\" \/>\n\t\t<meta name=\"twitter:description\" content=\"One of my first tasks at Whole Tomato was to do some code cleanup in the name of learning the Visual Assist codebase. After just a few Find References, Renames, and Goto Definitions, I realized the recursive nature of this product: I was using VA to learn VA. I was using VA to refactor VA&#039;s\" \/>\n\t\t<meta name=\"twitter:creator\" content=\"@visualassist\" \/>\n\t\t<script type=\"application\/ld+json\" class=\"aioseo-schema\">\n\t\t\t{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"BlogPosting\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/recursive-products\\\/#blogposting\",\"name\":\"Recursive Products - Tomato Soup\",\"headline\":\"Recursive Products\",\"author\":{\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/author\\\/#author\"},\"publisher\":{\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/#organization\"},\"image\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/www.wholetomato.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/wt-logo.jpg?fit=400%2C400&ssl=1\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/#articleImage\",\"width\":400,\"height\":400},\"datePublished\":\"2008-11-27T06:51:42-04:00\",\"dateModified\":\"2014-05-21T19:17:57-04:00\",\"inLanguage\":\"en-US\",\"commentCount\":2,\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/recursive-products\\\/#webpage\"},\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/recursive-products\\\/#webpage\"},\"articleSection\":\"~Archive, English\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/recursive-products\\\/#breadcrumblist\",\"itemListElement\":[{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog#listItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/category\\\/archive\\\/#listItem\",\"name\":\"~Archive\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/category\\\/archive\\\/#listItem\",\"position\":2,\"name\":\"~Archive\",\"item\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/category\\\/archive\\\/\",\"nextItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/recursive-products\\\/#listItem\",\"name\":\"Recursive Products\"},\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog#listItem\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/recursive-products\\\/#listItem\",\"position\":3,\"name\":\"Recursive Products\",\"previousItem\":{\"@type\":\"ListItem\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/category\\\/archive\\\/#listItem\",\"name\":\"~Archive\"}}]},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/#organization\",\"name\":\"Tomato Soup\",\"description\":\"Visual Assist Team Blog\",\"url\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/\",\"email\":\"info@wholetomato.com\",\"numberOfEmployees\":{\"@type\":\"QuantitativeValue\",\"minValue\":0,\"maxValue\":100},\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/www.wholetomato.com\\\/blog\\\/wp-content\\\/uploads\\\/2020\\\/05\\\/wt-logo.jpg?fit=400%2C400&ssl=1\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/recursive-products\\\/#organizationLogo\",\"width\":400,\"height\":400},\"image\":{\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/recursive-products\\\/#organizationLogo\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/wholetomatosoftware\",\"https:\\\/\\\/twitter.com\\\/visualassist\",\"https:\\\/\\\/www.youtube.com\\\/c\\\/Wholetomatosoftware\",\"https:\\\/\\\/www.linkedin.com\\\/company\\\/whole-tomato-software\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/author\\\/#author\",\"url\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/author\\\/\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/recursive-products\\\/#webpage\",\"url\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/recursive-products\\\/\",\"name\":\"Recursive Products - Tomato Soup\",\"description\":\"One of my first tasks at Whole Tomato was to do some code cleanup in the name of learning the Visual Assist codebase. After just a few Find References, Renames, and Goto Definitions, I realized the recursive nature of this product: I was using VA to learn VA. I was using VA to refactor VA's\",\"inLanguage\":\"en-US\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/#website\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/recursive-products\\\/#breadcrumblist\"},\"author\":{\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/author\\\/#author\"},\"creator\":{\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/author\\\/#author\"},\"datePublished\":\"2008-11-27T06:51:42-04:00\",\"dateModified\":\"2014-05-21T19:17:57-04:00\"},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/\",\"name\":\"Tomato Soup\",\"description\":\"Visual Assist Team Blog\",\"inLanguage\":\"en-US\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.wholetomato.com\\\/blog\\\/#organization\"}}]}\n\t\t<\/script>\n\t\t<!-- All in One SEO Pro -->\r\n\t\t<title>Recursive Products - Tomato Soup<\/title>\n\n","aioseo_head_json":{"title":"Recursive Products - Tomato Soup","description":"One of my first tasks at Whole Tomato was to do some code cleanup in the name of learning the Visual Assist codebase. After just a few Find References, Renames, and Goto Definitions, I realized the recursive nature of this product: I was using VA to learn VA. I was using VA to refactor VA's","canonical_url":"https:\/\/www.wholetomato.com\/blog\/recursive-products\/","robots":"max-snippet:-1, max-image-preview:large, max-video-preview:-1","keywords":"","webmasterTools":{"google-site-verification":"DtHrwoEjg0KG_fbuPSp5j_wNIf-g5hSh4EH6tZBoCIw","miscellaneous":""},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"BlogPosting","@id":"https:\/\/www.wholetomato.com\/blog\/recursive-products\/#blogposting","name":"Recursive Products - Tomato Soup","headline":"Recursive Products","author":{"@id":"https:\/\/www.wholetomato.com\/blog\/author\/#author"},"publisher":{"@id":"https:\/\/www.wholetomato.com\/blog\/#organization"},"image":{"@type":"ImageObject","url":"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/05\/wt-logo.jpg?fit=400%2C400&ssl=1","@id":"https:\/\/www.wholetomato.com\/blog\/#articleImage","width":400,"height":400},"datePublished":"2008-11-27T06:51:42-04:00","dateModified":"2014-05-21T19:17:57-04:00","inLanguage":"en-US","commentCount":2,"mainEntityOfPage":{"@id":"https:\/\/www.wholetomato.com\/blog\/recursive-products\/#webpage"},"isPartOf":{"@id":"https:\/\/www.wholetomato.com\/blog\/recursive-products\/#webpage"},"articleSection":"~Archive, English"},{"@type":"BreadcrumbList","@id":"https:\/\/www.wholetomato.com\/blog\/recursive-products\/#breadcrumblist","itemListElement":[{"@type":"ListItem","@id":"https:\/\/www.wholetomato.com\/blog#listItem","position":1,"name":"Home","item":"https:\/\/www.wholetomato.com\/blog","nextItem":{"@type":"ListItem","@id":"https:\/\/www.wholetomato.com\/blog\/category\/archive\/#listItem","name":"~Archive"}},{"@type":"ListItem","@id":"https:\/\/www.wholetomato.com\/blog\/category\/archive\/#listItem","position":2,"name":"~Archive","item":"https:\/\/www.wholetomato.com\/blog\/category\/archive\/","nextItem":{"@type":"ListItem","@id":"https:\/\/www.wholetomato.com\/blog\/recursive-products\/#listItem","name":"Recursive Products"},"previousItem":{"@type":"ListItem","@id":"https:\/\/www.wholetomato.com\/blog#listItem","name":"Home"}},{"@type":"ListItem","@id":"https:\/\/www.wholetomato.com\/blog\/recursive-products\/#listItem","position":3,"name":"Recursive Products","previousItem":{"@type":"ListItem","@id":"https:\/\/www.wholetomato.com\/blog\/category\/archive\/#listItem","name":"~Archive"}}]},{"@type":"Organization","@id":"https:\/\/www.wholetomato.com\/blog\/#organization","name":"Tomato Soup","description":"Visual Assist Team Blog","url":"https:\/\/www.wholetomato.com\/blog\/","email":"info@wholetomato.com","numberOfEmployees":{"@type":"QuantitativeValue","minValue":0,"maxValue":100},"logo":{"@type":"ImageObject","url":"https:\/\/i0.wp.com\/www.wholetomato.com\/blog\/wp-content\/uploads\/2020\/05\/wt-logo.jpg?fit=400%2C400&ssl=1","@id":"https:\/\/www.wholetomato.com\/blog\/recursive-products\/#organizationLogo","width":400,"height":400},"image":{"@id":"https:\/\/www.wholetomato.com\/blog\/recursive-products\/#organizationLogo"},"sameAs":["https:\/\/www.facebook.com\/wholetomatosoftware","https:\/\/twitter.com\/visualassist","https:\/\/www.youtube.com\/c\/Wholetomatosoftware","https:\/\/www.linkedin.com\/company\/whole-tomato-software"]},{"@type":"Person","@id":"https:\/\/www.wholetomato.com\/blog\/author\/#author","url":"https:\/\/www.wholetomato.com\/blog\/author\/"},{"@type":"WebPage","@id":"https:\/\/www.wholetomato.com\/blog\/recursive-products\/#webpage","url":"https:\/\/www.wholetomato.com\/blog\/recursive-products\/","name":"Recursive Products - Tomato Soup","description":"One of my first tasks at Whole Tomato was to do some code cleanup in the name of learning the Visual Assist codebase. After just a few Find References, Renames, and Goto Definitions, I realized the recursive nature of this product: I was using VA to learn VA. I was using VA to refactor VA's","inLanguage":"en-US","isPartOf":{"@id":"https:\/\/www.wholetomato.com\/blog\/#website"},"breadcrumb":{"@id":"https:\/\/www.wholetomato.com\/blog\/recursive-products\/#breadcrumblist"},"author":{"@id":"https:\/\/www.wholetomato.com\/blog\/author\/#author"},"creator":{"@id":"https:\/\/www.wholetomato.com\/blog\/author\/#author"},"datePublished":"2008-11-27T06:51:42-04:00","dateModified":"2014-05-21T19:17:57-04:00"},{"@type":"WebSite","@id":"https:\/\/www.wholetomato.com\/blog\/#website","url":"https:\/\/www.wholetomato.com\/blog\/","name":"Tomato Soup","description":"Visual Assist Team Blog","inLanguage":"en-US","publisher":{"@id":"https:\/\/www.wholetomato.com\/blog\/#organization"}}]},"og:locale":"en_US","og:site_name":"Tomato Soup - Visual Assist Team Blog","og:type":"article","og:title":"Recursive Products - Tomato Soup","og:description":"One of my first tasks at Whole Tomato was to do some code cleanup in the name of learning the Visual Assist codebase. After just a few Find References, Renames, and Goto Definitions, I realized the recursive nature of this product: I was using VA to learn VA. I was using VA to refactor VA's","og:url":"https:\/\/www.wholetomato.com\/blog\/recursive-products\/","article:published_time":"2008-11-27T06:51:42+00:00","article:modified_time":"2014-05-21T19:17:57+00:00","article:publisher":"https:\/\/www.facebook.com\/wholetomatosoftware","twitter:card":"summary_large_image","twitter:site":"@visualassist","twitter:title":"Recursive Products - Tomato Soup","twitter:description":"One of my first tasks at Whole Tomato was to do some code cleanup in the name of learning the Visual Assist codebase. After just a few Find References, Renames, and Goto Definitions, I realized the recursive nature of this product: I was using VA to learn VA. I was using VA to refactor VA's","twitter:creator":"@visualassist"},"aioseo_meta_data":{"post_id":"72","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"BlogPosting","isEnabled":true},"graphs":[]},"schema_type":"default","schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":null,"breadcrumb_settings":null,"limit_modified_date":false,"open_ai":null,"ai":null,"created":"2022-02-02 22:39:32","updated":"2025-10-21 22:37:04"},"aioseo_breadcrumb":"<div class=\"aioseo-breadcrumbs\"><span class=\"aioseo-breadcrumb\">\n\t<a href=\"https:\/\/www.wholetomato.com\/blog\" title=\"Home\">Home<\/a>\n<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\t<a href=\"https:\/\/www.wholetomato.com\/blog\/category\/archive\/\" title=\"~Archive\">~Archive<\/a>\n<\/span><span class=\"aioseo-breadcrumb-separator\">\u00bb<\/span><span class=\"aioseo-breadcrumb\">\n\tRecursive Products\n<\/span><\/div>","aioseo_breadcrumb_json":[{"label":"Home","link":"https:\/\/www.wholetomato.com\/blog"},{"label":"~Archive","link":"https:\/\/www.wholetomato.com\/blog\/category\/archive\/"},{"label":"Recursive Products","link":"https:\/\/www.wholetomato.com\/blog\/recursive-products\/"}],"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/posts\/72","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/users\/980745"}],"replies":[{"embeddable":true,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/comments?post=72"}],"version-history":[{"count":5,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/posts\/72\/revisions"}],"predecessor-version":[{"id":111,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/posts\/72\/revisions\/111"}],"wp:attachment":[{"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/media?parent=72"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/categories?post=72"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.wholetomato.com\/blog\/wp-json\/wp\/v2\/tags?post=72"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}