-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathindex.xml
503 lines (503 loc) · 54.1 KB
/
index.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>I am Bespokesy on Bespokesy – connecting software</title><link>https://bespokesy.dev/</link><description>Recent content in I am Bespokesy on Bespokesy – connecting software</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Mon, 21 Feb 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://bespokesy.dev/index.xml" rel="self" type="application/rss+xml"/><item><title>Lead Tutor for Step IT Up Australia</title><link>https://bespokesy.dev/project/step-it-up-australia/</link><pubDate>Tue, 01 Mar 2022 09:50:00 +0200</pubDate><guid>https://bespokesy.dev/project/step-it-up-australia/</guid><description><p>During 2021, I had the honor to help UST Australia&rsquo;s program &ldquo;Step IT Up Australia&rdquo;, aimed at closing the gap of IT Industry participation for people from Australia’s Indigenous communities and women returning to work.<br>
The project was run in cooperation with Macquarie Bank and Goanna Education. I was approached by the Goanna to help continue the 6-month bootcamp after the initial lead instructor had to deal with health concerns.</p>
<p>Here is an <a href="https://itwire.com/strategy/ust-australia-works-with-indigenous-communities-to-close-gap-on-it-industry-participation-in-communities.html">article by iTWire</a> from around the time the project was announced/kicked off.</p>
<h2 id="teaching-java--microservices-spring-boot">Teaching Java &amp; Microservices (Spring Boot)</h2>
<p>I was asked to be the students&rsquo; lead tutor for the second half of the program, teaching Java. First basics, then on to using Spring Boot to build microservices / micropages.</p>
<p>It was a great experience to see these brand new developers find their feet, the struggles they went through, the perseverance they showed to finally chew through all the tough problems almost through sheer willpower alone.<br>
Make no mistake, they had some really rough days, but were incredibly motivated to just carry on until they succeeded.</p>
<h2 id="key-takeaways-for-me">Key takeaways for me</h2>
<p>One of the key things I tried to instill and saw reinforced during the course of the program was that being successful as a developer has a lot to do with confidence in your ability to find answers to problems. Sure, you will find many on your own, but also, we must not be afraid to ask for help from our colleagues.</p>
<p>Most of us tend to fight some level of imposter syndrome (see <a href="https://www.youtube.com/watch?v=zNBmHXS3A6I">Mike Cannon-Brookes&rsquo; talk</a> about it), and asking for help can feel like you&rsquo;re admitting defeat.<br>
However, I strongly believe the opposite is true: It shows that you understand that your knowledge has limits, and that there is absolutely no shame in that. It makes you a more humble person willing to keep learning rather than stagnating where you are at.</p>
<p>So, TL;DR: Whenever you struggle to find an answer to a software dev/engineering/architecture problem, do not hesitate to ask those around you for help. People will not think less of you.<br>
And the odd ones who do&hellip; well, they&rsquo;ll think the same whether you ask or not. It&rsquo;s not worth caring about their opinion as they&rsquo;ll think the same thing about anyone who is not them.</p></description></item><item><title>My first product</title><link>https://bespokesy.dev/post/my-first-product/</link><pubDate>Wed, 12 May 2021 12:20:31 +1000</pubDate><guid>https://bespokesy.dev/post/my-first-product/</guid><description><p>I have finally done it! I have published my first paid-for product: <a href="https://gum.co/hugo-calendly-shortcode-plus/bespokesy">Hugo Calendly Shortcode Plus</a>.</p>
<!-- raw HTML omitted -->
<p>In essence, it&rsquo;s an advanced version of the free, oss version that I released a short while ago - as I&rsquo;ve mentioned in <a href="https://bespokesy.dev/post/published-first-piece/">my previous post</a>.</p>
<p>If you want to grab a copy, I have created a 25% discount code for the first 50 buyers: <code>bespokesy</code>. It should already be applied in the link above.</p>
<p>So, let me try and briefly summarize what has gone into this since my last update.</p>
<h2 id="distribution-gumroad">Distribution: Gumroad</h2>
<p>I decided to go with Gumroad rather than xs:code.</p>
<p>Mostly due to the larger cut that xs:code would take (25%) when compared to Gumroad (8.5% + 30 US cents when on a free account).<br>
Another factor was that the installation, in this case, is a simply copy and paste job. I could give instructions on how to add it as a git submodule, but I don&rsquo;t think there will be many updates (easier to distribute to submodules). And since I expect a low number of customers, the manual labor of repackaging if I need to and resend by email shouldn&rsquo;t be too bad.</p>
<p>I will keep xs:code in mind for future projects, though. I still think it is a great option for software that might need more frequent updates in particular.</p>
<h2 id="pricing-one-off">Pricing: One-off</h2>
<p>I went a bit back and forth over this. I decided on a one-off price because, again, the low chance that there will be future updates. The code does what it does. There&rsquo;s not terribly more to add.</p>
<p>And if I&rsquo;m wrong, nothing stops me from changing the pricing structure.</p>
<h3 id="alternative-pricing-tiers-none">Alternative pricing tiers: none</h3>
<p>I&rsquo;m not bothering with advanced tiers for this project. I suppose I could offer advanced support, but honestly, I don&rsquo;t think there&rsquo;s much need for it. Time will tell, though. And again, if I&rsquo;m wrong, I can always add another tier.</p>
<h2 id="documentation-extensive">Documentation: extensive</h2>
<p>I have spent a surprising amount of time on documentation for Hugo Calendly Shortcode Plus. There were so many aspects that I added to it. I freely admit: Some of those pieces may be overkill.</p>
<p>The documentation lives on <a href="https://docs.hcs.bespokesy.dev/">its own Hugo site</a> and encompasses:</p>
<ul>
<li>Demo pages and showcases for both the free and Plus version,</li>
<li>A full rundown of the available parameters,</li>
<li>A page showing the features side-by-side</li>
<li>A page showing errors and warnings a user might run into (and how to fix them),
<ul>
<li>Side-note: The error/warning messages in the shortcodes have been updated to link back to that page, too. I&rsquo;m pretty proud about that bit.</li>
</ul>
</li>
<li>A small section on where to find additional help and support</li>
</ul>
<p>I hope the docs will come in handy for future users.</p>
<h2 id="marketing-minimal-more-to-come">Marketing: minimal, more to come</h2>
<p>I&rsquo;ve fallen far short here. Most effort was spent on trying to highlight the benefits and copy.</p>
<p>At least I have a short list of places I want to keep an eye out that might help me promote the shortcode.<br>
I&rsquo;ll check for Hugo and or Calendly related questions on Stack Overflow, Reddit, Slack, Discord, et al. that I know the answer to (not to pump BUY THIS links down people&rsquo;s throats, though).</p>
<p>In addition to that, I have ear-marked a few content marketing pieces. The big one is a short video series on adding Calendly to Hugo. Starting with just copy&rsquo;n&rsquo;pasting the snippets Calendly provides, to using the free shortcode, to using the paid one and cascading default and custom values.</p>
<h2 id="so-its-all-done">So, it&rsquo;s all done?</h2>
<p>From a product point of view: pretty much. From a marketing perspective: I&rsquo;ve just started. :)</p>
<p>I think the amount of work in that arena might surprise me.</p>
<h2 id="whats-next">What&rsquo;s next?</h2>
<p>Apart from working on some content for Hugo Calendly Shortcode Plus, I will be looking for the next project.</p>
<p>I have a few integrations in mind and this time I want to take a closer look at the market/audience first. The ones I&rsquo;m leaning towards have the clear benefit that I might have access to the end-users to find out if there are problems that need solving to begin with.</p>
<p>I&rsquo;ll share which idea I have picked in the next update.</p>
<script>
(function(m,a,i,l,e,r){ m['MailerLiteObject']=e;function f(){
var c={ a:arguments,q:[]};var r=this.push(c);return "number"!=typeof r?r:f.bind(c.q);}
f.q=f.q||[];m[e]=m[e]||f.bind(f.q);m[e].q=m[e].q||f.q;r=a.createElement(i);
var _=a.getElementsByTagName(i)[0];r.async=1;r.src=l+'?v'+(~~(new Date().getTime()/1000000));
_.parentNode.insertBefore(r,_);})(window, document, 'script', 'https://static.mailerlite.com/js/universal.js', 'ml');
var ml_account = ml('accounts', '3074539', 'u5b9q6h0b0', 'load');
</script>
<div class="ml-form-embed"
data-account=3074539:u5b9q6h0b0
data-form=3919285:f4p1k1>
</div>
<style>
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper.embedForm {
background-color: var(--secondary-bg-color);
padding: 1em;
width: 60%;
max-width: unset;
}
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper .ml-form-embedBody .ml-form-embedContent p,
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper .ml-form-embedBody .ml-form-embedContent h4,
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper .ml-form-successBody .ml-form-successContent p {
color: unset;
font-family: unset;
font-weight: 1em;
}
</style></description></item><item><title>Hugo Calendly Shortcode</title><link>https://bespokesy.dev/project/hugo-calendly-shortcode/</link><pubDate>Tue, 20 Apr 2021 09:50:04 +1000</pubDate><guid>https://bespokesy.dev/project/hugo-calendly-shortcode/</guid><description><p>I&rsquo;ve built <code>hugo-calendly-shortcode</code> to make it easier to add Calendly to your Hugo pages.<br>
Simply <strong>add a shortcode</strong>, <strong>pick a style</strong>, and <strong>add your calendar/event name</strong>. That&rsquo;s it.</p>
<p>The basic, free &amp; open-source version is available <a href="https://github.com/bespokesy/hugo-calendly-shortcode">here</a>. <!-- raw HTML omitted --></p>
<p>I have built an advanced version, called <strong>Hugo Calendly Shortcode Plus</strong>, which I <a href="https://gum.co/hugo-calendly-shortcode-plus">offer on Gumroad</a> at a price far less than the time it would take a developer to build their own.</p>
<h2 id="who-is--isnt-this-for">Who is / isn&rsquo;t this for?</h2>
<p>Realistically, if you only want to embed one Calendly calendar/event on one page and don&rsquo;t plan on touching it ever again, you&rsquo;re most likely better off by simply adding the HTML/Javascript snippet directly into your page.<br>
Seriously, Calendly makes it <a href="https://help.calendly.com/hc/en-us/articles/223147027-Embed-options-overview">super easy</a>.</p>
<p>However, if you want to embed Calendly on various pages, maybe with different events and/or for different people, maybe even update those occasionally, then it becomes cumbersome to keep all those embeds aligned.<br>
This is what I built the shortcode for; to make it somewhat easier to have consistent embeds.</p>
<p>Also, the shortcode is fairly easy to use: Just add a calendar name and you&rsquo;re set. Maybe tweak the style if you do not want the default link popup and/or tweak the link text.</p>
<h2 id="show-me-the-goods">Show me the goods</h2>
<p>Head on over to the <a href="https://docs.hcs.bespokesy.dev/overview/">demo and documentation site</a> I&rsquo;ve created and take a look at <a href="https://docs.hcs.bespokesy.dev/examples/">the examples</a>.</p>
<p><img src="http://i.imgur.com/KxnCQ7i.gif" alt="demo gif of hugo-calendly-shortcode"></p>
<h2 id="tell-me-about-hugo-calendly-shortcode-plus">Tell me about Hugo Calendly Shortcode Plus</h2>
<p>The advanced version offers more options to customize Calendly pages, adds ways to have default parameters shared between all pages and locations the shortcode is used. Plus, it takes advantage of Calendly Premium features such as adding UTM tracking parameters.</p>
<p>I have added a <a href="https://docs.hcs.bespokesy.dev/overview/#features">full overview of the features, side-by-side</a> on the official docs for the shortcode.</p></description></item><item><title>Published my first piece - hugo-calendly-shortcode</title><link>https://bespokesy.dev/post/published-first-piece/</link><pubDate>Thu, 15 Apr 2021 09:51:58 +1000</pubDate><guid>https://bespokesy.dev/post/published-first-piece/</guid><description><p>Recently, I&rsquo;ve published my first little Hugo shortcode since starting down this journey: <a href="https://github.com/bespokesy/hugo-calendly-shortcode">hugo-calendly-shortcode</a> and created a <a href="https://bespokesy.github.io/hugo-calendly-shortcode-demo-site/">small demo site</a> to show what it looks like. Head on over to take a look!</p>
<p>The code is free and open source, so it won&rsquo;t bring in revenue. However, it forms a good basis to build an advanced version of it with more features - particularly for end users with a Pro or Premium subscription of Calendly.<br>
And also: Sharing is caring. It might just help a few folks out to get more out of Hugo.</p>
<!-- raw HTML omitted -->
<p>And so I sent out a tweet.
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">I&#39;ve built a simple <a href="https://twitter.com/hashtag/gohugo?src=hash&amp;ref_src=twsrc%5Etfw">#gohugo</a> shortcode to embed <a href="https://twitter.com/hashtag/calendly?src=hash&amp;ref_src=twsrc%5Etfw">#calendly</a> on your Hugo page.<br>Here&#39;s the demo site: <a href="https://t.co/O3gXL5RurU">https://t.co/O3gXL5RurU</a> <a href="https://t.co/3gKJESPNZE">pic.twitter.com/3gKJESPNZE</a></p>&mdash; Brendon Votteler (@bvotteler) <a href="https://twitter.com/bvotteler/status/1382214930531717124?ref_src=twsrc%5Etfw">April 14, 2021</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</p>
<p>Which was met with silence.<br>
To be fair, though, I didn&rsquo;t expect anything else. I haven&rsquo;t used Twitter in ages, and even cleaned out my old tweets a while ago. So, I&rsquo;m starting from a squeaky clean slate with basically no followers.</p>
<h2 id="why-free--open-source">Why free &amp; open source?</h2>
<p>I thought about this long and hard. In a nutshell, the basic version is marginally more useful than simply copying and pasting the html/js snippets from Calendly&rsquo;s webpage. The shortcode is somewhat easier to use (I hope), but the only real power it provides is to have the same, consistent style across multiple Calendly embeds for a Hugo site without needing to keep multiple copy &amp; pasted snippets up to date.</p>
<h2 id="advanced-paid-features-are-coming">Advanced, paid features are coming</h2>
<p>I can enhance the usefulness of the shortcode with several additional parameters to control the look &amp; feel of the Calendly popup/inline forms. The Pro and Premium versions of Calendly also enable more CSS styling options through their API. I will target those with the advanced version.<br>
I&rsquo;ll call the advanced version <code>hugo-calendly-shortcode-plus</code>.</p>
<p>In addition to styling options, I want <code>hugo-calendly-shortcode-plus</code> to pull parameters from multiple sources rather than only from shortcode parameters fed through. Then you can have defaults defined in a Hugo data file or the site configuration, and override those in front-matter, or as direct parameter for the shortcode itself.<br>
The above should help achieving a more consistent look and feel for people who need to embed multiple Calendly events on their Hugo site.</p>
<p>The additional features are in progress already. I hope, the version is ready to ship within the next two weeks.<br>
If you want to receive updates when I release it, you can sign up using the form below.</p>
<script>
(function(m,a,i,l,e,r){ m['MailerLiteObject']=e;function f(){
var c={ a:arguments,q:[]};var r=this.push(c);return "number"!=typeof r?r:f.bind(c.q);}
f.q=f.q||[];m[e]=m[e]||f.bind(f.q);m[e].q=m[e].q||f.q;r=a.createElement(i);
var _=a.getElementsByTagName(i)[0];r.async=1;r.src=l+'?v'+(~~(new Date().getTime()/1000000));
_.parentNode.insertBefore(r,_);})(window, document, 'script', 'https://static.mailerlite.com/js/universal.js', 'ml');
var ml_account = ml('accounts', '3074539', 'u5b9q6h0b0', 'load');
</script>
<div class="ml-form-embed"
data-account=3074539:u5b9q6h0b0
data-form=3919441:v3z7p1>
</div>
<style>
#mlb2-3919441.ml-form-embedContainer .ml-form-embedWrapper.embedForm {
background-color: var(--secondary-bg-color);
padding: 1em;
width: 60%;
max-width: unset;
}
#mlb2-3919441.ml-form-embedContainer .ml-form-embedWrapper .ml-form-embedBody .ml-form-embedContent p,
#mlb2-3919441.ml-form-embedContainer .ml-form-embedWrapper .ml-form-embedBody .ml-form-embedContent h4,
#mlb2-3919441.ml-form-embedContainer .ml-form-embedWrapper .ml-form-successBody .ml-form-successContent p {
color: unset;
font-family: unset;
font-weight: 1em;
}
</style>
<h2 id="decisions-on-distribution--pricing">Decisions on distribution &amp; pricing</h2>
<p>Distribution is another point I wanted to figure out (as mentioned in &ldquo;next steps&rdquo; of my <a href="https://bespokesy.dev/post/first_weeks/#next-steps">last post</a>).</p>
<p>My plan is to sell <code>hugo-calendly-shortcode-plus</code> for a fixed price - ie. no subscription model. Therefore, I will go with <a href="https://gumroad.com/">Gumroad</a>. Then deliver the code as a simple zip file, and add customers to an email list for future fixes &amp; updates.</p>
<p>As for pricing and tiers, I haven&rsquo;t made up my mind yet. I am aiming to find a price point for customers that is well under the time &amp; cost required to develop something like it themselves. For higher tiers, I may include availability for direct support by myself. I certainly want to have a collection of use-cases documented to add to the mix, too. I am also considering creating a short video tutorial on how to use it.</p>
<p>So, there are still quite a few decisions to be made. But I will get around to those when they become urgent. For the time being, I&rsquo;ve filed those away in the back of my mind for my subconscious to work away at it.</p>
<h2 id="other-stuff-ive-worked-on">Other stuff I&rsquo;ve worked on</h2>
<p><code>hugo-calendly-shortcode</code> certainly took up the majority of my time. But the surprising part may be how much time I spent getting the infrastructure around it set up. These are some of the things that were tangentially related to the work that did not include coding, repository management, etc:</p>
<ul>
<li>
<p><strong>Building a demo site</strong></p>
<p>This didn&rsquo;t take terribly long. But I did spend some time wrangling the theme to help me highlight the use-cases better. I spent most time on creating the &ldquo;posts&rdquo; showcasing the different ways to use it.<br>
There is still some more work to be done (I&rsquo;m not 100% happy with the front page), but it is less urgent for the time being.</p>
</li>
<li>
<p><strong>Setting up a mailing list</strong></p>
<p>Choosing, experimenting, and integrating a mailing list provider was very time consuming. I initially ran with MailChimp, and within a day or two switched over to MailerLite. Simply because I think I can manage groups more effectively on the latter. (With MailChimp I may have had to add more audiences for each future product which can get costly).<br>
Side-effect: I built two more shortcodes, one for each provider, just to make integration on my own sites easier.</p>
</li>
</ul>
<h2 id="next-steps">Next steps</h2>
<p>Below are the most important things I want to pay attention to over the next few weeks. We&rsquo;ll see how that will have went with the next update. :)</p>
<ul>
<li>
<p>Further explore how to market hugo-calendly-shortcode</p>
<p>Yep, a repeat from my last post. I still need to find good spots where I can post about the shortcode without being seen as a spammer.</p>
</li>
<li>
<p>Complete the advanced version</p>
<p>This should be straight forward from a code perspective. Other &ldquo;smaller&rdquo; things, such as creating a EULA may well take a fair chunk of time.</p>
</li>
<li>
<p>Sign up for distribution</p>
<p>Create an account with Gumroad and all that entails - like one of their supported payment providers for which I&rsquo;ll need to sign up, too.</p>
</li>
<li>
<p>Decide on price &amp; tiers</p>
<p>I have a vague idea, but need to think about this more deeply and just pick a point and tiers to start with. I can always pivot and change later, so no need to overanalyze. However, I do want to avoid pricing it way-too-cheap™.</p>
</li>
</ul>
<p>So, there&rsquo;s more work waiting before I can launch this mini product. However, I am very happy with my progress.<br>
I expected to learn a lot - particularly around distribution and pricing - and have not been disappointed so far. There is a <em>ton</em> of things still out there for me to learn on this journey. I&rsquo;m ready and excited!</p>
<script>
(function(m,a,i,l,e,r){ m['MailerLiteObject']=e;function f(){
var c={ a:arguments,q:[]};var r=this.push(c);return "number"!=typeof r?r:f.bind(c.q);}
f.q=f.q||[];m[e]=m[e]||f.bind(f.q);m[e].q=m[e].q||f.q;r=a.createElement(i);
var _=a.getElementsByTagName(i)[0];r.async=1;r.src=l+'?v'+(~~(new Date().getTime()/1000000));
_.parentNode.insertBefore(r,_);})(window, document, 'script', 'https://static.mailerlite.com/js/universal.js', 'ml');
var ml_account = ml('accounts', '3074539', 'u5b9q6h0b0', 'load');
</script>
<div class="ml-form-embed"
data-account=3074539:u5b9q6h0b0
data-form=3919285:f4p1k1>
</div>
<style>
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper.embedForm {
background-color: var(--secondary-bg-color);
padding: 1em;
width: 60%;
max-width: unset;
}
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper .ml-form-embedBody .ml-form-embedContent p,
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper .ml-form-embedBody .ml-form-embedContent h4,
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper .ml-form-successBody .ml-form-successContent p {
color: unset;
font-family: unset;
font-weight: 1em;
}
</style></description></item><item><title>My first few weeks in</title><link>https://bespokesy.dev/post/first_weeks/</link><pubDate>Thu, 01 Apr 2021 11:32:49 +1100</pubDate><guid>https://bespokesy.dev/post/first_weeks/</guid><description><p>I&rsquo;ve felt pretty busy the past few weeks. Progress felt great at times; yet at the same time I spent a fair chunk of time waiting for administrative work to come through. But more on that later.<br>
Let me start with a recap to tie it all together with <a href="https://bespokesy.dev/post/starting-a-product-portfolio">last week&rsquo;s post</a>. I mentioned the one thing I wanted to get done: <em>Find an idea</em>.</p>
<p>Spoiler alert: I did find an idea. <!-- raw HTML omitted --><br>
Granted it&rsquo;s a small, probably low-value idea. However, it is small enough to fail fast and learn some valuable things.</p>
<h2 id="heres-how-i-found-the-idea">Here&rsquo;s how I found the idea</h2>
<p>I actually found several ideas but discarded most. Many were too big to tackle quickly. Others may fit from a size perspective, but I had to pick one. Or rather, I think it picked me.</p>
<p>Just to reiterate. At this point in time, I&rsquo;m not concerned about viability from a product-market fit perspective.<br>
Sure, I&rsquo;ll have to get that viability part addressed in future projects. For right now, though, my first wins will be just having something out there. And being able to accept payment for it.</p>
<p>Building a small product should give me some important things to learn. And since I am not expecting to generate any revenue, I want to get it out quickly. No point in trying to launch a 5-month learning experience that is unlikely to be successful if I can get the lessons sooner than that.</p>
<p>Recently, I got in touch with the CEO of a company I used to work for. I needed to find out if I&rsquo;m allowed to write about a few past projects I built under their banner.<br>
After my initial request, he sent back a reply that we&rsquo;d better have a quick chat plus a <a href="https://calendly.com">Calendly</a> link to find a time for that call. I booked a time, we had a chat.<br>
(Turns out writing about those projects is&hellip; complicated. But that doesn&rsquo;t matter in the context of this post.)</p>
<p>A few days later, I started thinking about simple projects to cut my teeth with. I kept circling back to plugins or addons for established platforms for the likes of Wordpress, Shopify, Etsy and so on.</p>
<p>I personally use <a href="https://gohugo.io/">Hugo</a> for this website. Naturally, I started looking for addons for Hugo and noticed that there are very few around. Tons of themes, sure, but not many third party integrations.<br>
I suspect this is in part because Hugo doesn&rsquo;t have a mature app marketplace (at least that I could find). On the flip side, Hugo itself does seem to grow in popularity.<br>
No, I won&rsquo;t build a Hugo marketplace as my first product, either. Way too big. I need to make smaller mistakes before upgrading to the next size of Mistakes with a capital M.</p>
<p>So I examined popular Wordpress plugins to find a few that may make sense for Hugo. I made a shortlist and decided to narrow down the choice the next day.</p>
<p>The next morning, the Calendly link from a few days earlier popped back into my mind. It seemed to check a few boxes:</p>
<ul>
<li>It shouldn&rsquo;t take me long to build something useful quickly</li>
<li>No one&rsquo;s built it (that I could find anyway)</li>
<li>People are using Hugo, and it seems to be fairly popular</li>
<li>I believe there is a cross section of people with Hugo sites who may already use Calendly to schedule their calls.</li>
</ul>
<p>I decided that&rsquo;s good enough as a starter product. Sure, I didn&rsquo;t find it on my initial run through Wordpress plugins, but that list of ideas to explore can sit in my notes for future inspection.</p>
<h2 id="calendly-shortcode-for-hugo">Calendly shortcode for Hugo</h2>
<p>Adding Calendly to your website is very easy. You get a <a href="https://help.calendly.com/hc/en-us/articles/223147027-Embed-options-overview">html/js snippet to embed on your page</a> and you&rsquo;re set!</p>
<p>But hang on&hellip; what&rsquo;s the point of making it a shortcode then?</p>
<p>To be blunt: for simple use cases it really doesn&rsquo;t make any sense at all. Copy, paste, done. No need to muck around with <a href="https://gohugo.io/content-management/shortcodes/">Hugo shortcodes</a>.</p>
<p>But there are scenarios where it <strong>could</strong> make sense to use shortcodes instead</p>
<ul>
<li>
<p>If you have multiple Calendly links spread over several pages</p>
<p>To update the format or style for all of them you&rsquo;d need to edit all places. And better check you didn&rsquo;t forget one instance.</p>
</li>
<li>
<p>If you have a page with, say, individual profiles with Calendly links</p>
<p>Similar to above. You&rsquo;d need to update one page in several places.</p>
</li>
<li>
<p>You want to mix-and-match different embedded styles over various pages</p>
<p>With inline, popup text link, and popup widget styles, you need to keep track of slightly different variations. And again, if you want to adjust styles down the line, you&rsquo;d need to got through each one again.</p>
</li>
</ul>
<h3 id="this-where-a-shortcode-can-provide-value---if-done-right">This where a shortcode can provide value - if done right</h3>
<p>Given the above, I think there are situations where shortcodes can make your life easier.</p>
<p>The trick then is making the shortcode easy to use while still useful. By picking default values in a smart way.<br>
My basic idea was getting the style and/or embed type from the global scope (in <code>config.toml</code> or a data file), from <a href="https://gohugo.io/content-management/front-matter/">front-matter</a> as a page-specific default, or from parameters to the shortcode snippet directly. Whichever is closest to the shortcode itself overrides earlier ones.</p>
<p>You can set the overarching style in your config file, change the embed type in front-matter so it is consistent for that particular page and, finally, pick specific Calendly event types for the individual places where the shortcode is added.<br>
And when you need to change the overarching styles or embed type, you only need to update it in one spot. Change it for one page only? Update it in its front-matter. Easy.</p>
<h3 id="how-far-did-i-get">How far did I get?</h3>
<p>So far, I&rsquo;ve managed to slap together a quick, very basic prototype. Only showing a popup text link (ie. only one embed type). You can set a parameter for the calendly user/event name. And you can change the link text if you don&rsquo;t like the default. Nothing special. It looks like this:
<img src="https://bespokesy.dev/images/hugo-calendly-simple.gif" alt="demo gif of hugo-calendly-shortcode"></p>
<p>The majority of the time spent working on it was finding out how to make the shortcode available so it won&rsquo;t interfere with other themes or modifications. I found the theme structure works well for that use case.</p>
<h2 id="then-there-was-all-that-admin-stuff">Then there was all that admin stuff</h2>
<p>Apart from slapping together a quick prototype for the Calendly shortcode, I had some administrative work to push along.<br>
Getting my company&rsquo;s bank account set up, registering my domain, setting up email for my business, etc.</p>
<p>I suspect it took so long because I don&rsquo;t do these often enough to simply rattle through it on auto pilot.</p>
<h2 id="learning-interesting-articlesvideos">Learning: Interesting articles/videos</h2>
<p>I also spent a few hours just learning a more about running a small solo business. Thankfully, I don&rsquo;t feel like I spent too much time on &ldquo;getting a bit better of an idea what the heck I&rsquo;m actually supposed to do here.&rdquo;</p>
<p>The two most valuable pieces recently are listed below. Particularly as a fresh starter to this solopreneur thing.</p>
<ul>
<li>
<p><a href="https://jakobgreenfeld.com/free">What’s the point of free if you have nothing to sell</a> by Jakob Greenfeld</p>
<p>Made me question if I should offer the simple Calendly shortcode as open source to begin with. While I haven&rsquo;t decided yet, this post raises some interesting points against going down that route to begin with.</p>
</li>
<li>
<p><a href="https://training.kalzumeus.com/newsletters/archive/do-not-end-the-week-with-nothing">Don&rsquo;t End The Week With Nothing</a> by Patrick McKenzie (patio11)</p>
<p>I doubt patio11 needs an introduction. This post helped me pay attention to getting something tangible done each week.</p>
</li>
</ul>
<h2 id="next-steps">Next steps</h2>
<p>During the next few weeks, I want to:</p>
<ul>
<li>
<p>Get the finalized version of Hugo Calendly shortcodes that I can sell</p>
<p>The challenge is to not go overboard with options/features. Simple, yet useful is the goal. No more than that.</p>
</li>
<li>
<p>Find a way to distribute it</p>
<p>There are several avenues to explore. So far, <a href="https://gumroad.com/">Gumroad</a> or <a href="https://xscode.com/">xs:code</a> look promising. I want to explore more options. The choice also depends on the pricing model I choose.</p>
</li>
<li>
<p>Decide how to price it</p>
<p>One-and-done price? Recurring? Different tiers? There are several options and I need to pick a format that makes sense for such a small project. The final model will also flow into which distribution channel I want to use.</p>
</li>
<li>
<p>Explore how to market it</p>
<p>I need to take a closer look at who my audience is and where it&rsquo;s hanging out. While I don&rsquo;t expect huge sales, I hope the exercize helps with future projects.</p>
</li>
</ul>
<script>
(function(m,a,i,l,e,r){ m['MailerLiteObject']=e;function f(){
var c={ a:arguments,q:[]};var r=this.push(c);return "number"!=typeof r?r:f.bind(c.q);}
f.q=f.q||[];m[e]=m[e]||f.bind(f.q);m[e].q=m[e].q||f.q;r=a.createElement(i);
var _=a.getElementsByTagName(i)[0];r.async=1;r.src=l+'?v'+(~~(new Date().getTime()/1000000));
_.parentNode.insertBefore(r,_);})(window, document, 'script', 'https://static.mailerlite.com/js/universal.js', 'ml');
var ml_account = ml('accounts', '3074539', 'u5b9q6h0b0', 'load');
</script>
<div class="ml-form-embed"
data-account=3074539:u5b9q6h0b0
data-form=3919285:f4p1k1>
</div>
<style>
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper.embedForm {
background-color: var(--secondary-bg-color);
padding: 1em;
width: 60%;
max-width: unset;
}
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper .ml-form-embedBody .ml-form-embedContent p,
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper .ml-form-embedBody .ml-form-embedContent h4,
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper .ml-form-successBody .ml-form-successContent p {
color: unset;
font-family: unset;
font-weight: 1em;
}
</style></description></item><item><title>Starting a Product Portfolio</title><link>https://bespokesy.dev/post/starting-a-product-portfolio/</link><pubDate>Mon, 15 Mar 2021 13:41:00 +1100</pubDate><guid>https://bespokesy.dev/post/starting-a-product-portfolio/</guid><description><p>I may have (finally) settled on a strategy on how to start building a portfolio of products.</p>
<p>Over the past week, I&rsquo;ve spent a lot of time reading up on articles across indie hacker (IH) and related spaces, plus various posts linked from those sites. And the ever-deepening tree of content that branches off from those.<br>
Quite frankly, it&rsquo;s mind boggling how much material is out there to distract myself from, you know, <em>actually building things</em>. <!-- raw HTML omitted --></p>
<h2 id="my-handicap">My handicap</h2>
<p>It doesn&rsquo;t help that I&rsquo;m prone to analysis paralysis. And while I am aware of that, it still is a battle for me to not fall right into that trap (as I keep telling myself while I click on the next link to find out just a little bit more).<br>
To make things harder, I also have a great knack for foreseeing potential problems a few miles down the road.</p>
<p>Granted, the latter has been valuable when working on longer term projects during regular employment. However, it is less than ideal if you just need to get a few small wins, as in &ldquo;complete something that works, no need to be perfect&rdquo;. <em>Problems down the road mean nothing when I haven&rsquo;t even started the engine yet</em>.</p>
<p>But I digress. The above is just me warning myself to be mindful of my tendencies.</p>
<h2 id="strategy-shift">Strategy shift</h2>
<p>As I left my cushy, well-paid job, I had my sights set on the holy grail for the budding technical solopreneur: The glorious SaaS.<br>
I wanted to code up a veritable farm of those. Like a llama farm, but with code. And less wool scraps to clean out, I suppose.</p>
<p>There&rsquo;s only one hitch, though. My research tells me these are bloody hard to get right. Particularly as newbie. (I won&rsquo;t list all the reasons why it is hard here. Check out the link in the next paragraph - it describes some of the gnarly pieces in play from experience - something I simply do not have.)</p>
<p>So, as much as I give myself a hard time fo reading rather than doing, I am grateful for coming across &ldquo;<a href="https://robwalling.com/2015/03/26/the-stairstep-approach-to-bootstrapping/">The Stair Step Approach to Bootstrapping</a>&rdquo; by Rob Walling. While it&rsquo;s from 2015, I think it has aged extremely well.<br>
It basically puts the mighty SaaS venture in perspective when compared to simpler, easier-to-build products such as add-ons or plugins.</p>
<p>Putting the article above together with this tweet from Damon Cheng, I eventually had a bit of a lightbulb moment.</p>
<blockquote class="twitter-tweet"><p lang="en" dir="ltr">I shipped all these apps in 2020. Most of them generated $0.<br><br>🎬 <a href="https://t.co/JAhXqsuu6h">https://t.co/JAhXqsuu6h</a> $0 <br>🌍 <a href="https://t.co/BrNUAhfiIT">https://t.co/BrNUAhfiIT</a> $0<br>💡 <a href="https://t.co/ZWcLfOH4aI">https://t.co/ZWcLfOH4aI</a> $0<br>🐞 <a href="https://t.co/aghOxYEcPI">https://t.co/aghOxYEcPI</a> $1.99<br>👍 <a href="https://t.co/2JhJLe27pW">https://t.co/2JhJLe27pW</a> $3,025 in 10 days.<br><br>But that&#39;s ok, just keep shipping! My stories👇</p>&mdash; Damon Chen (@damengchen) <a href="https://twitter.com/damengchen/status/1344525420813697024?ref_src=twsrc%5Etfw">December 31, 2020</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
<p>Those two pieces were the <em>right content at the right time</em> for me.</p>
<p>Finally, the penny dropped for me that it is perfectly acceptable to start with something small. And it&rsquo;s okay if it doesn&rsquo;t sell. In fact, chances are high of landing a big fat zero for my first product attempts.<br>
And even if I did beat the odds and my first try does sell, it probably won&rsquo;t put me in a position to lean back in my hammock and watch the passive income roll in while lazily sipping a piña colada with a colorful mini umbrella atop right next to a slice of pineapple sculpted into something vaguely resembling a seashell.</p>
<p>I also realized that I have explicit permission from others to not succeed. And as long as I focus on something small that can be built in a reasonably short amount of time it simply is <em>no big deal</em> if it doesn&rsquo;t make money.</p>
<h2 id="my-advantage">My advantage</h2>
<p>To be fair, I am in an enviable position among peers who are starting this journey. My wife and I are financially stable enough that the loss of my income doesn&rsquo;t pose a terminal risk to our future.<br>
In fact, that may just be <em>my biggest edge</em>: I don&rsquo;t need to hustle for contracts, or keep working a day job and try to find the energy to build things at night. My wife puts no pressure on me to immediately replace my sweet income of the past. She has patience.</p>
<p>And since I now finally understood that I have permission to fail, it is up to me to find that first project, and execute. Maybe I should order a t-shirt: <em>Build first, build hard, no mercy</em>.<br>
Or maybe I should start building something instead of scouring the internet for a good deal on custom slogan t-shirts. Just this once, please.</p>
<h2 id="next-steps">Next steps</h2>
<p>So, what&rsquo;s next?<br>
Step 1: Find an idea. That&rsquo;s it, really.</p>
<p>Previously I would have thought that is the hardest part. But since success is not required, almost any reasonable idea will do as long as I can build it fairly quickly.</p>
<p>To be brutally honest, I&rsquo;m still not quite sure where <em>exactly</em> to go hunting for ideas.
My best-guess approach is to pick a marketplace for a platform with a low barrier to entry. Even better if:</p>
<ul>
<li>I have used the platform before (and can create a free instance to play around with),</li>
<li>The platform has a reasonable API to integrate addons/plugins with,</li>
<li>It has a public feedback section, or a public feature wishlist where I can see which challenges users encounter for the platform.</li>
</ul>
<p>I&rsquo;m sure there are several nuggets out there.</p>
<p>I&rsquo;ll report back once I&rsquo;ve decided on something that I believe I can build in a reasonable amount of time.<br>
And to summarize: For the first try I won&rsquo;t try and guess/analyze if the product will make money. I just need to make sure I won&rsquo;t burn money to keep it running.</p>
<script>
(function(m,a,i,l,e,r){ m['MailerLiteObject']=e;function f(){
var c={ a:arguments,q:[]};var r=this.push(c);return "number"!=typeof r?r:f.bind(c.q);}
f.q=f.q||[];m[e]=m[e]||f.bind(f.q);m[e].q=m[e].q||f.q;r=a.createElement(i);
var _=a.getElementsByTagName(i)[0];r.async=1;r.src=l+'?v'+(~~(new Date().getTime()/1000000));
_.parentNode.insertBefore(r,_);})(window, document, 'script', 'https://static.mailerlite.com/js/universal.js', 'ml');
var ml_account = ml('accounts', '3074539', 'u5b9q6h0b0', 'load');
</script>
<div class="ml-form-embed"
data-account=3074539:u5b9q6h0b0
data-form=3919285:f4p1k1>
</div>
<style>
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper.embedForm {
background-color: var(--secondary-bg-color);
padding: 1em;
width: 60%;
max-width: unset;
}
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper .ml-form-embedBody .ml-form-embedContent p,
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper .ml-form-embedBody .ml-form-embedContent h4,
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper .ml-form-successBody .ml-form-successContent p {
color: unset;
font-family: unset;
font-weight: 1em;
}
</style></description></item><item><title>Welcome</title><link>https://bespokesy.dev/post/welcome/</link><pubDate>Wed, 10 Mar 2021 11:18:47 +1100</pubDate><guid>https://bespokesy.dev/post/welcome/</guid><description><p>Welcome to my new website. And blog, I suppose.</p>
<p>I&rsquo;m working hard behind the scenes to put together more details about some of the system integrations I have completed previously.<br>
This might take a bit of time to complete. <!-- raw HTML omitted --></p>
<p>Meanwhile, I want to briefly explain how to best work with me. You know, just in case you stumble across this first post.</p>
<h1 id="modus-operandi">Modus operandi</h1>
<p>I tend to put generated value front and center of any system that I design and/or build.<br>
&ldquo;Value&rdquo; in this context typically is tied alleviating a pain point for customers or the business.</p>
<p>The next important part is understanding which measure are in place to track progress towards good outcomes.</p>
<p>Having good, agreed-upon metrics telling me whether we are likely to meet those outcomes or need to pivot is absolutely key to that approach.</p>
<p>The final piece is adaptability. If our chosen metrics tell me the plan is <em>not</em> working, we&rsquo;d better revisit our path.
This requires the willingness to be have data tell me that &ldquo;the hypothesis is wrong.&rdquo; And accept that message.</p>
<h1 id="experience">Experience</h1>
<p>I have spent over 20 years of my career creating, designing, and building software.</p>
<p>The projects I found myself having a natural inclination of doing well at had almost all to do with integrating various systems. Making them share data with each other, or process information from another system into a useful, new form.</p>
<p>I&rsquo;ve coded in more languages than it&rsquo;d be useful to list. The list doesn&rsquo;t really matter, either. It doesn&rsquo;t matter whether we&rsquo;ve built an extension in C++, or a service using Java and Springboot, or put together a few lambdas strapped together with SQS and SNS; heck, maybe even a NoSQL DB and steps thrown in the mix. None of those details were really important in the end.<br>
The only thing that always mattered were business outcomes. What value did we provide? What did the value look like? How were customers served better? Did we improve workflows and save time for internal teams?
Those are the questions worth asking.</p>
<p>(Update: See also the <a href="https://bespokesy.dev/about/">about page</a>)</p>
<h1 id="final-note">Final note</h1>
<p>I am fairly inexperienced when it comes to posting blogs, articles, etc. I completely expect to be a bit rough around the edges when writing content in this form.
Please cut me some slack while I continue to learn and (hopefully) improve over time.<br>
Having said that, though, feedback is always welcome.</p>
<p>(Update: Don&rsquo;t hesitate to head over to my <a href="https://bespokesy.dev/contact/">contact page</a> if you&rsquo;d like to start a conversation with me.)</p>
<script>
(function(m,a,i,l,e,r){ m['MailerLiteObject']=e;function f(){
var c={ a:arguments,q:[]};var r=this.push(c);return "number"!=typeof r?r:f.bind(c.q);}
f.q=f.q||[];m[e]=m[e]||f.bind(f.q);m[e].q=m[e].q||f.q;r=a.createElement(i);
var _=a.getElementsByTagName(i)[0];r.async=1;r.src=l+'?v'+(~~(new Date().getTime()/1000000));
_.parentNode.insertBefore(r,_);})(window, document, 'script', 'https://static.mailerlite.com/js/universal.js', 'ml');
var ml_account = ml('accounts', '3074539', 'u5b9q6h0b0', 'load');
</script>
<div class="ml-form-embed"
data-account=3074539:u5b9q6h0b0
data-form=3919285:f4p1k1>
</div>
<style>
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper.embedForm {
background-color: var(--secondary-bg-color);
padding: 1em;
width: 60%;
max-width: unset;
}
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper .ml-form-embedBody .ml-form-embedContent p,
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper .ml-form-embedBody .ml-form-embedContent h4,
#mlb2-3919285.ml-form-embedContainer .ml-form-embedWrapper .ml-form-successBody .ml-form-successContent p {
color: unset;
font-family: unset;
font-weight: 1em;
}
</style></description></item><item><title>Contact</title><link>https://bespokesy.dev/contact/</link><pubDate>Wed, 10 Mar 2021 00:00:00 +0000</pubDate><guid>https://bespokesy.dev/contact/</guid><description><p>The easiest way to start a conversation with me is by <a href="mailto:brendon@bespokesy.dev">email</a>.<br>
You can expect me to typically reply before the end of the next business day.</p>
<p>Alternatively, you can message me on <a href="https://www.linkedin.com/in/brendonvotteler/">LinkedIn</a> - beware that I don&rsquo;t check in daily, though.</p></description></item><item><title>My Candidate Description</title><link>https://bespokesy.dev/candidate/</link><pubDate>Tue, 09 Mar 2021 10:08:31 +1100</pubDate><guid>https://bespokesy.dev/candidate/</guid><description><p>If you are reading this, chances are that you are a recruiter and I have sent you a link as part of an initial exchange. Or you asked me in another capacity if I would be interested in working on something.<br>
I want to start by to saying thank you for taking the time to read this. Making it this far sets you apart from the copy-paste-fire cohort who give recruiters a bad rep. I created this page to be able to deal with request volumes when they come in bursts - as they typically do.</p>
<p>What I have written below is a my <em>candidate description</em>. I hope it helps you save time when you can see all the important bits in one place to decide whether it is worth your time to engage with me. Rather than trying to uncover them piece-by-piece through conversations.<br>
It also helps me: I reduce the times I need to repeat myself and the message is more consistent. I don&rsquo;t run the risk of having forgotten <em>something important</em>. (Imagine four conversations later: &ldquo;oh, btw. I&rsquo;m only available for remote roles. Whoops, should&rsquo;ve mentioned that earlier&hellip;&rdquo;)</p>
<p>Some of this may sound a bit cocky, make me look overly picky, or full of myself. This honestly is <em>not my intention</em>. And I sure hope I&rsquo;m not full of myself.<br>
If I have expressed anything poorly, do not hesitate to <a href="https://bespokesy.dev/contact/">contact</a> me to let me know. You have my express permission to do so freely and I encourage you to be candid.</p>
<h2 id="candidate-description">Candidate description</h2>
<p>I am an experienced software engineer and architect with around 20 years of experience. I enjoy working with a lot of different programming languages.<br>
The majority of my recent development experience was centered around Java, Node, and the AWS stack (e.g. lambdas, SQS, Dynamo et al.) on the backend. I know enough front-end code to be considered dangerous and have contributed using React and Typescript to a certain degree.<br>
Beyond the recent ones, I&rsquo;ve worked in a <em>ton</em> of other languages - I believe my <a href="https://www.linkedin.com/in/brendonvotteler/">LinkedIn profile</a> has a more complete list somewhere in my history.</p>
<p>Projects I have worked on range from overnight batch jobs for banks, building content moderation tools, all the way to putting together chatbots to interface with various systems. Many of which centered around the idea of giving systems access to data of other ones.</p>
<p>After all these years, I still love working with code. I believe this is driven by my desire to understand the business problem(s) we are trying to solve, having a clear idea of what success looks like, and how we can measure progress sooner rather than later in the life of a project.<br>
Bonus points for working on system integrations for which I seem to have &ldquo;a knack&rdquo; - some of my very best work has been done making distinct systems share information with each other rather than duplicating/funneling data around the ecosystem. And avoiding the resulting issues around keeping those in sync with each other.</p>
<h2 id="non-negiotiable-requirements-for-a-candidate-company">Non-negiotiable requirements for a candidate company</h2>
<ul>
<li>
<p>I can work remotely.</p>
<p>Occasional travel to meet on-site is fine, but the primary mode of work has to be remote.</p>
</li>
<li>
<p>I will not consider permanent, salaried roles. Contracting is a must.</p>
</li>
<li>
<p>Assuming reasonable notice given, time off to work with other clients and/or my own products must not be an issue.</p>
</li>
<li>
<p>Position must allow creative control of software product work.</p>
<p>Decisions are open to discussion, but I reserve the right to make the final call on implementation details.</p>
</li>
<li>
<p>For interviews, no brain-teasers or coding-up of algorithms from memory.</p>
<p>See <a href="https://channel9.msdn.com/Events/ALM-Summit/ALM-Summit-3/Technical-Interviewing-You-re-Doing-it-Wrong">this video</a> about interviewing anti-patterns. Particularly &ldquo;The Riddler&rdquo; (starts ~6:15) and &ldquo;The Knuth Fanatic&rdquo; (~12:50).</p>
<p>The internet is a beautiful thing. Among other benefits, it means I do not need to remember the details of every single algorithm I came across in graduate classes.</p>
<p>There are much better avenues to gauge whether I can actually code and solve problems. Code reviews, evaluating my public code (believe me, there&rsquo;s enough dirt there waiting to be dug up), and/or having a brief pair programming exercize are much better avenues to get a pulse of whether I can actually code.</p>
</li>
<li>
<p>No unnecessarily restrictive NDAs.</p>
<p>If you need me to build your secret formula storage, sure I&rsquo;ll sign one agreeing to not share it with your competitors. However, anything that prevents me from doing other freelance contracting work is a deal breaker.</p>
</li>
</ul>
<h2 id="nice-to-haves">Nice-to-haves</h2>
<ul>
<li>
<p>The project at hand aims to integrate different systems.</p>
<p>This is an area in which I have done some of the best, most interesting work in my career. For some reason, I seem to be very good at it.</p>
</li>
<li>
<p>Open to considering arrangements of less than 5 days per week.</p>
</li>
<li>
<p>Strong preference for fixed-price projects.</p>
<p>I&rsquo;d expect an in-depth conversation outlining the business problem(s) to be solved, what exactly &ldquo;success&rdquo; looks like, and how we would go about measuring success.</p>
<p>If the above isn&rsquo;t clear yet, I will gladly assist in exploring the status quo, and defining targeted outcomes - possibly as an opening project.</p>
</li>
<li>
<p>I may consider daily-rate engagements. However, with caveats.</p>
<p>Shorter periods (3 months or less) and/or part-time arrangements will be required for me to take such an option into consideration.</p>
</li>
</ul>
<h3 id="credits">Credits</h3>
<p>Credit where credit is due: This page was inspired by Erik Dietrich&rsquo;s <a href="https://daedtech.com/my-candidate-description/">candidate description page</a>.</p></description></item><item><title/><link>https://bespokesy.dev/archives/</link><pubDate>Sat, 22 Feb 2020 00:00:00 +0000</pubDate><guid>https://bespokesy.dev/archives/</guid><description/></item></channel></rss>