Daniel Markham is a semioticist logician (otherwise known as a programmer) and practices the principle: Share What You Know. He likes to help people learn to make better tech. He believes that once you know the “why,†you can figure out the “what†on your own.
As an active coder and manager, Daniel has spent time the last several years with clients as an Agile/XP Technical Coach, helping them rediscover how to discover and create value at speed. His clients include several Fortune 100 companies all over North America.
Daniel is also a technical coach and the author of Info-Ops and Info-Ops II cross-dedicated and shared (due to high cost/low availability) hardware systems. Package management and high-layer orchestration through other tools, layers is where Azure is partially intersecting.
Introduction
Jeffrey
Daniel, welcome back to the show. How are you sir?
Daniel
Howdy Jeffrey, it’s good to be back on the show.
Jeffrey
Oh, my pleasure.
I would encourage the listeners to go back and listen to the previous episode back in September 2020. But now, I would like to give you an opportunity to give the high points of your background and your career that led you up to what you are doing today.
Daniel
I’m a specializing generalist or a generalizing specialist, depending on how you want to look at it. I got interested in helping teams. I promoted myself and moved out of senior dev roles and lead architect roles. I wanted to figure out how tech sometimes really screws up. I did a lot of consulting, and I saw a lot of organizations.
I wanted to take that and put it into some piece of work that I could share with folks about how they can make their teams more successful. That’s been my journey the last few years. I wrote a couple books, and I’ve been podcasting. I’m having a hoot of a time, and it’s been quite an adventure.
I have gone through a dozen different types of blogging and content creation platforms. I’m a writer who could program very well with a natural skill program. Even though my heart was in writing, my skill level is what tipped me off to the programming world, and that’s been fun.
About 14 months ago or so, I created danielbmarkham.com. I have been posting at least once a week on the Nerd Roundup every Friday where we sit back and talk about technical things and goof off. I try to make the website and the Nerd Roundup as noncommercial as possible.
I think the teams that can relax and have fun together can do about dang near anything together, so I think it is important to demonstrate kicking back and talking about what’s going on in the tech world without any ulterior agenda. I kicked off a Discord server awhile back, and we are doing a lot of creative things.
Share What You Know with Programmers
Jeffrey
When you were on the show last time, we talked specifically about how to teach programmers what they need to know, but then also how teaching things like test-driven development (TDD). You have this passion for teaching, and you’ve done a lot of work with the videos and the website.
There’s probably a lot of people out there who would like to teach, but they just don’t know how to get started. They see all these YouTube people, their product reviews, and think, I’d like to do something more meaningful. But there’s some barriers. When did you know that you wanted to teach others?
Daniel
As a writer, I wanted to describe the experiences I had as a lead programmer and as an architect with programmers. I failed at sharing that story. Rather interesting, there was one side of that story that consisted of the little nuances of technology such as relational databases or UML, and there was another side of those stories that were much freer flowing. Programming brought together both of those worlds, and it became quite fascinating to describe that.
I got into this doing the technical side of teaching, which is TDD or C programming or C# programming which was straightforward. Then as I got more mature in teaching, I picked tougher and tougher subjects to try to teach. This is why I’m a programmer. I do not give up on problems because they are hard.
Share What You Know About Mechanics
Jeffrey
I’m perusing your website, and you have so many videos and an interesting list of guests, but what are the mechanics? Do you know of a guide today where you can just follow the recipe, or did you have to slog through it all and just figure it out on your own like everybody else?
Daniel
I am friends with Bob Martin, Uncle Bob in the community, and Bob told me, “You know last night I just got my phone out and made a video,†and silly me, I tried doing that. The video was bouncing everywhere, you couldn’t hear the sound, and it was not good. So, then I went to the other side.
I got the Adobe Suite and started to do what we call video production, where you shoot from different angles and do the sound effects and the special effects. There are so many little things to do that I found myself more involved in the technical details of the presentation than the actual content. I loved doing it, but it was not related to tech. At the end of the day, it was a distraction. So, I felt I had to do a lot of experimentation.
Jeffrey
What did you settle on? Or have you even settled?
Audio
Daniel
Well, it’s a process. You know, I was told when I started, the most important thing was audio. So of course, the last thing I could finally get done was audio, but it wasn’t for lack of trying, I tried this several times. I have at least a dozen different kinds of microphones. I’m using a shotgun mic now. I’ve got mics on the PC. I’ve got a mic via the webcam I’m using. I’ve got mics and a mixer board.
I’m using a hardware mixer now. The Behringer. It’s a 12 or 14 channel with sliders. One of the things I discovered is that because I love technical details so much, and because all the technical stuff just went into the monitor here in front of me that the more I can offload the cognitive part, the more I was learning to focus on what I was doing.
Now, I’m doing a TV show kind of format. I use one of the OBS derivatives. The metaphor is, “Hey, I show up, push a button to start working, and I don’t fret through the hard things.†I try to focus exclusively on the content that we really need instead of all the other cool things I would do if I had time.
Video
Jeffrey
You’re also showing things on video where this podcast is just audio. What’s your chosen format for getting up on a video?
Daniel
With the video I went through several different solutions, and now I’m using a Sony regular point and shoot camera, the R1000 series. It’s a beautiful, wonderful little compact camera to shoot pictures and videos. It handles the auto-focusing, and all the motion coding is done on the camera. I leave it on all the time, and it is fine.
From the HDMI output of the camera, I’m going into an NDI NewTek adapter, which turns the HDMI into something called NDI which is a standardization for streaming over Ethernet. My video goes up to my local Ethernet from the camera which allows me to put any number of cameras anywhere because I have that adapter.
On this side, I subscribe to the host, and I can do the mixing on the software itself.
Jeffrey
So, you’re getting multiple cameras feeds in from your network connection?
Internet Connections
Daniel
Yes, I could probably go up to about 10 or 12 on a 10-gig connection. It’s a lot of bits moving around, but nobody really cares because it’s my home network.
Jeffrey
Right. And what speed is your network switch?
Daniel
In the last year or two, I’ve moved up to WiMax. It’s a five gigahertz, and it gives me somewhere around 10 up and 30 down. It varies quite a bit. It’s a very inconsistent connection, so when I do this like we’re doing today, I make sure that this is the only client on that outgoing segment.
Jeffrey
Within your house, is it just a one gigabit switch or would you want a 10-gigabit switch?
Daniel
It’s just a one gigabit switch. I would like to go to 10 gigs. I try not to push any of the video bytes over Wi-Fi because physics limits you. So, I use the hard wire for the video.
Jeffrey
That’s really interesting. You have one big gigabit switch. A lot of people have a one gigabit switch, so it’s popular now, but you’ve got all of the video running across that instead of having to pull them all into a switcher and so really, it’s just the software that’s grabbing the video feeds on your computer.
Video Systems
Daniel
That’s correct, and if you’ve got VLC for Windows, it has an NDI adapter, so you can play music or karaoke on another box in the house and broadcast that video and audio along with the camera stuff. I also have a separate feed for background music. It becomes a plug and play video system.
Jeffrey
Once it’s on your computer, where does it go?
Daniel
Well, I told you I use OBS, I sort of fudged a little bit. I actually use extreme broadcaster, which is the paid version of OBS software. I have it set up with 10 scenes.
Jeffrey
I think all the videos on your website are a demonstration of every technique that you tend to use. For listeners who want to go to danielbmarkham.com, they can see all the effects there.
What and How to Share What You Know
Jeffrey
How do you choose what to teach, what to share? And how do you prioritize? I imagine you could create a list a mile long that you could never get through, but then you must prioritize something to be first.
Daniel
I am my own worst enemy, my friend. We’ve met the enemy, he is us. Most of us who are autodidacts are the type people who pick up a dozen projects and don’t finish one. With the Nerd Roundup weekly podcast, I had to find a way to fight my own predilection for diving in to 100 things and not finishing them. What I decided on was this news of the week concept where I just bookmark things, such as interesting tech articles that I come across. I put them on a Google sheet, and it’s an open door.
My belief is that the content for those things really doesn’t matter that much. If you can provide a forum, you can find the right people for participating the right way, and then you’ll naturally drift into more interesting tech topics to cover. We’ve done social media, and all sorts of cool and interesting things, but that’s because we have the people with the right sort of attitude who are willing to take on any problem.
Using Humor to Teach
Jeffrey
There are so many new programmers getting into the industry. What do you find that they need to know that the education system doesn’t commonly teach?
Daniel
I decided every week to lead off with a bad nerd joke; like, “Did you hear about the programmer who got fired? That’s right, because he couldn’t get a raise.†I say that half kiddingly because I think it’s important to be able to think of things sideways, and too many times we don’t do that.
We’re given this architecture, this language, and we’re given this customer now with all these constraints. If you can tell a bad joke, or you can just joke about anything, then you can take a topic and rotate it around a little bit, so it becomes quite easy to solve. Then you can ask better questions and do better work.
I do think joking is an important thing to do, because it’s important to be able to step outside the constraints you’re given. I find over and over again we’re quite good at teaching tech, and quite good at teaching details with various languages and platforms.
When programmers are given constraints by the users or the product owner though, they don’t really think through why those are there because they weren’t required to do that back in school. So, we prepare programmers to figure out, “Why am I doing this? Because if I know why I can probably do it a lot better.â€
“Good Enough Programmingâ€
Jeffrey
I had an old professor of mine, who is still a friend to this day. I remember him saying, “You need to finish your software.†There’s a lot of people out there that don’t finish their software and it requires them to keep running.
Daniel
There was something that I had never heard of before called good enough programming. Good enough programming is, “I solved this problem, I created value, I walked away from the code, and I never had to look at it again. That’s good enough.†We have a lot of people trying to be perfect programmers who have no experience of being good enough programmers. That is a problem this industry has had for a long time.
Share What You Know About Microservices
Jeffrey
I’ve worked with so many teams that use the scrum notion of a backlog, and the backlog becomes a mile long. It makes the programmer feel bad that they haven’t gotten to all these things. It is a psychological thing and the pressure to pull more things through, instead of realizing we had a bunch of ideas, but we are done.
Daniel
One thing I talk about in the first book is that whatever your team is doing, you should be able to have the entire backlog in your head at one time. That naturally limits the backlog. It also gives you the entire problem that you should be worried about instead of just the thing in front of you.
Jeffrey
Well, that’s an interesting philosophy. It makes me think of all the arguments and the handwringing over microservices versus monolith applications and how big an application should be. Yes, constraints are liberating.
Business Features
Daniel
I have reached the conclusion that microservices as strong typing systems are only useful in terms of one particular business feature at one time.
Whatever concept I’m trying to work with only has meaning inside delivering value to an external user right now for this particular feature. That naturally limits your microservices to things that do useful things for the business. If your business isn’t having a conversation about them, they should not be microservices.
So, I tossed a whole bunch of stuff out that I believed wholeheartedly in for many, many years. It’s funny because once you get to that point where you’re just using strong typing for a particular feature, then whether it’s a microservice or not, it’s just a compilation decision. Once you realize that you see that you’ve been making your life much more complicated by making this compilation decision before beginning coding.
It doesn’t matter how many servers it goes through or whether it’s in one big piece or not. All of that stuff should not matter as it’s not part of the solution.
Jeffrey
You said a couple of interesting things I want to review. The first one that I heard that jumped out was, if the business isn’t talking about it, it shouldn’t be a microservice, and I’ll translate that, it shouldn’t be an independent service. Lots of times teams will segment a system into multiple different Git repositories each one having its own process and deployment different, but it wasn’t a business need for that segmentation. It was just decided. You are saying that the architecture should follow the business language or how the business thinks about that feature?
Daniel
That is correct. I think that another way of saying that is the platform and the language choice should tell the business something they did not know before.
Jeffrey
You also said to have strong typing within a particular feature, not across features. And the assumption is, if you do have independent services, you might even have them in the same programming language, but if you’ve declared them architecturally independent, whether you call them microservices or just a different application, it’s a different code base. It could be in a totally different programming language; in which case you’re not going to have consistent typing. It’s impossible across it anyway.
Daniel
We’ve been doing this wrong all along. All of us know we have been.
For example, if we want to scale up to a million processors, or scale down to some guy’s cell phone, I’ve got to throw away some assumptions. This gets back to what we just talked about which is turning things around to a different angle here. I’ve got to throw away some assumptions and constraints and one of those is that there will be one ring to rule them all, and that I will come up with some sort of master model that will do everything.
It doesn’t work for me personally; I can’t come up with my own master model. Expecting an organization to do that, it’s just a pipe dream. It’s ridiculous.
Share What You Know About Working with Businesses
Jeffrey
There’s a lot of programmers who haven’t been through a situation where they realize that different parts of a company have a different definition of “customer.†Talk about that a little bit.
Daniel
We created all these tools to keep concepts together and how they relate to one another. It turns out a lot of that stuff is more useful as a way to help us think about problems than it is about a way to code it. A lot of the tools we were taught to use are a wonderful way of communication we should use every day, but they just don’t match directly from a conversation to a compilation.
Databases
Jeffrey
Most applications do come back to the database of some sort that has non-null, required fields, etc. If you have a customer table in your database and one of the fields is required, you tell yourself that you have two different applications, and yet they have a connection string back to the same database. Both of them are trying to read, write, or update from the customer table. Do you agree that is sharing a model?
Daniel
Yes, you have a shared database, but you’re coupling through the database. Now the trick is not to couple in a way that creates a mess down the road. You just brought up a great example. Couple in a way that has one customer rule of the database, another set for microservice A, and a different separate micro service B. Don’t do that. Why not?
We have been down this road many times. There’s a reason we have data lakes and data warehouses. It doesn’t mean you can’t write rules in the database. Maybe it’s a different type of question. Maybe you’re asking the question, what should we persist and when? Which is perfectly fine, but don’t couple that into my business functionality in the microservice.
Microservice should take bad data. You could give it anything, it should never fail. The answer is no answer because the data doesn’t work and that should be a business discussion. If it doesn’t match expectations, what are you going to do about that? The answer is not more programming. Never more programming. The answer is, why doesn’t it?
Well, it’s because it’s not important to have this piece of information. Then you’re missing a business process because the business would say whether they need the information or not. What we’re doing by creating these large universal type systems is we’re subsuming the business into the code. We’re trying to program the people interactions and the people knowledge that exists inside people’s heads. It’s counterproductive in a lot of ways.
Asking the Right Questions
Jeffrey
I think the way to explain things and the way to question business process people from the programming team is an important skill. I see a lot of programmers say they can’t do something, and they make that statement to a businessperson. It restricts them. Instead they should ask, “When the user does that, what would you want the software to do?†If you don’t ask, the software is going to throw an error at the user which is never the right answer.
Daniel
This is frustrating from a lot of angles. Most businesses do not consist of that many different things they do. You get a lead, you make a customer, maybe make a call, people perform a service, or they deliver a product. This is a finite list of things you need to do as a business. Consequently, there’s a finite list of questions one has around that.
What we do by not asking those questions at the right time is we subsume those business discussions inside the tech. Then simple question like, “Hey, do you have to have a last name to get customer?†suddenly becomes, “I can’t print that report for you next Tuesday,†because the formulation field last name does not exist in the lookup field. It’s frustrating for the programmer, and it is frustrating for the business owner. We’ve made a simple thing much more complex, and it makes people quite angry and frustrated.
Jeffrey
So many things come down to figuring out how to ask a question to get the business users or the product managers talking about what their vision really is for software.
Daniel
I think the words we use in that question are important. Our job as programmers is to begin with generic questions and narrow them down to something that we can use to create an executable test. Once we have an executable test, then we write the code that makes that test pass.
How to Learn More
Jeffrey
Time flies when you’re having fun with friends. What channels or resources can we point the listeners to?
Daniel
First, Discord, Nerd-roundup, and links to all the articles are on my blog. The blog is danielbmarkham.com. If you’re interested in the conversation, drop by our Discord.
The Darklang guys are doing some cool stuff. Their idea is to take an F# based language and make it run at scale by making it independent of the deployment targets. It is a cloud language.
Jeffrey
Thanks for being on the show!