-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfaq.html
More file actions
413 lines (372 loc) · 20.9 KB
/
faq.html
File metadata and controls
413 lines (372 loc) · 20.9 KB
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
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="color-scheme" content="dark light">
<!-- Theme detection: MUST run before CSS to prevent flash -->
<script>
(function() {
var STORAGE_KEY = 'theme';
var THEME_ATTR = 'data-theme';
var prefersDarkQuery = '(prefers-color-scheme: dark)';
var mql = window.matchMedia(prefersDarkQuery);
var supportsColorScheme = mql.media === prefersDarkQuery;
var savedTheme = null;
try { savedTheme = localStorage.getItem(STORAGE_KEY); } catch (e) {}
if (savedTheme === 'dark') {
document.documentElement.setAttribute(THEME_ATTR, 'dark');
} else if (savedTheme === null && supportsColorScheme && mql.matches) {
document.documentElement.setAttribute(THEME_ATTR, 'dark');
}
})();
</script>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Inter:wght@400;500;600;700&family=JetBrains+Mono:wght@400;700&display=swap" rel="stylesheet">
<link rel="stylesheet" href="/css/main.css">
<meta name="description" content="Frequently asked questions about hiring Dan Novak. Covers availability, technical expertise, working style, rates, and engagement process for consulting work.">
<meta property="og:title" content="FAQ | Pattern 158 - Dan Novak">
<meta property="og:description" content="Frequently asked questions about hiring Dan Novak. Covers availability, technical expertise, working style, rates, and engagement process for consulting work.">
<meta property="og:url" content="https://pattern158.solutions/faq.html">
<meta property="og:type" content="website">
<meta property="og:image" content="https://pattern158.solutions/assets/images/logos/pattern158_logo_3pipes_detailed.png">
<meta property="og:site_name" content="Pattern 158 Solutions">
<meta name="twitter:card" content="summary_large_image">
<link rel="canonical" href="https://pattern158.solutions/faq.html">
<link rel="icon" href="/assets/images/icons/pattern158_favicon_flat.png" type="image/png" sizes="32x32">
<link rel="icon" href="/assets/images/icons/pattern158_favicon_flat.png" type="image/png" sizes="192x192">
<link rel="apple-touch-icon" href="/assets/images/icons/pattern158_favicon_flat.png" sizes="180x180">
<title>FAQ | Pattern 158 - Dan Novak — Pattern 158 Solutions</title>
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@type": "WebSite",
"name": "Pattern 158 Solutions",
"description": "Senior Software Engineer and Systems Architect with 28+ years building and rescuing enterprise systems. Available for new opportunities.",
"url": "https://pattern158.solutions"
}
</script>
</head>
<body class="page-faq">
<a href="#main-content" class="skip-link">Skip to main content</a>
<header>
<nav aria-label="Main navigation">
<div class="container">
<a href="/index.html" class="logo-link">
<img src="/assets/images/logos/pattern158_logo_3pipes_detailed.png"
alt="Pattern 158 - Provider of Clarity"
class="logo-img"
width="88"
height="48">
</a>
<!-- Hamburger button (mobile only) -->
<button class="hamburger"
type="button"
aria-expanded="false"
aria-controls="nav-menu"
aria-label="Toggle navigation menu">
<span class="hamburger-box">
<span class="hamburger-inner"></span>
</span>
</button>
<!-- Navigation menu -->
<ul id="nav-menu" class="nav-menu">
<li><a href="/index.html">Home</a></li>
<li><a href="/philosophy.html">Philosophy</a></li>
<li><a href="/faq.html" aria-current="page">FAQ</a></li>
<li><a href="/technologies.html">Technologies</a></li>
<li><a href="/portfolio.html">Portfolio</a></li>
<li><a href="/contact.html">Contact</a></li>
<li><a href="/testimonials.html">Field Reports</a></li>
<li>
<button id="theme-toggle" class="theme-toggle" type="button"
aria-label="Toggle dark mode" aria-pressed="false">
<svg class="icon-sun" aria-hidden="true" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/>
</svg>
<svg class="icon-moon" aria-hidden="true" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
<path d="M21 12.79A9 9 0 1 1 11.21 3 7 7 0 0 0 21 12.79z"/>
</svg>
<span class="sr-only">Toggle dark mode</span>
</button>
</li>
</ul>
</div>
</nav>
</header>
<main id="main-content" aria-label="Main content">
<!-- Hero Section -->
<section class="hero-minimal">
<div class="container">
<h1>Frequently Asked Questions</h1>
<p class="subtitle">Common questions about working with Dan Novak</p>
</div>
</section>
<!-- FAQ-01: Hiring Logistics -->
<section class="faq-category" aria-labelledby="hiring-heading">
<h2 id="hiring-heading">Hiring Logistics</h2>
<p class="category-intro">Availability, rates, and work arrangements</p>
<details open>
<summary>Are you available for new projects?</summary>
<div class="faq-answer">
<p>Yes, I'm available for contract, contract-to-hire, or full-time positions. I was laid off from GP Strategies in January 2026 and am actively seeking new opportunities.</p>
<p>I'm interested in roles involving legacy system modernization, LMS/SCORM integration, enterprise system architecture, accessibility remediation (WCAG 2.1 AA+), and AI-assisted development tooling.</p>
</div>
</details>
<details>
<summary>What's your work arrangement preference?</summary>
<div class="faq-answer">
<p>Remote is ideal. I'm also open to hybrid arrangements in the Portland, OR area (Vancouver, WA specifically). I have 28+ years of experience working effectively with distributed teams across time zones.</p>
<p>I'm comfortable with async communication (email, Slack, documentation) and sync collaboration (video calls, pair programming) depending on what the project needs.</p>
</div>
</details>
<details>
<summary>What are your contract rates?</summary>
<div class="faq-answer">
<p>For contract work, rates vary based on project scope, duration, and technical complexity. Let's discuss your specific needs - <a href="contact.html">contact me</a> with project details and we can work out terms that make sense for both of us.</p>
</div>
</details>
</section>
<!-- FAQ-02: Technical Expertise -->
<section class="faq-category" aria-labelledby="expertise-heading">
<h2 id="expertise-heading">Technical Expertise</h2>
<p class="category-intro">Technologies, specializations, and domain knowledge</p>
<details open>
<summary>What technologies do you specialize in?</summary>
<div class="faq-answer">
<p><strong>Primary stack:</strong> JavaScript, TypeScript, Vue.js, Node.js, HTML5/CSS3, SQL</p>
<p><strong>Specialized domains:</strong> Learning Management Systems (LMS), SCORM/AICC/xAPI, eLearning technologies, accessibility remediation (WCAG 2.1 AA/AAA)</p>
</div>
</details>
<details>
<summary>Do you work with legacy systems?</summary>
<div class="faq-answer">
<p>Yes, legacy system modernization is a core specialty. I've rescued undocumented systems, reverse-engineered abandoned codebases, and integrated legacy platforms with modern architectures.</p>
<p>See the <a href="/portfolio.html">portfolio</a> for examples like the legacy CMS rescue and cross-domain SCORM framework.</p>
</div>
</details>
<details>
<summary>Are you experienced with AI and automation?</summary>
<div class="faq-answer">
<p>Yes. I've designed agentic workflows using GitHub Spec Kit, built Copilot Studio agents for enterprise clients, and use AI-assisted development extensively (GitHub Copilot, Claude Code).</p>
<p>I focus on practical applications - tools that solve real problems, not hype. AI is most valuable for documentation generation, code review, and rapid prototyping.</p>
</div>
</details>
<details>
<summary>What industries have you worked in?</summary>
<div class="faq-answer">
<p>Banking (PNC, JPMorgan Chase, Kmart Credit), Defense (GDEB Electric Boat), Energy (7+ utilities including FPL, NRG, Exelon), Retail (GM, Kmart), Healthcare (Cornell Medical), and Enterprise software (Microsoft, BP).</p>
<p>This cross-industry experience helps me recognize patterns and apply solutions from one domain to another.</p>
</div>
</details>
</section>
<!-- FAQ-03: Working Style -->
<section class="faq-category" aria-labelledby="style-heading">
<h2 id="style-heading">Working Style</h2>
<p class="category-intro">Communication, collaboration, and approach</p>
<details open>
<summary>How do you handle communication?</summary>
<div class="faq-answer">
<p>I provide clear, documented communication. I'm comfortable with async (email, Slack, documentation) and sync (video calls, pair programming) depending on what the project needs.</p>
<p>I'm in US Pacific timezone (Portland, OR). I respond to messages during business hours and document key decisions so distributed teams can stay aligned.</p>
</div>
</details>
<details>
<summary>Do you work well with distributed teams?</summary>
<div class="faq-answer">
<p>Yes. I've spent 28 years working with distributed teams across time zones. I understand the importance of documentation, clear handoffs, and async-first workflows.</p>
<p>I'm experienced with collaborative tools (Jira, Confluence, GitHub, Teams, Slack) and know how to keep projects moving when team members are in different locations.</p>
</div>
</details>
<details>
<summary>What's your approach to unclear requirements?</summary>
<div class="faq-answer">
<p>I treat it as a forensic investigation. When requirements are undefined or contradictory, I document what exists, map the gaps, and propose solutions grounded in evidence.</p>
<p>See the <a href="/portfolio.html">featured projects</a> for examples of how I approach undocumented systems and rebuild them systematically. If you have an unclear situation, <a href="contact.html">let's talk</a> - this is the kind of problem I'm good at solving.</p>
</div>
</details>
<details>
<summary>Are you comfortable working independently?</summary>
<div class="faq-answer">
<p>Yes. I've often been "the engineer" on projects - the one who figures problems out, builds the tool, and hands off documentation. I'm self-directed but also collaborate well when the project calls for it.</p>
<p>I thrive in situations where requirements are unclear, documentation is missing, or the problem hasn't been solved before. Give me a complex puzzle and I'll map it, solve it, and document it.</p>
</div>
</details>
</section>
<!-- FAQ-04: Process & Methodology -->
<section class="faq-category" aria-labelledby="process-heading">
<h2 id="process-heading">Process & Methodology</h2>
<p class="category-intro">How Dan works in practice</p>
<details open>
<summary>What's your typical workflow?</summary>
<div class="faq-answer">
<p>The pattern repeats across my career:</p>
<ol>
<li><strong>Deconstruct the Chaos:</strong> Forensic investigation to understand the system - map dependencies, identify patterns, document what exists</li>
<li><strong>Build the Tool:</strong> Create reusable frameworks to solve root causes, not symptoms - automate repetitive tasks, standardize processes</li>
<li><strong>Empower the User:</strong> Hand off robust, documented tools that make complex processes simple - clear READMEs, inline comments, training materials</li>
</ol>
<p>This pattern shows up whether I'm debugging SCORM packages, reverse-engineering legacy systems, or building automation tools.</p>
</div>
</details>
<details>
<summary>How do you approach troubleshooting?</summary>
<div class="faq-answer">
<p>Systems thinking first. I look for patterns, examine different angles (technical, UX, user behavior), and verify hypotheses with evidence. I document findings clearly so others can follow the reasoning.</p>
<p>I'm methodical: reproduce the issue, isolate variables, test hypotheses, fix root cause (not symptoms), verify the fix, and document for future reference.</p>
</div>
</details>
<details>
<summary>Do you write documentation?</summary>
<div class="faq-answer">
<p>Yes, extensively. I believe tools are as good as their documentation. I write clear READMEs, inline code comments, architecture decision records (ADRs), and handoff guides.</p>
<p>Documentation isn't an afterthought - it's part of the deliverable. If I build it, I document it so the next person (or future me) can understand and maintain it.</p>
</div>
</details>
<details>
<summary>What's your philosophy on tool selection?</summary>
<div class="faq-answer">
<p>"Right tool for the job." I'm pragmatic - native solutions over frameworks when possible, established libraries over hand-rolled, simple over clever.</p>
<p>I assess tools based on: Does it solve the actual problem? Will the team be able to maintain it? Is it overengineered? I'd rather use a boring, reliable solution than chase the latest trend. See the <a href="philosophy.html">philosophy page</a> for more on this approach.</p>
</div>
</details>
</section>
<!-- Testimonial Section -->
<section class="testimonial testimonial-divider">
<div class="container">
<h2 class="section-heading-styled">What Colleagues Say</h2>
<blockquote class="testimonial-quote">
<p class="quote-text">It's always so nice working with you and having you send these notes so that the developer can get going is helpful and appreciated.</p>
</blockquote>
<blockquote class="testimonial-quote testimonial-secondary">
<p class="quote-text">Thank you so much for your efforts in preparing this proposal. It looks fantastic.</p>
<footer class="quote-attribution">
<cite>Director, Accessibility Practice</cite>
<p class="quote-context">GP Strategies — on an accessibility initiative proposal</p>
</footer>
</blockquote>
</div>
</section>
</main>
<footer>
<div class="container">
<p><strong>Dan Novak</strong> | Senior Software Engineer | Systems Architect</p>
<p>Portland, OR | <a href="mailto:dan@pattern158.solutions">dan@pattern158.solutions</a> | <a href="https://linkedin.com/in/dan-novak-5692197">LinkedIn</a> | <a href="/accessibility.html">Accessibility</a></p>
<p class="footer-tagline">Pattern 158: I cheat, but I cheat fair.</p>
</div>
</footer>
<!-- Navigation toggle -->
<script>
(function() {
var hamburger = document.querySelector('.hamburger');
var navMenu = document.querySelector('.nav-menu');
if (!hamburger || !navMenu) return;
function toggleMenu() {
var isOpen = hamburger.getAttribute('aria-expanded') === 'true';
var newState = !isOpen;
hamburger.setAttribute('aria-expanded', String(newState));
hamburger.classList.toggle('is-active', newState);
navMenu.classList.toggle('is-open', newState);
// Prevent body scroll when menu is open
document.body.style.overflow = newState ? 'hidden' : '';
}
function closeMenu() {
hamburger.setAttribute('aria-expanded', 'false');
hamburger.classList.remove('is-active');
navMenu.classList.remove('is-open');
document.body.style.overflow = '';
}
// Click handler
hamburger.addEventListener('click', toggleMenu);
// Keyboard: Enter or Space activates button
hamburger.addEventListener('keydown', function(e) {
if (e.key === 'Enter' || e.key === ' ') {
e.preventDefault();
toggleMenu();
}
});
// Escape closes menu, returns focus to hamburger
document.addEventListener('keydown', function(e) {
if (e.key === 'Escape') {
var isOpen = hamburger.getAttribute('aria-expanded') === 'true';
if (isOpen) {
closeMenu();
hamburger.focus();
}
}
});
// Close menu when clicking outside
document.addEventListener('click', function(e) {
var isOpen = hamburger.getAttribute('aria-expanded') === 'true';
if (isOpen && !navMenu.contains(e.target) && !hamburger.contains(e.target)) {
closeMenu();
}
});
// Close menu when a nav link is clicked (for same-page navigation)
navMenu.addEventListener('click', function(e) {
if (e.target.tagName === 'A') {
closeMenu();
}
});
// Close menu on window resize to desktop (cleanup stale mobile state)
window.addEventListener('resize', function() {
if (window.innerWidth > 768) {
closeMenu();
}
});
})();
</script>
<script>
(function() {
var STORAGE_KEY = 'theme';
var THEME_ATTR = 'data-theme';
var toggle = document.getElementById('theme-toggle');
if (!toggle) return;
// Set initial ARIA state based on current theme
var isDark = document.documentElement.getAttribute(THEME_ATTR) === 'dark';
toggle.setAttribute('aria-pressed', isDark ? 'true' : 'false');
// Toggle handler
toggle.addEventListener('click', function() {
var html = document.documentElement;
var currentlyDark = html.getAttribute(THEME_ATTR) === 'dark';
var newTheme = currentlyDark ? 'light' : 'dark';
if (newTheme === 'dark') {
html.setAttribute(THEME_ATTR, 'dark');
} else {
html.removeAttribute(THEME_ATTR);
}
toggle.setAttribute('aria-pressed', newTheme === 'dark' ? 'true' : 'false');
try { localStorage.setItem(STORAGE_KEY, newTheme); } catch (e) {}
});
// Cross-tab synchronization
window.addEventListener('storage', function(e) {
if (e.key === STORAGE_KEY) {
var html = document.documentElement;
if (e.newValue === 'dark') {
html.setAttribute(THEME_ATTR, 'dark');
toggle.setAttribute('aria-pressed', 'true');
} else {
html.removeAttribute(THEME_ATTR);
toggle.setAttribute('aria-pressed', 'false');
}
}
});
// System preference change listener (respects manual override)
window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', function(e) {
try {
if (localStorage.getItem(STORAGE_KEY) !== null) return;
} catch (err) {}
var html = document.documentElement;
if (e.matches) {
html.setAttribute(THEME_ATTR, 'dark');
toggle.setAttribute('aria-pressed', 'true');
} else {
html.removeAttribute(THEME_ATTR);
toggle.setAttribute('aria-pressed', 'false');
}
});
})();
</script>
</body>
</html>