<?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>Rob Farley, Author at LobsterPot Solutions</title>
	<atom:link href="https://lobsterpot.com.au/blog/author/rob_farley/feed/" rel="self" type="application/rss+xml" />
	<link>https://lobsterpot.com.au/blog/author/rob_farley/</link>
	<description></description>
	<lastBuildDate>Tue, 10 Mar 2026 01:38:24 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://lobsterpot.com.au/wp-content/uploads/2022/02/cropped-LobsterPot_ICON-32x32.png</url>
	<title>Rob Farley, Author at LobsterPot Solutions</title>
	<link>https://lobsterpot.com.au/blog/author/rob_farley/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Career risks?</title>
		<link>https://lobsterpot.com.au/blog/2026/03/10/career-risks/</link>
					<comments>https://lobsterpot.com.au/blog/2026/03/10/career-risks/#respond</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 10 Mar 2026 01:38:22 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6353</guid>

					<description><![CDATA[<p>My old friend James Serra asks about what we’ve done where we weren’t sure that things would work out. I&#8217;m sure you know I&#8217;m a business owner. I’ve had my company since 2008. Sure, there have been ups and downs over that time, but in general it’s been good. We take on clients who want [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2026/03/10/career-risks/">Career risks?</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>My old friend <a href="https://jamesserra.com">James Serra</a> asks about <a href="https://www.jamesserra.com/archive/2026/03/t-sql-tuesday-192-what-career-risks-have-you-taken/" target="_blank" rel="noreferrer noopener">what we’ve done where we weren’t sure that things would work out</a>.</p>



<p>I&#8217;m sure you know I&#8217;m a business owner. I’ve had my company since 2008. Sure, there have been ups and downs over that time, but in general it’s been good. We take on clients who want our services, but also try to maintain a level of flexibility with our time so that we can be responsive to whatever happens. Even if I&#8217;m spending most days at a particular client, I try to make sure I can respond to other things. Because just like how an employee might get sick, another client might have an urgent issue and I like to be able to respond. I like to be able to pause what I’m doing if necessary. Maybe this is to avoid risk, by not feeling like I have all my eggs in one basket. But maybe it increases the risk, because I&#8217;m less inclined to take on long-term full-time contracts.</p>



<p>Before I had the business, things were different. I craved stability, and I’m sure my career suffered for it.</p>



<p>I finished my university time in Melbourne at the very end of 1997. I’d had jobs as a research assistant in each of the three faculties I got degrees from, and it all wound up on New Year’s Eve at the end of 1997. I handed in my last pieces of work and after the long weekend I started working as a consultant, in a job that I had been offered six months earlier. I turned down the offer of a PhD for the stability of a wage.</p>



<p>In 2000, we moved to the UK with our two sons, and that felt risky. When we arrived I did not have a job to step into, but within a week I was deciding which of two I would take. Both were permanent positions &#8211; I was still risk-averse. I didn’t want to go contracting. I didn’t back myself enough. Financially, I could’ve made better choices, but I had a young family, and money has never been a goal. In 2002 we moved to Adelaide (where my wife grew up), and I still wanted permanent roles.</p>



<p>It took more than ten years of working in permanent positions (&#8217;98 to &#8217;08) for me to take the career risk of starting my own company.</p>



<p>Someone called me an entrepreneur recently. I disagreed with them. I’ve never sought funding from anywhere. I&#8217;ve never tried to build up a company to sell it. I’ve always pushed against hiring a salesperson and never had anyone in the company with a sales-related title.</p>



<p>What I have done is lean into the community. I’ve done work for charities for little or no revenue &#8211; I even remember charging a client less than the hourly rate I was paying a subcontractor to do the work. And I’ve volunteered my time (and that of my employees) to work among the data community, running events, speaking at conferences, helping community members with what they need, even sometimes people who would consider us competition. And I’ve tried to listen to what God is saying. That’s been hard a lot of the time, but I try.</p>



<p>Is that a career risk? Sure &#8211; community work is definitely a risk. It would be better for me to focus on the bottom line and limit how much we do that isn’t tied directly to revenue. Community work is not how people are supposed to run a business. I’m in a group for business leaders and I know that I’m not the same as most of the others there.</p>



<p>This stretches to other parts of my life as well. In the comedy community, I’m hoping to start another open mic room again (I ran one in May/June last year before the venue closed). And I’m not running it to make money &#8211; I’m doing it to provide more options for local comedians. People need stage time to improve, and I can help with that. That might help me improve as a comedian too, but that’s not it. There is a need for more open mic space in Adelaide, and I think I can help. Is that a risk? Nah &#8211; it&#8217;s not taking anything away from my livelihood. But people have called me &#8220;commercially naïve&#8221; because of it.</p>



<p>Like I wrote further up &#8211; I’m not an entrepreneur. I’m good at helping other people solve their stuff, which makes me a good consultant. But running my own company still feels like a career risk to me. At the end of the day though, I like that my company reflects who I am, and I think the bigger risk would be for me to be someone I’m not.</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2026/03/10/career-risks/">Career risks?</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2026/03/10/career-risks/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Ageing code</title>
		<link>https://lobsterpot.com.au/blog/2026/02/10/ageing-code/</link>
					<comments>https://lobsterpot.com.au/blog/2026/02/10/ageing-code/#comments</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 10 Feb 2026 00:58:53 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6344</guid>

					<description><![CDATA[<p>I’m pretty sure both spellings are fine, so don’t come at me for putting an ‘e’ in ‘ageing’. The interwebs tell me the version with the ‘e’ is preferred in England and Australia, so that’s what I’m going with. Now, as much as I’d like to wax lyrical about how English ages and changes over [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2026/02/10/ageing-code/">Ageing code</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>I’m pretty sure both spellings are fine, so don’t come at me for putting an ‘e’ in ‘ageing’. The interwebs tell me the version with the ‘e’ is preferred in England and Australia, so that’s what I’m going with.</p>



<p>Now, as much as I’d like to wax lyrical about how English ages and changes over time, and how people nowadays would’ve said “don’t @ me”, I’m going to fit into <a href="https://sqlasylum.wordpress.com/2026/02/03/t-sql-tuesday-195-how-has-your-code-aged/" target="_blank" rel="noreferrer noopener">Pat’s brief</a> slightly better and talk about code ageing &#8211; T-SQL code even!</p>



<p>I could write about how new features in T-SQL can help, such as the NULL-aware &#8220;IS [NOT] DISTINCT FROM&#8221;. If you have code that uses the non-sargable ISNULL function on a column, then that might be something to consider when you next review that code. But I&#8217;m going to talk about T-SQL that can age badly because of more sneaky reasons.</p>



<p>There’s a truth that I think many coders don’t really appreciate, and that’s that <strong><em>a T-SQL query is rarely good by itself</em></strong>. Sure, there are queries that have strong potential to be good, but performance depends on a few other things too. And this can mean that a query that was good when it was written might have become bad over time, even though it’s the same query it always was.</p>



<p><strong>Bad plans in the cache</strong></p>



<p>One obvious example is when a bad plan has crept into the cache, and now every time that query runs, the bad plan gets chosen, and performance is now rubbish.</p>



<p>Plans show us how the Query Optimizer has decided to run a query. And I&#8217;m saying &#8216;decided&#8217; to personify it a little. Of course it&#8217;s just maths, following a precise algorithm with heuristics to try to make the best choices, but at the of the day, as much as we know that there&#8217;s no arbitrary decision-making going on, it can really feel like there&#8217;s some tiny person in there, choosing to punish us for every mistake.</p>



<p>One mistake that gives us a bad plan can be simply calling the query with a parameter that is rarely used but causes the query to run a very different way. That plan could get cached, and suddenly every subsequent call for that query (with more typical parameters) uses a less-than-ideal plan.</p>



<p>Imagine the query:</p>



<pre class="wp-block-code"><code>SELECT TOP (100) t.Col1
FROM SomeTable t
WHERE t.Col2 IS NOT DISTINCT FROM @p1
ORDER BY t.Col3 DESC;</code></pre>



<p>There are two obvious ways that this query could run. One would be to apply a TopN Sort on the results of a Seek on Col2, the other would be to perform an ordered (backward) Scan of an index on Col3 with a residual Predicate on Col2. Which one is better? No idea. It depends on how selective the filter is. It also depends on whether particular indexes are available, although right now I&#8217;m going to assume there are covering indexes that could produce both plans, one on &#8220;(Col3) include (Col1, Col2)&#8221;, and one on &#8220;(Col2, Col3) include (Col1)&#8221;. And it depends on whether the SQL engine knows about the selectivity of different values (ie, the statistics). All this is where the strength of a query is not just about how the query is written, but about indexes, statistics, the cardinality estimate model, and more.</p>



<p>If the table has 100M rows and 10% of them have the value we&#8217;re looking for, then the perhaps the best option is the ordered Scan. On average we might need to look through 1000 rows to find the top 100, if those values are mostly around the largest values of Col3.</p>



<p>But what if only 0.001% of the rows have the value we&#8217;re looking for. A total of 1000 rows in the whole table. Now we&#8217;d be better off using a Seek to find the 1000 rows. But that Sort might need a large memory grant.</p>



<p>And what if there are 10M of them, but they&#8217;re all around the smallest values of Col3&#8230; oh, the joys of query tuning.</p>



<p>Maybe the value is usually selective, but every so often it&#8217;s not &#8211; maybe when it runs at 4am it uses a value which isn&#8217;t selective, so I&#8217;m willing to take the hit on performance, but during the day I want it to use the Seek + Sort plan. And usually this is fine, and there&#8217;s a cached plan that does the Seek + Sort that gets reused every time. Terrific.</p>



<p>Then one night, there&#8217;s an index rebuild, and the next time the query runs it&#8217;s the overnight non-selective parameter. The compiler comes up with a plan which is good for that value, and it&#8217;s the ordered Scan plan, which gets cached. Then when users arrive in the morning, that&#8217;s the plan that gets used every time, and it&#8217;s slow. Agonisingly, it gets often (but not always!) fixed by restarting the SQL service, and let&#8217;s stop imagining how much pain organisations can get into when they start down these rabbit holes.</p>



<p>Could we force the Seek? Sure. Should we force the Seek? That&#8217;s a tougher question. Maybe we need the overnight query to run better too. Maybe we need two queries. If the parameter value NULL is the only one which is non-selective, then making two queries is easy. We could test the value for NULL and then run a different query. That&#8217;d be easy to do. Or maybe it could be fixed by using the OPTION (RECOMPILE) hint, but that&#8217;s not exactly free either.</p>



<p>Inside knowledge is great, but perhaps we didn&#8217;t have that knowledge when we wrote the query, and the code has aged badly because we didn&#8217;t anticipate the future.</p>



<p>There are a bunch of other changes that can cause a perfectly adequate query to age poorly. Some quick examples:</p>



<p><strong>More data than expected</strong></p>



<p>It doesn&#8217;t have to be a &#8216;bad plan&#8217; scenario for a query to be less good than when it was written, because conditions can simply change. The system was so popular than the amount of data grew and now some process takes a lot longer than before. The scan was fine, but now the table is a lot larger, and the values that we thought would be selective aren&#8217;t (or vice versa).</p>



<p>Or maybe because the volume of data has increased, the number of physical reads is higher. Perhaps adding RAM is a simple solution, but maybe queries that were fast enough with full scans need to be rewritten.</p>



<p><strong>Better (!) estimates</strong></p>



<p>Maybe the version has been upgraded, and the cardinality estimates are improved. The Optimizer used to think that 20 rows would be the results of a filter, but it was always wildly wrong, with 20,000 rows being more typical. Now with a later version of SQL, the estimate is correct, but because of this, there&#8217;s a join that&#8217;s using a Hash Match instead of a Nested Loop. Way fewer logical reads, but now it needs a larger memory grant to run the query, and system performance is hurting.</p>



<p><strong>Concurrency</strong></p>



<p>Speaking of memory, maybe the concurrency requirements have increased. Maybe there are 100x as many as expected users trying to use the system at once, and those memory grants are causing a bottleneck. Maybe queries need to be tuned to discourage large memory grants.</p>



<p><strong>Index changes</strong></p>



<p>Maybe partitions have been introduced, and the indexes haven&#8217;t been reviewed.</p>



<p>Or maybe a well-meaning DBA or external consultant (ahem!) has been brought in and a new index has been added to reduce the reads. Except that now some other query has started to use that index and although the Query Optimizer has good reason for choosing that index, it&#8217;s slower than it was before, or that query we&#8217;d tuned to reduce the memory has returned to its old patterns.</p>



<p><strong>So… what should we do?</strong></p>



<p>Naturally what we need is a crystal ball, and write our queries (and our indexes, partitions, statistics, hints, whatever) according to how we expect when things have changed. Typically if you write with scale in mind, you won&#8217;t be impacted too much by scale.</p>



<p>But also, understand that there will be some things that you can&#8217;t expect so easily. You can&#8217;t necessarily expect to anticipate that a particular index will be created, and I&#8217;m definitely not suggesting you force the use of a particular index from day 1 of your query, because the change might be about the shape of the data &#8211; something that was marvellously selective no longer is for example.</p>



<p>The general feel of T-SQL code might not age as obviously as, say, .Net application code, with techniques that have been superseded over the years. Or a UI that that has aged like a trendy haircut. A lot has changed in the database world, but a T-SQL query now looks roughly the same as it did in the days of SQL Server 2005. But you should totally expect that a query you wrote in a small dev environment might behave quite different in production as the size and shape of the data increases.</p>



<p>So don&#8217;t beat yourself up about it &#8211; just schedule a code review, or at least a good tuning session. There&#8217;s bound to be some things you can fix up, and maybe those fixes won&#8217;t age nearly so badly, because you have a better idea about how things will look in the future.</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2026/02/10/ageing-code/">Ageing code</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2026/02/10/ageing-code/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Mistakes? Really, Louis? ;)</title>
		<link>https://lobsterpot.com.au/blog/2026/01/20/mistakes-really-louis/</link>
					<comments>https://lobsterpot.com.au/blog/2026/01/20/mistakes-really-louis/#respond</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 20 Jan 2026 00:14:42 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6336</guid>

					<description><![CDATA[<p>Louis Davidson is hosting this month&#8217;s T-SQL Tuesday, and asks us to relive mistakes. Ouch! It&#8217;s fine &#8211; I already had a psychologist appointment scheduled for later in the week. The name of this post &#8220;Really, Louis?&#8221; is nothing to do with how Louis thought for a number of years that Arnie Rowland was me. [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2026/01/20/mistakes-really-louis/">Mistakes? Really, Louis? ;)</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://drsql.link" target="_blank" rel="noreferrer noopener">Louis Davidson</a> is hosting this month&#8217;s T-SQL Tuesday, and <a href="https://drsql.link/2026/01/13/t-sql-tuesday-194-invitation-learning-from-mistakes/" target="_blank" rel="noreferrer noopener">asks us to relive mistakes</a>. Ouch! It&#8217;s fine &#8211; I already had a psychologist appointment scheduled for later in the week.</p>



<p>The name of this post &#8220;Really, Louis?&#8221; is nothing to do with how Louis thought for a number of years <a href="https://www.red-gate.com/simple-talk/blogs/why-we-write-3-an-interview-with-rob-farley/" target="_blank" rel="noreferrer noopener">that Arnie Rowland was me</a>. But rather about how people (especially &#8220;conscientious types&#8221; <em>(that&#8217;s only &#8216;code&#8217; if you want it to be)</em> like so many of us in the data world) frequently take ourselves back through our mistakes, beating ourselves up about it, thinking about how we could&#8217;ve avoided it, what we could&#8217;ve done better (before, during and after), as if time machines could exist.</p>



<p>I mean, sure, there&#8217;s a school of thought that because we learn through our mistakes, we become stronger. But you know, I&#8217;d rather learn through near misses. &#8220;Oh, that could&#8217;ve been bad, let me code up something so that doesn&#8217;t happen&#8221; is a better experience than having to learn when a disaster has actually happened. And hands up if you know that having a good &#8216;disaster recovery&#8217; plan only saves you from certain problems, not all problems&#8230; thank you, I see that hand. And that one. Yup. All the hands.</p>



<p>There&#8217;s an article on Psychology Today called <a href="https://www.psychologytoday.com/us/blog/more-than-a-feeling/202412/coming-out-of-the-shadows-of-our-worst-mistakes" target="_blank" rel="noreferrer noopener">&#8220;Coming Out of the Shadows of Our Worst Mistakes</a>&#8220;, by Rodney Luster, PhD <em>(he has a blog called &#8220;More Than A Feeling&#8221; which has a lot of great posts and is worth looking at if you have mental health struggles)</em>. One of his points is that even a single mistake can heighten anxiety and depression symptoms. And still, we all make mistakes. All of us. Data professionals included.</p>



<p>Our mistakes shouldn&#8217;t define us. We can quote Sting when he sings that &#8220;history will teach us nothing&#8221;, but we hope that each mistake makes us likely to fall into the same patterns that led us into trouble before. I heard something recently that says our histories might describe us, but they don&#8217;t define us. And I want to assure you, reader (and myself), that your history is more about successes than your failures. You wouldn&#8217;t be where you are today if you weren&#8217;t good at what you&#8217;d do. <em>(You would&#8217;ve been promoted into management instead.)</em></p>



<p>As Dr Luster writes, our mistakes can cast shadows over us. Over our mental wellbeing. Over our general mood. We can feel guilt and shame about mistakes, and it can take proper effort to feel redeemed. As a Christian, I know that this is a major aspect of Christianity. The Bible says that we&#8217;ve been set free from our guilt and shame, and God loves (and likes) us despite our failings. And yet, we relive our mistakes. Especially the ones involving those areas in which we know we&#8217;re meant to do better. Where we&#8217;re supposedly &#8216;experts&#8217;.</p>



<p>I&#8217;m not going to dwell on my mistakes today. Well, I&#8217;m not going to dwell on my mistakes any more today. I&#8217;ve already spent time doing that, even though I knew it wasn&#8217;t a good idea. I thought at some point in my life I would work out how to stop reliving mistakes, but that&#8217;s not a skill I&#8217;ve learned yet.</p>



<p>I say to my clients, &#8220;Don&#8217;t worry &#8211; we&#8217;ve all done it&#8221;, and &#8220;You&#8217;re not a proper data professional until you&#8217;ve stuffed something up&#8221;. For some reason, I still remember a question in the Microsoft Certified Master that dealt with corruption, and (without going into any detail, because NDA, and because I really don&#8217;t remember the detail) failing to grab a copy of the database files first. That&#8217;s not a mistake I&#8217;d ever made with a corrupt database in the real world (and there had been plenty I&#8217;d handled &#8211; I think I had a reputation for fixing corruption, back when it was more common than nowadays), but in the exam &#8211; yeah, made the mistake. Maybe it was because it was an exam. Maybe it was because I was sitting by myself (not alongside a customer). That day in the exam, I found myself wanting those files (because of another mistake!), and didn&#8217;t have them.</p>



<p>The consequence of my mistake in that exam was basically nothing. I passed the exam and earned my MCM status. Apparently I scraped through with the lowest passing score I could get. But I still passed. That corrupt database question didn&#8217;t matter at all. And yet, every so often, it appears in my thoughts. I wonder whether I would make that mistake again, perhaps in an environment where it would matter more. So you can imagine how much I relive the mistakes that actually count for something&#8230;  </p>



<p>The mistake I&#8217;m going to relive for you/Louis is the mistake of reliving my mistakes, as I&#8217;ve been describing. I know it sounds meta &#8211; but I learned recently that &#8216;meta&#8217; is the Portuguese word for &#8216;goal&#8217; (not the football goal, but the thing you&#8217;re trying to achieve), so maybe it&#8217;s okay that it&#8217;s meta. It&#8217;s a useful goal to stop reliving your mistakes, even if it is meta.</p>



<p>My advice to you is to learn forgiveness. Forgive everyone else their mistakes. It&#8217;s easy to forgive people their mistakes because, by definition, they&#8217;re unintentional. So do that, and get used to doing that. Then work out how to forgive yourself for your own.</p>



<p>&#8230;and teach me how to do it&#8230; 😉</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>



<p></p>
<p>The post <a href="https://lobsterpot.com.au/blog/2026/01/20/mistakes-really-louis/">Mistakes? Really, Louis? ;)</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2026/01/20/mistakes-really-louis/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Notes to self&#8230;</title>
		<link>https://lobsterpot.com.au/blog/2025/12/09/notes-to-self/</link>
					<comments>https://lobsterpot.com.au/blog/2025/12/09/notes-to-self/#respond</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 09 Dec 2025 01:14:38 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6326</guid>

					<description><![CDATA[<p>Mike Walsh from StraightPath wants us to write two short notes to former selves. One writing now to ten years ago (2025 me to 2015 me), and one writing what we imagine a future self would write to us now (2035 me to 2025 me). In 2019 there was a &#8220;letter to 20-year-old me&#8221; post, [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/12/09/notes-to-self/">Notes to self&#8230;</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Mike Walsh from <a href="https://straightpathsql.com" target="_blank" rel="noreferrer noopener">StraightPath</a> wants us to <a href="https://straightpathsql.com/archives/2025/12/t-sql-tuesday-193-a-note-to-your-past-and-a-warning-from-your-future/" target="_blank" rel="noreferrer noopener">write two short notes to former selves</a>. One writing now to ten years ago (2025 me to 2015 me), and one writing what we imagine a future self would write to us now (2035 me to 2025 me). In 2019 there was a &#8220;<a href="https://lobsterpot.com.au/blog/2019/06/11/a-letter-to-a-former-me/">letter to 20-year-old me</a>&#8221; post, but that was different. Twenty-year-old me didn&#8217;t know about the significance of data or of the technical community, hadn&#8217;t started a career yet, was still at university&#8230; whereas today&#8217;s post is writing to someone who&#8217;s a lot like current me, just without the last ten years. And imagining what a version of me in ten years&#8217; time would say. Hmm.</p>



<p>I&#8217;m in a business leaders group called <a href="https://www.vistage.com/" target="_blank" rel="noreferrer noopener">Vistage</a>. In Australia it used be to called TEC (I&#8217;m quite happy about the rebranding because &#8220;TEC&#8221; sounds like &#8220;tech&#8221;. Plus each group has a chair, and &#8220;TEC Chair&#8221; sounds a lot like &#8220;deckchair&#8221; to me). Anyway, when there&#8217;s a discussion going on, my Vistage chair sometimes says, &#8220;If you knew the answer, what would it be?&#8221;, which comes from Sir John Whitmore&#8217;s book &#8220;Coaching for Performance&#8221;.</p>



<p>It&#8217;s an annoyingly good question because it shifts the perspective a little. It&#8217;s not just asking what the answer is (to which &#8220;that&#8217;s the problem &#8211; I don&#8217;t know!&#8221; is a common response), it&#8217;s asking the person to imagine a situation where they already know. It subtly creates courage in the responder, because they&#8217;re asked to imagine that they know and that what they know is correct. I say it&#8217;s &#8220;annoyingly good&#8221; because it&#8217;s essentially using mind games to get us to move us past not knowing.</p>



<p>Mike&#8217;s asking us to write a note to ourselves from ten years in the future is framed similarly. He wants us to imagine a world in which we&#8217;ve got through the next ten years, and we now have the benefit of hindsight. He wants us to look back at 2015 with hindsight, to point out that a thing we were going through at the time would work out okay (or maybe the opposite), and then give ourselves similar advice about the thing we&#8217;re in now. Essentially, he&#8217;s asking, &#8220;If you knew you were going to be successful, what would you do/feel differently?&#8221; He wants us to prod ourselves into action about something in the world.</p>



<p>For me, I&#8217;ve just turned 51. I remember turning 31 and finding it&#8217;s still one of the more jarring age-changes I&#8217;ve had. Something about changing from &#8220;thirty&#8221; to &#8220;thirty-something&#8221; felt like I had entered a different phase of life, and I&#8217;m trying not to feel similar this year now that I&#8217;m &#8220;fifty-something&#8221;. Looking back at being 41, and imagining what it might be like to be 61, it&#8217;s interesting.</p>



<p>Ten years ago the world felt like it was changing quickly. And now it feels like it&#8217;s changing even quicker. In another ten years, I suspect the rate of change will not have slowed at all, although there is a significant chance that a breaking point might have been reached along the way. Ten years ago we had no idea of the events that were coming. Australia had seen five changes of Prime Minister in the previous ten years, but despite only having two more changes since then, the impact of fires, lockdowns, and other global events have made the world seem vastly different.</p>



<p>My advice to 2015 me is to ride with the big waves and to not sweat the small ones. I don&#8217;t think I did let the small waves knock me around, but I know there were times that were harder than I&#8217;d like. I&#8217;m still here though! Data is still data, whether the tools change, or the trend is towards or away from relational, or whether we&#8217;re working on-site or remote. Basic needs of society are still the same, and businesses still need their data to be good, insightful, and well-looked after. New ways of doing things might change the day-to-day activity, and people might be dealing with jarring stresses from the world more than ever, but the core needs of society and data-focused businesses are mostly unchanged. </p>



<p>I suspect I&#8217;ll feel similar in 2035 looking back at now. I have no idea what will happen in those ten years. AI is bringing change, bringing new tools (<a href="https://lobsterpot.com.au/blog/2025/08/12/ais-impact-on-careers/" target="_blank" rel="noreferrer noopener">as I wrote in August</a>), but I don&#8217;t think it will change what people or businesses need &#8211; just how we deliver them. People still need people to be there for them, and businesses still need to trust their data and have insight into it. This year I passed 20 years of running the user group in Adelaide, and in another 10 years I might have just gone past 30 &#8211; which will be just about half my life by then. The pandemic caused a lot of change to community, and even within the local user group things feel different now to then. But people do still need community, and I will try to help make that happen, whether that&#8217;s in the technical community, the comedy community, or the church community.</p>



<p>So the advice I&#8217;m going to give myself from the future is to make the right decisions. Keep doing the things that I should be doing, and find the right balance between pushing myself and going easy on myself. Tonight is a case in point &#8211; my back is sore, but it often is so I shouldn&#8217;t let that stop me going out to Monday night open-mic comedy. I haven&#8217;t been in a long while, but I need to get that back into my weekly schedule.</p>



<p>If current me knows things are going to work out, what will I have been doing to help that? Yeah &#8211; doing those things that I know are what I should be doing. I&#8217;m pretty sure hindsight will thank me for making those good decisions.</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>



<p></p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/12/09/notes-to-self/">Notes to self&#8230;</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2025/12/09/notes-to-self/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>SQL Server 2025 excitement &#8211; fuzzy is coming!</title>
		<link>https://lobsterpot.com.au/blog/2025/11/11/sql-server-2025-excitement-fuzzy-is-coming/</link>
					<comments>https://lobsterpot.com.au/blog/2025/11/11/sql-server-2025-excitement-fuzzy-is-coming/#respond</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 11 Nov 2025 06:35:12 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6319</guid>

					<description><![CDATA[<p>The smart money is on SQL Server 2025 being released to General Availability this month. Next week there are two major conferences in the Microsoft data space, Microsoft Ignite and the PASS Summit. Almost all the recent versions have been released one of these events and so with their happening in the same week, it’s [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/11/11/sql-server-2025-excitement-fuzzy-is-coming/">SQL Server 2025 excitement &#8211; fuzzy is coming!</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>The smart money is on SQL Server 2025 being released to General Availability this month. Next week there are two major conferences in the Microsoft data space, Microsoft Ignite and the PASS Summit. Almost all the recent versions have been released one of these events and so with their happening in the same week, it’s highly likely to the week for announcements.</p>



<p>Therefore Steve Jones asks us to write about <a href="https://voiceofthedba.com/2025/11/07/t-sql-tuesday-192-invitation-sql-server-2025-excitement/" target="_blank" rel="noreferrer noopener">what is making us excited about this new release</a>. Perhaps ‘excitement’ is the wrong word, but certainly Steve wants to know which features will make our lives easier. He lists a few ideas but for me the biggest thing is the probably the new suite of functions about fuzzy string comparison.</p>



<p>One of the things that I feel has been significant in the last 20 years has been tidying data. In some ways, I feel like Data Quality is less of a thing nowadays, especially with the advent of Big Data &#8211; one of the fundamental things about structured data is that the quality can be poor sometimes. AI prompts seem to make us bad at typing because it’s just so forgiving. But if you’re trying to know whether someone’s name is Steven or Stephen, then even though AI might not care, Steve probably does. And even though two names might sound the same, there is no bounds to the &#8216;creativity&#8217; of parents to name their daughters Khloe, which probably gets written down by call centre employees as Chloe or Clooey or something else entirely. Cafes even get confused with my name, let alone anyone with a name outside the top ten from the last hundred years (fun fact: apparently &#8220;Robert&#8221; was the number one name in the US from 1924-1939, and then top 10 until 1972. I was born two years later, so clearly my parents weren&#8217;t following trends &#8211; but I was named after a Scottish King, and was probably lucky that there was already a Bruce in my mum&#8217;s family). So even though data is becoming more and more UNstructured, we need to care more and more that our Big data is also Good data. High quality. Spelling things the right way.</p>



<p>I&#8217;m very sad that Master Data Services is leaving the product with SQL Server 2025. Master Data is a great way of handling lists of things, such as known verified data from trusted sources. But even though there are alternatives (such as keeping an instance of SQL Server 2022 around, or just using an external product like Profisee, which has some great tools for identifying data matches), I&#8217;m not thrilled about that aspect of SQL Server 2025.</p>



<p>However, SQL Server 2025 does bring some great options for doing fuzzy string matches, making custom Data Quality options even richer. I&#8217;ve spoken about this at some user groups recently (including tomorrow, remotely for <a href="https://www.meetup.com/tripass/events/311828929" target="_blank" rel="noreferrer noopener">TriPASS</a>, and in a few weeks in Melbourne and Sydney for <a href="https://analyticsconf.com/" target="_blank" rel="noreferrer noopener">Difinity</a>), and in that session I go much deeper into how I see data matching going. I&#8217;ll also write more about these methods in future posts, but it&#8217;ll take a few posts, covering quite a few sub-topics.</p>



<p>In the meantime though, have look at the Microsoft documentation on <a href="https://learn.microsoft.com/en-us/sql/relational-databases/fuzzy-string-match/overview" target="_blank" rel="noreferrer noopener">Fuzzy String Matching</a>. You&#8217;ll see there are four new functions, covering similarity and distance across two algorithms (Edit Distance and <a href="https://en.wikipedia.org/wiki/Jaro%E2%80%93Winkler_distance" target="_blank" rel="noreferrer noopener">Jaro-Winkler</a>).</p>



<p>We&#8217;ve had Fuzzy Lookup and Fuzzy Grouping in SSIS and Power Query (well, Power Query Online) for over twenty years, but they&#8217;ve felt like closed boxes. Sure you can put all your data through a Fuzzy Grouping transform, but there weren&#8217;t many options for being able to fine-tune things. Now I can find a bunch of candidates for a match, and then apply my own set of logic using these new functions.</p>



<p>Keep your eye out for lengthier, more technical posts in a month or so (after the conferences are done), and for now, take the time to explore where these new functions can fit into your current data matching code. You might not be rolling out SQL Server 2025 for a few months, but you can start using this in Azure SQL already!</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>



<p></p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/11/11/sql-server-2025-excitement-fuzzy-is-coming/">SQL Server 2025 excitement &#8211; fuzzy is coming!</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2025/11/11/sql-server-2025-excitement-fuzzy-is-coming/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>String parsing</title>
		<link>https://lobsterpot.com.au/blog/2025/10/21/string-parsing/</link>
					<comments>https://lobsterpot.com.au/blog/2025/10/21/string-parsing/#comments</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 21 Oct 2025 01:05:42 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6304</guid>

					<description><![CDATA[<p>Steve Jones asks how we parse strings. As Steve writes, there are a bunch of ways to parse strings in SQL. And (which Steve doesn&#8217;t write) 2025 is going to change a lot of people&#8217;s approaches, with its native regular expression functions. I&#8217;ve looked at these, but so far my reaction is more like &#8220;Oh [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/10/21/string-parsing/">String parsing</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://voiceofthedba.com" target="_blank" rel="noreferrer noopener">Steve Jones</a> asks <a href="https://voiceofthedba.com/2025/10/12/t-sql-tuesday-191-invitation-your-favorite-string-parsing/" target="_blank" rel="noreferrer noopener">how we parse strings</a>.</p>



<p>As Steve writes, there are a bunch of ways to parse strings in SQL. And (which Steve doesn&#8217;t write) 2025 is going to change a lot of people&#8217;s approaches, with its <a href="https://learn.microsoft.com/en-us/sql/relational-databases/regular-expressions/overview?view=sql-server-ver17" target="_blank" rel="noreferrer noopener">native regular expression functions</a>. I&#8217;ve looked at these, but so far my reaction is more like &#8220;Oh finally!&#8221;, rather than &#8220;Ooh, think of the potential!&#8221; &#8211; I think these new functions are most useful for when you&#8217;ve got a regular expression that you&#8217;re using in non-SQL code, and now it&#8217;s much easier to handle it within SQL.</p>



<p><em>I should also point out that the days of new features appearing only-when-a-new-SQL-Server-version-appears feel like they&#8217;re well-and-truly over, since Azure SQL gets stuff first. So when I write &#8220;2025&#8221;, I really mean the year, rather than the version of SQL Server. The feature-set, rather than the product.</em></p>



<p>But let&#8217;s talk about non-regex methods for parsing strings and the patterns that I use. I find that the biggest issue with most string parsing is <strong>complexity</strong>. Even something as simple as finding the value between the 2nd and 3rd hyphens can be done in different ways with different levels of complexity, and even if it works, maintaining that code can become really hard.</p>



<p>For example, finding the position of the first hyphen might be as simple as using the CHARINDEX function. Finding the second might involve two CHARINDEX functions, and calling SUBSTRING with parameters that have increasingly nested CHARINDEX calls&#8230; well, you can see how the complexity quickly builds</p>



<p>Another way to find that &#8216;between two hyphens&#8217; thing would be to do a STRING_SPLIT call with the enable_ordinal parameter set, and then filter it to the third entry. All well and good, but depending on what else is needed, STRING_SPLIT&#8217;s creation of additional rows can make life harder, and if you&#8217;re fighting complexity, expanding the number of rows in a dataset and then combining them again can be hard.</p>



<p>As much as we data people like &#8216;set-based&#8217; solutions, rather than thinking how to transform individual values, string parsing seems to fall into the bracket of okay to deal with this way.</p>



<p>So if we start with a string value in a variable, there are a lot of things that can be done without freaking out the person who will need to read your code later (or &#8220;future you&#8221; even). It probably doesn&#8217;t matter too much if you split the string up in various ways, concatenate parts back together in different orders, STRING_AGG some stuff, and so on. It&#8217;s certainly much easier than trying to parse all the values in a table at once in these more complex ways. </p>



<p>I like to separate logic for this kind of thing away into a function, where the logic can be tested and proven and anyone using it can have confidence that it works. And if there&#8217;s a bug or an enhancement, it can be fixed in one place.</p>



<p>But not a scalar function, of course. A table-valued function. One that can take a string as a parameter and produce a row with all the different things that could be wanted. And I can guarantee that it will produce a single row.</p>



<p>Now, this table-valued function should be inline, rather than multi-statement. I hope you&#8217;re asking why. It&#8217;s because I want the Query Optimizer to simplify it all out. I can call the function with APPLY in my FROM clause and then refer to whichever columns I like, and expect the QO not to bother with working out the ones I don&#8217;t want. So if I have a function that carves up an address string into various components, does some lookups to get reference values, maybe coming up with a JSON version and an XML version, and so on&#8230; if I don&#8217;t reference the JSON column in my outer query, my function won&#8217;t bother to produce it. A multi-statement will do all the work every time because it&#8217;s procedural. Inline will leverage the Query Optimizer to figure out which things it doesn&#8217;t need.</p>



<p>APPLY won&#8217;t just get used to call the function, but I&#8217;ll use it extensively inside the function too. By using APPLY, I can do a bunch of working calculations, making the building blocks of my work, and then combine them in the different ways, while keeping the whole thing as a single query for my inline function. Remember that an inline TVF is a stored correlated subquery. With APPLY, I can layer my logic, making it easier to maintain. If I need to expand to multiple rows, I can fold it back into one in a single APPLY subquery, unpivotting or string_split and then pivotting back into a single row. If I need a new set of return columns added, some more APPLY clauses can keep that new logic separate, so that I can confidently know that I still have only one row of data coming out, and this new logic isn&#8217;t going to confuse any of my existing code.</p>



<p class="has-text-align-left">Here&#8217;s an example, using one of the ideas that Steve mentioned &#8211; pulling dates out of a string, where there are separators that are either a semicolon or full-stop. Notice that my TVF is a series of APPLY statements. Notice also that I&#8217;m using OUTER APPLY and TRY_CONVERT so that if I get NULLs, I&#8217;m still returning the row. And all the way along, I have my working calculation columns available in case I need them again.</p>



<figure class="wp-block-image size-large"><img fetchpriority="high" decoding="async" width="1024" height="658" src="https://lobsterpot.com.au/wp-content/uploads/image-22-1024x658.png" alt="" class="wp-image-6307" srcset="https://lobsterpot.com.au/wp-content/uploads/image-22-1024x658.png 1024w, https://lobsterpot.com.au/wp-content/uploads/image-22-300x193.png 300w, https://lobsterpot.com.au/wp-content/uploads/image-22-768x494.png 768w, https://lobsterpot.com.au/wp-content/uploads/image-22-1536x987.png 1536w, https://lobsterpot.com.au/wp-content/uploads/image-22-2048x1316.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>If I needed to make sure I only returned a single row per starter row, I could do that by just combining more into a single APPLY and then aggregating the results. I&#8217;ve also added a column to return the string length, which I&#8217;ll use in a moment.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="990" src="https://lobsterpot.com.au/wp-content/uploads/image-25-1024x990.png" alt="" class="wp-image-6310" srcset="https://lobsterpot.com.au/wp-content/uploads/image-25-1024x990.png 1024w, https://lobsterpot.com.au/wp-content/uploads/image-25-300x290.png 300w, https://lobsterpot.com.au/wp-content/uploads/image-25-768x742.png 768w, https://lobsterpot.com.au/wp-content/uploads/image-25.png 1504w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>As for what happens when I ignore one of the values&#8230; well like I said earlier, the work gets cut back. Compare what happens if I&#8217;m not interested in the JSON block, only the string length.</p>



<figure class="wp-block-image size-large"><img decoding="async" width="1024" height="399" src="https://lobsterpot.com.au/wp-content/uploads/image-24-1024x399.png" alt="" class="wp-image-6309" srcset="https://lobsterpot.com.au/wp-content/uploads/image-24-1024x399.png 1024w, https://lobsterpot.com.au/wp-content/uploads/image-24-300x117.png 300w, https://lobsterpot.com.au/wp-content/uploads/image-24-768x299.png 768w, https://lobsterpot.com.au/wp-content/uploads/image-24-1536x598.png 1536w, https://lobsterpot.com.au/wp-content/uploads/image-24-2048x797.png 2048w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p>Naturally, this can work against a table of values just fine &#8211; I&#8217;m sure I don&#8217;t need to show you what&#8217;s going on there.</p>



<p>Don&#8217;t misunderstand me &#8211; I love the new regex stuff that&#8217;s come in this year. But my general pattern for string parsing is unlikely to change &#8211; the regex will just be another tool in my arsenal. I&#8217;ll still create useful inline TVFs that suit my customers&#8217; individuals need, letting them pick and choose the columns they want.</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/10/21/string-parsing/">String parsing</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2025/10/21/string-parsing/feed/</wfw:commentRss>
			<slash:comments>2</slash:comments>
		
		
			</item>
		<item>
		<title>Learning new skills</title>
		<link>https://lobsterpot.com.au/blog/2025/09/09/learning-new-skills/</link>
					<comments>https://lobsterpot.com.au/blog/2025/09/09/learning-new-skills/#respond</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 09 Sep 2025 02:59:25 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6300</guid>

					<description><![CDATA[<p>Todd Kleinhans asks us to write about “Mastering A New or Existing Technical Skill”. Todd is one of my favourite people in the data community simply because he sends people hand-written notes. It’s such a nice thing that he does, and it makes people feel better than a simple thank you &#8211; like this message [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/09/09/learning-new-skills/">Learning new skills</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Todd Kleinhans asks us to write about “<a href="https://toddkleinhans.wordpress.com/2025/09/02/t-sql-tuesday-190-mastering-a-new-or-existing-technical-skill/" target="_blank" rel="noreferrer noopener">Mastering A New or Existing Technical Skill</a>”. Todd is one of my favourite people in the data community simply because he sends people hand-written notes. It’s such a nice thing that he does, and it makes people feel better than a simple thank you &#8211; like this message he sent to Kevin Kline back in 2018.</p>



<figure class="wp-block-embed is-type-rich is-provider-twitter wp-block-embed-twitter"><div class="wp-block-embed__wrapper">
<div class="oceanwp-oembed-wrap clr"><blockquote class="twitter-tweet" data-width="550" data-dnt="true"><p lang="qme" dir="ltr"><a href="https://twitter.com/hashtag/SQLSatCos?src=hash&amp;ref_src=twsrc%5Etfw">#SQLSatCos</a> <a href="https://twitter.com/kekline?ref_src=twsrc%5Etfw">@kekline</a> <a href="https://t.co/vitsOuMK95">pic.twitter.com/vitsOuMK95</a></p>&mdash; SQL by Day, VR by Night (@toddkleinhans) <a href="https://twitter.com/toddkleinhans/status/977337756773789696?ref_src=twsrc%5Etfw">March 24, 2018</a></blockquote><script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script></div>
</div></figure>



<p>On Thursday, I was sat in a “Cloud &amp; AI Innovation Summit” put on by the Adelaide Microsoft sub. I could’ve been visiting a customer and working on their data quality, or helping to sort out the details of an application, or writing documentation. But instead I was in sessions listening to what’s being said about tech, letting my head wander around the space, having conversations with Adelaide leaders.</p>



<p>I mention this because on that day I was reflecting on the fact that I learn differently to many others. In a session, I’ll probably be tapping on my phone, taking notes about things, jotting down ideas, looking things up, and generally letting my head roam around the concepts. People with pens often draw shapes or doodle. Questions appear in my head, which I either want to ask or research myself &#8211; if I don’t I end up feeling distracted by them. I’ve known for a long time that classroom environments and conference sessions are not really my preferred learning style, but if they can be conducive to letting my mind want through idea, then that&#8217;s good.</p>



<p>But Todd asked about learning (well, mastering!) new skills, rather than getting familiar with concepts. I’m talking about the latter because I feel it forms a foundation for skills to be built on. The concepts are the bedrock for the skills to attach to. I want to know the physics about why a ball will spin a certain way before I even put my shorts on. (Bad example &#8211; those days are long gone.)</p>



<p>I know that a lot of people want to experience the physical aspects of the world before they learn why things behaved that way, and that it’s very important to learn muscle memory to have a skill, but there’s a lot to be same for explaining concepts and inner workings, so that the why can be grasped. For me, at least, it’s that becomes a bit of a prerequisite for most new skills.</p>



<p>If I&#8217;m going to become truly proficient with a skill, it has to include knowing how the thing works. As a kid I had muscle memory that let me move around a piano keyboard, and I&#8217;d done some amount of theory as well, but it was only later that chord progressions gave me more freedom. When I picked up guitar-shaped instruments, the knowledge I had let me get comfortable much quicker.</p>



<p>I&#8217;m curious to see what other people say about how they master skills. There are a lot of people who like learning new skills in the data community.</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/09/09/learning-new-skills/">Learning new skills</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2025/09/09/learning-new-skills/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>AI&#8217;s impact on careers</title>
		<link>https://lobsterpot.com.au/blog/2025/08/12/ais-impact-on-careers/</link>
					<comments>https://lobsterpot.com.au/blog/2025/08/12/ais-impact-on-careers/#respond</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 12 Aug 2025 00:17:01 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6275</guid>

					<description><![CDATA[<p>Taiob Ali is asking how AI is changing our careers. It&#8217;s a good question &#8211; one question worth reflecting on, even if the general perception among many people I talk to is &#8216;not much yet&#8217;. There are definitely plenty of people who use AI to help with emails, or as a replacement search engine, and [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/08/12/ais-impact-on-careers/">AI&#8217;s impact on careers</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://sqlworldwide.com/t-sql-tuesday-189-how-is-ai-changing-your-career/" target="_blank" rel="noreferrer noopener">Taiob Ali</a> is asking how <a href="https://sqlworldwide.com/t-sql-tuesday-189-how-is-ai-changing-your-career/" target="_blank" rel="noreferrer noopener">AI is changing our careers</a>. It&#8217;s a good question &#8211; one question worth reflecting on, even if the general perception among many people I talk to is &#8216;not much yet&#8217;.</p>



<p>There are definitely plenty of people who use AI to help with emails, or as a replacement search engine, and anyone who&#8217;s writing code in a tool like VS Code will be getting code suggestions like never before, even if they&#8217;re not writing prompts for Copilot to write the code for them. But most of these people wouldn&#8217;t really say their careers have been changed &#8211; just that they&#8217;re becoming better at their job because of the tools that are now available.</p>



<p>I could ask an AI tool to write this post for me &#8211; but in some ways I feel like that&#8217;s avoiding the writing task, rather than just getting help with it.</p>



<p>But I think this has always been how it is with technology. There&#8217;s a process that is done by a person, and over time, the person gets better tools to help improve quality or speed or scale. Pretty soon, the job can be done by someone who doesn&#8217;t have the same skills as the original person, and later it can be done without a person being involved at all. My car&#8217;s ignition mechanism is a button I press. The car I had beforehand had a key that needed to be turned. Some electric cars just &#8220;turn on&#8221; when your phone is in the car. It&#8217;s all very different to my uncle&#8217;s 1902 Peugeot. It used to be a process that a person needed to be very much involved in, but now you barely even need to know that a car needs to be turned on.</p>



<p>When I learned to code, it was a Commodore 64. People told me I should learn to program using Assembly, but I saw benefit to the speed with which I could get programs created by leveraging the functionality provided within BASIC. I didn&#8217;t keep writing BASIC code, and different languages came with different frameworks to get different things done. The purists writing in low-level languages got left behind by the people leveraging other frameworks. Using those frameworks meant they could produce more functionality in less time.</p>



<p>As far as coding today, AI tools are like having another framework available. The packages available in most languages, including Python, PowerShell, JavaScript, .Net, and so many more, aren&#8217;t about to go away, but now AI provides the tools to use those packages more quickly. We&#8217;ve gone from grabbing a package and figuring out the nuances of how to use it to having AI recommend a package and write a bunch of code for us. The &#8216;no-code&#8217; options provided by UI Wizards are being replaced by systems where we can talk to AI and get a system that works the way we want. It&#8217;s not exactly &#8216;no-code&#8217;, but it&#8217;s pretty close to &#8216;code-you-never-need-to-see&#8217;. For me, I&#8217;m hoping it&#8217;ll be like &#8216;produce tests to demonstrate the correctness of this&#8217;, especially given AI&#8217;s tendency to hallucinate.</p>



<p>I was doing AI at university in the early 90s. My lecturers were trying to persuade me to accept an offer of a PhD at Edinburgh University, but I went into consulting instead. AI back then was very different, but I know we&#8217;ve seen AI change our jobs for many years &#8211; we just might not have been noticing. LLMs have brought AI into the forefront of our thinking, brought it to regular people, so now it&#8217;s more obvious that AI is having an impact.</p>



<p>For everyone in IT &#8211; heck, everyone in every industry! &#8211; staying current is essential. We all need to be developing our skills and using the latest tools, so that we don&#8217;t get overtaken and made redundant by new technology that&#8217;s coming up. Our jobs aren&#8217;t necessarily going to be replaced, but the tools we were using yesterday have been replaced, and AI is just another tool that we should be loading into our toolsets.</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/08/12/ais-impact-on-careers/">AI&#8217;s impact on careers</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2025/08/12/ais-impact-on-careers/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>The younger generation in the SQL community</title>
		<link>https://lobsterpot.com.au/blog/2025/07/08/the-younger-generation-in-the-sql-community/</link>
					<comments>https://lobsterpot.com.au/blog/2025/07/08/the-younger-generation-in-the-sql-community/#comments</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 08 Jul 2025 11:40:09 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6253</guid>

					<description><![CDATA[<p>John Sterrett asks us where the next generation is. Well, not quite. He asks us what we&#8217;re doing, or could be, to encourage younger people to get involved in the SQL community while increasing the number of younger speakers. I&#8217;ll come back to the &#8216;what I&#8217;m doing&#8217; question. First let&#8217;s talk about the age-demographic of [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/07/08/the-younger-generation-in-the-sql-community/">The younger generation in the SQL community</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p><a href="https://procuresql.com/blog/author/johnsterrett/" target="_blank" rel="noreferrer noopener">John Sterrett</a> asks us <a href="https://procuresql.com/blog/2025/07/01/tsqltuesday-188-growing-the-younger-data-community-and-speakers/" target="_blank" rel="noreferrer noopener">where the next generation is</a>. Well, not quite. He asks us what we&#8217;re doing, or could be, to encourage younger people to get involved in the SQL community while increasing the number of younger speakers.</p>



<p>I&#8217;ll come back to the &#8216;what I&#8217;m doing&#8217; question. First let&#8217;s talk about the age-demographic of people in the SQL community.</p>



<p>Yeah &#8211; there is definitely a lack of young people. But I think this has always been the case. Even when I got into SQL properly, this was after I&#8217;d spent about seven years as a consultant / programmer. Databases had always been part of what I did, but I didn&#8217;t consider myself a specialist until later. Even the first presentations I did in the technical community were about coding, not about SQL. </p>



<p>My story wasn&#8217;t unique, either. Other people I met in the SQL world had taken a while to realise the significance of data, even though their journeys were sometimes different. Some came to databases after spending time as a sysadmin, some came from business applications like Excel, and some had been programmers like I had. Few seemed to get into data right away, and at 30 I was still seen as fairly young for the data community. When I was first awarded MVP status (when I was 31) there were just four other SQL MVPs in Australia &#8211; all older than me.</p>



<p>These days, data is understood much earlier. Data science and analytics have become legitimate university courses in their own right! Back in my day, data was a single uni subject. SQL varieties don&#8217;t quite get the same appreciation as other platforms, but data itself is more popular than ever.</p>



<p>The community though&#8230; well, it&#8217;s like Fight Club. People don&#8217;t always talk about community like they could. They might attend meetings to learn, but the benefit of time spent with other professionals can take a while to click &#8211; especially in a post-pandemic world where people are used to doing their learning online.</p>



<p>Community seems to be lacking in a lot of parts of society &#8211; certainly here in Australia where there were significant periods of lockdown (much worse in Melbourne than Adelaide where I am). People still need people, but losing loved ones to contagious diseases has meant people just don&#8217;t choose to be around other people so much. Online groups are good, but people can watch in isolation.</p>



<p>Getting to the other side of the room &#8211; moving from being in an audience to presenting &#8211; that&#8217;s even harder for people today. If they&#8217;re not even in the room much, even having the conversation about presenting is tricky. What am I doing to change this? Well, I still mentor various people, and some of that is about presenting, but more of it is about getting established as experts &#8211; helping them learn what they want to learn, and encouraging them to take steps to go where they want to. </p>



<p>In my mentoring, I encourage people those who don&#8217;t know about data to learn about data. I encourage people who know about data to attend community events. And I encourage people who are attending to start thinking about what they can present about and then to take the step to do it. Because presenting on a topic is a great way to make sure you really know your stuff.</p>



<p>Presenting can be part of someone&#8217;s journey, but it can also take time to warm up to the idea. Whenever you step onto a stage you become very visible, and that can be daunting. But I also think that if someone is feeling comfortable in their own skin as an expert, knowing that they are legitimately good at what they do (often takes quite a bit of mentoring and encouragement), then they will often start to realise that they belong on the other side of the room.</p>



<p>I hope that my user group will be able to have a local first-time presenter later this year &#8211; and ideally, it&#8217;ll be someone under 30. I have some ideas about who that might be, but I know the timing has to be right for them, so I&#8217;m not setting it as an actual goal.</p>



<p>I&#8217;m definitely interested to see what other people are doing to encourage younger presenters &#8211; but I think when you look at the wider data community, not just SQL, things aren&#8217;t as grey as they might seem.</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/07/08/the-younger-generation-in-the-sql-community/">The younger generation in the SQL community</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2025/07/08/the-younger-generation-in-the-sql-community/feed/</wfw:commentRss>
			<slash:comments>1</slash:comments>
		
		
			</item>
		<item>
		<title>Breaking down those &#8216;weird&#8217; problems</title>
		<link>https://lobsterpot.com.au/blog/2025/06/10/breaking-down-those-weird-problems/</link>
					<comments>https://lobsterpot.com.au/blog/2025/06/10/breaking-down-those-weird-problems/#respond</comments>
		
		<dc:creator><![CDATA[Rob Farley]]></dc:creator>
		<pubDate>Tue, 10 Jun 2025 07:39:00 +0000</pubDate>
				<category><![CDATA[Uncategorized]]></category>
		<guid isPermaLink="false">https://lobsterpot.com.au/?p=6246</guid>

					<description><![CDATA[<p>This month, my good friend and fellow Dune-fan Joe Fleming (@muaddba.bsky.social) from SQL Tailor Consulting asks us about weird problems, and in particular, how we troubleshoot them. Now, &#8216;weird&#8217; is an interesting word to use, and Joe actually says &#8220;weird or unique&#8221;. I&#8217;m imagining those times when someone looks at something and is surprised by [&#8230;]</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/06/10/breaking-down-those-weird-problems/">Breaking down those &#8216;weird&#8217; problems</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>This month, my good friend and fellow Dune-fan Joe Fleming (<a href="https://bsky.app/profile/muaddba.bsky.social" target="_blank" rel="noreferrer noopener">@muaddba.bsky.social</a>) from <a href="https://sqltailor.com/" target="_blank" rel="noreferrer noopener">SQL Tailor Consulting</a> asks us about <a href="https://sqltailor.com/t-sql-tuesday-invitation-how-do-you-troubleshoot/" target="_blank" rel="noreferrer noopener">weird problems, and in particular, how we troubleshoot them</a>.</p>



<p>Now, &#8216;weird&#8217; is an interesting word to use, and Joe actually says &#8220;weird or unique&#8221;. I&#8217;m imagining those times when someone looks at something and is surprised by what they see. That&#8217;s certainly a situation I recognise. There are plenty of times when I&#8217;m working at a customer site and someone calls me over because there&#8217;s a situation they don&#8217;t understand. Being available for my customers like this is one of the reasons I still like to be on-site when I can.</p>



<p>The way I troubleshoot these situations is typically to look for things that I don&#8217;t seem right. I&#8217;ve heard it said that people learning how to spot counterfeit bank notes study legitimate ones, so they know a real note so intimately that they can sense when something isn&#8217;t right, and then narrow it down as to why their &#8220;spidey-sense&#8221; is tingling. I like to think that after a lot of years of dealing with customer situations, I have a good sense for where problems are.</p>



<p>Except that occasionally I don’t, and that&#8217;s when I start to break things down.</p>



<p>Way back in the very early days of T-SQL Tuesday, there was a month where we had to present a puzzle (and its solution). My entry was about the minutiae of the HAVING clause. I chose this because when I teach Advanced T-SQL, I like to get people to understand what each component of the language is really doing. After all, these things are the building blocks of queries, and it&#8217;s important to be very familiar with them. Components like HAVING or ON or SUM(col) are easy to understand on the surface, but knowing some of the nuances can really help make a difference when you&#8217;re troubleshooting something &#8216;weird&#8217;.</p>



<p>Using frameworks or getting AI agents to create code can be very helpful for getting code created quickly, but if you don&#8217;t understand what each component does or the implications of the choices made, then troubleshooting is going to be that much harder. It can help to know really know those nuances. </p>



<p>Just about any process is made up of a combination of patterns. I&#8217;ll either recognise them or I won&#8217;t. If I don&#8217;t, I&#8217;ll break them down until they&#8217;re made up of patterns I do recognise, at which point I can see how they interact with each other as they get built back up. Almost always, I can spot that a particular pattern isn&#8217;t behaving the way I&#8217;d expect, or there&#8217;s an issue in the way that some patterns are interacting.</p>



<p>For example, I know what it means to have a clustered index on an identity column in a SQL database table. I know that if the clustered index is not marked as unique (as it is if the column is the table&#8217;s primary key), then it&#8217;s possible to have duplicates and this could affect the performance of a query (whether there are duplicates or not). I&#8217;ve seen the impact of joins that use columns which are thought of as the primary key, but which aren&#8217;t. And I&#8217;ve seen times when the business thinks things should be unique even when they&#8217;re not. This is more of a &#8216;uniqueness&#8217; problem than a &#8216;unique&#8217; problem, but it&#8217;s certainly the type of thing that can make a report-creator in a business say that something is &#8216;weird&#8217;. The query might look like it&#8217;s fine. But by understanding what&#8217;s happening with the joins being used, or with the table/index designs, I can generally spot where the patterns I&#8217;m supposed to recognise don&#8217;t seem to be behaving in the ways that I&#8217;d expect.</p>



<p>Joe asks about non-technical problems too. For this, I&#8217;m turning to some lessons from a business-leaders group that I&#8217;m in (but much like my customers, these meetings are confidential, so I&#8217;m not going to go into detail). Just like with technical problems, there are patterns that can be easily recognised and patterns that are less familiar. But with non-technical situations, things typically come down to the deeper questions that my fellow business leaders know will get asked in that group &#8211; questions like &#8220;What would be the impact of getting this wrong?&#8221;, &#8220;What information don&#8217;t we have here?&#8221;, and &#8220;Whose perspective are we not considering here?&#8221;. If these (and other) types of questions can be explored honestly, the underlying issues almost always come to the surface. I apply the same things with my customers at LobsterPot Solutions, where our &#8216;why&#8217; is to help our customers do what they do better, whether the problems are technical or non-technical.</p>



<p>So my advice for you, reading this, is to troubleshoot by looking for where the patterns you recognise are not behaving the way you&#8217;d expect &#8211; maybe something hasn&#8217;t been implemented correctly, or maybe there&#8217;s an underlying opinion causing a problem. And please remember, the challenge is not just to find where the problem is, but to find a solution. Although can you really find a solution if you don&#8217;t know what the problem is?</p>



<p><a href="https://bsky.app/profile/robfarley.com" target="_blank" rel="noreferrer noopener">@robfarley.com@bluesky</a> (previously <a href="https://twitter.com/rob_farley" target="_blank" rel="noreferrer noopener">@rob_farley@twitter</a>)</p>
<p>The post <a href="https://lobsterpot.com.au/blog/2025/06/10/breaking-down-those-weird-problems/">Breaking down those &#8216;weird&#8217; problems</a> appeared first on <a href="https://lobsterpot.com.au">LobsterPot Solutions</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://lobsterpot.com.au/blog/2025/06/10/breaking-down-those-weird-problems/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
