<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Agile on Architecture and Data Blog</title>
    <link>https://sadalage.com/tags/agile/</link>
    <description>Recent content in Agile on Architecture and Data Blog</description>
    <generator>Hugo</generator>
    <language>en-us</language>
    <lastBuildDate>Tue, 23 Sep 2025 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://sadalage.com/tags/agile/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Automated testing of custom sql</title>
      <link>https://sadalage.com/post/automated_custom_sql_testing/</link>
      <pubDate>Tue, 23 Sep 2025 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/automated_custom_sql_testing/</guid>
      <description>&lt;p&gt;Lots of time hand coded SQL is written in the applications for performance sake, getting data using complex SQL out of the tables. As the database structure changes it becomes really hard to find out all the SQL that needs to be changed. In other cases SQL is generated based on certain conditions in the code and its hard to find if the generated SQL is valid after database changes are done.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Generate boiler plate code</title>
      <link>https://sadalage.com/post/generate_boiler_plate_code/</link>
      <pubDate>Sat, 17 May 2025 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/generate_boiler_plate_code/</guid>
      <description>&lt;p&gt;When accessing the database using stored procedures for basic Create, Read, Update and Delete (CRUD) functions, or when you want to write triggers that capture the before and after values in tables, or when you want to create Plain Old Java Objects (POJO&amp;rsquo;s) that match the database objects, writing these by hand takes a lot of effort and also since the requirements are changing in an agile projects at a frequent rate, there will be design changes to meet the requirement changes, so the triggers, CRUD stored procedures or Data Access Objects (DAO) are going to be out of data, instead of hand coding, its better to generate the code, using the metadata of the database&lt;/p&gt;</description>
    </item>
    <item>
      <title>Data specialists should pair with developers</title>
      <link>https://sadalage.com/post/pair-with-developers/</link>
      <pubDate>Thu, 01 Aug 2024 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/pair-with-developers/</guid>
      <description>&lt;p&gt;Traditionally the data-team is used to sitting in their own area and working for many project teams by handling requests either via a ticketing system or vi email. The hand-over of work or throwing of work over the wall creates knowledge silos and inefficiencies.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Automatically adding columns to Rails migrations</title>
      <link>https://sadalage.com/post/automatically-adding-columns-to-rails-migrations/</link>
      <pubDate>Mon, 25 Apr 2016 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/automatically-adding-columns-to-rails-migrations/</guid>
      <description>&lt;p&gt;Many projects need addition of identical columns to all the tables created by the project. Audit columns are an example of such a requirement. The requirement is to add columns such as &lt;em&gt;created_by&lt;/em&gt;, &lt;em&gt;created_date&lt;/em&gt;, &lt;em&gt;modified_by&lt;/em&gt; and &lt;em&gt;modified_date&lt;/em&gt; to all the tables, these columns store, who created the row, when the row was created,  who modified the row last and when was it modified. &lt;em&gt;created_by&lt;/em&gt; and &lt;em&gt;created_date&lt;/em&gt; are required to be present when the row is inserted and thus are required to be &lt;em&gt;not nullable&lt;/em&gt;. Adding these columns to each and every table is a lot of work for developers.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Database naming conventions in different environments</title>
      <link>https://sadalage.com/post/database-naming-conventions-in-different-environments/</link>
      <pubDate>Wed, 10 Jun 2015 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/database-naming-conventions-in-different-environments/</guid>
      <description>&lt;p&gt;In every enterprise and every project we end up having multiple environments, especially the database side of the enterprise tends to stick around for a longer period of time and has much more dependencies or application integration as opposed to application urls etc.&#xA;Given this, how to name the servers, databases and schemas becomes a very important decision, do these names provide for an easy way to use the application and not make it harder or the developers to access the database.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Setup and Teardown of database during testing</title>
      <link>https://sadalage.com/post/setup_and_teardown_of_database/</link>
      <pubDate>Thu, 17 Apr 2008 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/setup_and_teardown_of_database/</guid>
      <description>&lt;p&gt;When doing Performance Testing or running Unit/Functional tests on a database, there is a need to periodically get the database to a known state, so that the tests behave in a predictable way and to get rid of all the data created by the tests. Some of the ways to get a clean database are.&lt;/p&gt;&#xA;&lt;p&gt;Using Scripts: Recreate the database using scripts, the same scripts that are used in development environment.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Experience using DBDeploy on my project</title>
      <link>https://sadalage.com/post/exprerience_using_dbdeploy_on_project/</link>
      <pubDate>Mon, 14 Jan 2008 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/exprerience_using_dbdeploy_on_project/</guid>
      <description>&lt;p&gt;We have been using &lt;a href=&#34;http://DBDeploy.com&#34;&gt;DBDeploy&lt;/a&gt; on my project for more than 6 months now and wanted to show how things are going. First lets talk about set up, we are using dbdeploy in our Java development environment with ANT as our build scripting tool, against a Oracle 10g database.&lt;/p&gt;&#xA;&lt;p&gt;Define the ANT task first&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#d0d0d0;background-color:#202020;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-XML&#34; data-lang=&#34;XML&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#6ab825;font-weight:bold&#34;&gt;&amp;lt;taskdef&lt;/span&gt; &lt;span style=&#34;color:#bbb&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#ed9d13&#34;&gt;&amp;#34;dbdeploy&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#bbb&#34;&gt;classname=&lt;/span&gt;&lt;span style=&#34;color:#ed9d13&#34;&gt;&amp;#34;net.sf.dbdeploy.AntTarget&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#bbb&#34;&gt;classpath=&lt;/span&gt;&lt;span style=&#34;color:#ed9d13&#34;&gt;&amp;#34;lib/dbdeploy.jar&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#6ab825;font-weight:bold&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now we create the main dbinitialize task a ANT task to create you database schema, using the upgrade generated by the dbdeploy file shown below. The thing to note is that dbdeploy generates the upgrade file but does not run it against your database, so we have to make sure we call the generated upgrade file via a sql ANT task.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Why do Evolutionary Design</title>
      <link>https://sadalage.com/post/why_do_evolutionary_design/</link>
      <pubDate>Mon, 05 Nov 2007 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/why_do_evolutionary_design/</guid>
      <description>&lt;p&gt;Why do Evolutionary Design or Iterative Design or Incremental Design?&#xA;Everyone who has not worked in an evolutionary manner asks this? My answer, if you think the system you designed is &lt;strong&gt;NOT GOING TO CHANGE EVER&lt;/strong&gt; then sure you can do design once and deploy once and you are done, move on to next project. But tell me one project you have been on, that does not have any changes in requirements, changes in technology, changes in look and feel etc after it was deployed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>When does evolutionary design happen?</title>
      <link>https://sadalage.com/post/when_does_evolutionary_design/</link>
      <pubDate>Tue, 28 Aug 2007 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/when_does_evolutionary_design/</guid>
      <description>&lt;p&gt;A question I get, mostly related to the evolutionary database design and development. When the pair (team) gets a new feature (story) to work on, the team looks at the existing table/database design and sees if the current design is enough to implement the feature they are working on. If the currency database design does support the feature they are trying to implement, then they do not have to change the database at all, they will move on to implement the feature and change the application code as necessary.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Parsing mapping files for usage information</title>
      <link>https://sadalage.com/post/parsing_mapping_files_for_usage_information/</link>
      <pubDate>Thu, 19 Jul 2007 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/parsing_mapping_files_for_usage_information/</guid>
      <description>&lt;p&gt;Currently working on a legacy application, thats been in production for a long time now. I wanted to find out what are the Tables and Columns being used by the application. Since we could see that some table columns where not being used.&#xA;We are using a Object Relational mapping framework on the project, so we decided to write some code that would parse all the mapping files and gives us a list of table names and columns. We used this list to create rows in a table with two columns tablename and columnname. Once the table had this data, we just ran one more SELECT against the metadata of the database and our table which pretty much gave us a list of Table and Columns that we are not using&lt;/p&gt;</description>
    </item>
    <item>
      <title>Long Running Data Migrations during Database Refactorings</title>
      <link>https://sadalage.com/post/long_running_data_migrations/</link>
      <pubDate>Fri, 29 Jun 2007 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/long_running_data_migrations/</guid>
      <description>&lt;p&gt;When you are refactoring large databases, you will have certain tables that have millions of rows, so lets say we are doing the &lt;a href=&#34;http://databaserefactoring.com/MoveColumn.html&#34;&gt;Move Column&lt;/a&gt; refactoring, moving the TaxAmount column from Charge table which has millions of rows to TaxCharge table. Create the TaxAmount column in the TaxCharge table. Then have to move the data from the TaxAmount column in the Charge table to the TaxAmount column you created in the TaxCharge table.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Moscow</title>
      <link>https://sadalage.com/post/moscow/</link>
      <pubDate>Wed, 11 Apr 2007 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/moscow/</guid>
      <description>&lt;p&gt;Last week I was at SD Best Practices in Moscow, doing a presentation on &amp;ldquo;Refactoring Databases: Evolutionary Database Design&amp;rdquo;. Moscow seems like a interesting place, loads of huge buildings, squares, fountains and roads. Things some how feel rundown, feels like a player trying to regain his former ability or glory.&lt;/p&gt;&#xA;&lt;p&gt;Opening Keynote by &lt;a href=&#34;http://www.mccarthyshow.com/TheCore/TheCoreCommitments/tabid/1324/Default.aspx&#34;&gt;Jim McCarthy&lt;/a&gt; about how teams should operate was interesting, he proposed 11 principals or protocols as he calls them, to be followed by members in a team so that the team becomes more productive, many of these protocols are about avoiding waste and promoting clear communication channels.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Database Testing revisited</title>
      <link>https://sadalage.com/post/database_testing_revisited/</link>
      <pubDate>Thu, 09 Nov 2006 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/database_testing_revisited/</guid>
      <description>&lt;p&gt;Some time ago I wrote about what it means to do database testing.. more I think about this and having had some strange situations recently I want to add more to the list of things we should be testing.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Persistence Layer&lt;/em&gt; We should persist the objects to the database using the applications persistence layer and retrieve the objects using the same mechanism and test that we get the same object back. If we have a lot of business logic in out persistence layer we may also want to retrieve the object using Direct SQL and test that the correct values got persisted.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Database Migration Utility</title>
      <link>https://sadalage.com/post/database_migration_utility/</link>
      <pubDate>Mon, 28 Aug 2006 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/database_migration_utility/</guid>
      <description>&lt;p&gt;I have taken up the hobby of searching the opensource landscape for tools that help me do Agile database development. I&amp;rsquo;m going to write about all the Tools that I come across that help me, my preference is opensource software but not limited to it. I will try to provide some sound examples and share my experiences with all that tools that I come across and share the example code I used.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Database Testing</title>
      <link>https://sadalage.com/post/database_testing/</link>
      <pubDate>Tue, 23 May 2006 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/database_testing/</guid>
      <description>&lt;p&gt;What does it mean to test your Database? usually when someone mentions database testing, what is that they want to test. The application code that interacts with the database, or the sql code the resides in the database like stored procedures and triggers etc. I see all these aspects to database testing as important.&lt;/p&gt;&#xA;&lt;p&gt;&lt;em&gt;Testing the applications persistence mechanism&lt;/em&gt; We should test that the application persists what its supposed to save and retrieve the data using SQL and see if the database contains the same information that is being saved, this kind of testing makes sense when the application has complex persistence layer. This type of testing can be achieved using unit tests, functional tests etc.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Move your DBAs to the Project team locations&#34;</title>
      <link>https://sadalage.com/post/move_dba_to_project_team/</link>
      <pubDate>Tue, 23 May 2006 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/move_dba_to_project_team/</guid>
      <description>&lt;p&gt;Many IT organizations I have seen have groups of specialists, typical are UNIX Group, DBA group etc.&lt;/p&gt;&#xA;&lt;p&gt;When a project starts the developers on the project have to meet with all the Groups (I have more experience with the DBA group, so I write with the DBA group in mind) that they need to interact with and explain to the groups their design, the projects operational needs and other requirements, later when development starts they have to email these groups about all the setup that needs to be done and also the day to day changes that are needed. This way of working slows down the productivity of the team and the organization.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Refactoring Data</title>
      <link>https://sadalage.com/post/refactoring_databases/</link>
      <pubDate>Thu, 19 Jan 2006 00:00:00 +0000</pubDate>
      <guid>https://sadalage.com/post/refactoring_databases/</guid>
      <description>&lt;p&gt;Many a times &lt;a href=&#34;http://refactoring.com&#34;&gt;Refactoring&lt;/a&gt; is talked about in the context of code, recently I finished working with Scott Ambler on &lt;a href=&#34;http://www.databaserefactoring.com&#34;&gt;Database Refactoring&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Lately I have been working on changing data in an production database, and have been wondering how do I define it, Data Refactoring? what are the patterns of Data Refactoring. First let me talk about what I mean by Data Refactoring.&lt;/p&gt;&#xA;&lt;p&gt;When a given application goes into production, and starts life as a live application we find bugs with the application, these bugs create a weird data in the database, also with the way people change data through the app and some times through the database (yikes) and these data changes do lead to bad data.  How do you go about fixing these data problems, are there patterns to these fixes.&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
