The Modern .NET Show

Episode 108 - Azure Features and Career Growth via Content Creation with Mohammed Osman

Embedded Player

Episode 108 - Azure Features and Career Growth via Content Creation with Mohammed Osman
The .NET Core Podcast

Episode 108 - Azure Features and Career Growth via Content Creation with Mohammed Osman

Supporting The Show

If this episode was interesting or useful to you, please consider supporting the show with one of the above options.

Episode Transcription

Hello everyone and welcome to THE .NET Core Podcast. An award-winning podcast where we reach into the core of the .NET technology stack and, with the help of the .NET community, present you with the information that you need in order to grok the many moving parts of one of the biggest cross-platform, multi-application frameworks on the planet.

I am your host, Jamie “GaProgMan” Taylor. In this episode, I talked with Mohammed Osman about some of the lesser known Azure features and offerings, and where he has used them in real-world projects. Some of these Azure offerings where new to me, and have some very niche features - like Azure Custom Neural Voice, which has the ability to produce text-to-speech but for your own voice. Be sure to check out Mohammed’s quiz that he put together for the episode, and see how much you have learned by listening to the episode - there will be a link in your podcatcher.

Along the way, Mohammed shares some fantastic nuggets of advice for all developers (with two particularly amazing nuggets at the end of the episode), and his experience on what starting a blog had done for him in his professional life.

So let’s sit back, open up a terminal, type in dotnet new podcast and let the show begin.

The following is a machine transcription, as such there may be subtle errors. If you would like to help to fix this transcription, please see this GitHub repository

Jamie

Welcome to the show Mohammed. My goodness, it is amazing to be connected with you today. Thank you ever so much for spending part of your afternoon with me with the listeners. And yeah, I’m sure we’re gonna have loads of content for them to just take in. And they’re going to be like, “whoa, I don’t quite get everything that’s happened because it’s all come at me all at once.” So they’ll be wanting to rush off and learn more about you once we finish listening to this, so yeah, thank you ever so much.

Mohammed

Thank you so much for hosting me, Jamie and nice to connect to you and to your listeners.

Jamie

Hey, no problem, not a problem. Like I said, it’s great to be connected.

So what I thought we’d do, just before we start, is maybe, would you mind giving the listeners a bit of a brief introduction to yourself, maybe maybe like an elevator pitch to Mohammed. And then a quick note of like, where they can go to find out more about you so they don’t have to listen all the way to the end of the episode. Was that okay?

Mohammed

Yeah.

So my name is Mohamed Osman. I am working as a software and cloud architect. I spent most of my time doing cloud architecture and reviewing architecture using Microsoft Azure and .NET technologies. And on this side, I am creating also courses for Pluralsight. And I’m doing some writings. I have my blog, www.smartercode.io. And over there by the way, you will find a quiz for this show. At www.smartercode.io/jamie. Specially designed for you guys in the .NET Core show. And that’s me. Yeah, pretty much.

On the on the activity sides, I like reading around personal development and playing football. And right now I have my left leg injured.

Jamie

Oh, no, I’m sorry to hear that.

Mohammed

Thank you so much.

Jamie

Hey, it’s a great excuse to spend the next few weeks just sitting on the couch or resting right?

Mohammed

Yeah.

Jamie

“I can’t come in today, boss, I got a painful leg right? It can’t happen.” I also like the idea that you’ve taken the initiative to set up a quiz. That’s a brilliant idea. So what I’d love for the listeners to do is to take this quiz at the end of - the link will be in the show notes. Take the quiz. Are we saying that they should take it as they’re listening, after they’ve listened? What should they do?

Mohammed

Maybe at the beginning, and the end to see how much knowledge you get just to…

Jamie

Yeah, that’s a great idea. So take a moment and take the quiz now. Then come back and listen to the episode. Take the quiz again. And then send a tweet to both Mohammed and myself with like how you did. Like did you increase your knowledge? Did you forget some stuff because you know, I’m a bit of a rambler. And I just sort of sit there and go, “ur erm ur erm,” and have I managed to wipe your memory? I don’t know. I’d like to know. Yeah, send us a tweet or something right? Get in touch.

Excellent. So you’re working as an Azure architect. That’s one of the things that I’ve I’ve been - like working specifically architecting cloud applications. I’ve been wanting to do but I feel like it requires a whole bunch of knowledge, right? Because my own experience of doing web dev for a while has been the standard NTier architecture on a server, right? There’s one server it’s running there. You may be put some kind of load balancer in front of it, and some copies of it, but like building specifically for the cloud means re-engineering and re-architecting your application, right?

Mohammed

Yes, especially if you want to go to the cloud native route, you can go to the shift and left route and take your application pretty much as it is. But then you are not really leveraging the power of the cloud, right. So if you want to use things like serverless functions and platform as a service, then most probably you will need to re-architect certain parts of your application. For example, taking some background jobs from Hangfire. If you’re using Hangfire, and put them into maybe Azure functions or Azure web app web jobs, things like that. If you’re havin, yeah, also some messaging that happens on prem, then you need to refactor it to services like Azure service bus or event hub.

Jamie

It feels like there’s loads more to learn, right? It feels like there’s: you have to know about all these different features. That Azure can be used to help you to architect your applications, right? And it feels like sometimes there’s just new things being released all the time, right?

Mohammed

Yes.

Jamie

So how do you keep up with everything then?

Mohammed

I mean, it’s a difficult question. I remember two or three weeks ago, I was giving some talk around Microsoft Azure to a few friends. And I scroll down in the services. And I told them, “honestly speaking, I haven’t used more than 50% of those services.” So I think it comes down to knowing what’s really important to you based on your role.

For example, if you are a developer, right, so there are some specific services that are of interest for you. Like Azure SQL Server, Azure web apps, Key Vault, AppConfig, Cognitive Services and so on. You need to know those services really well. And the thing is that even if you know them, Microsoft change them quite frequently. So I would recommend to follow their conferences, Microsoft Build conference and Ignite are really good for that. And then the Azure blog, you can just put it in your RSS feed, and then try to catch up from there. And don’t try to follow everything and Microsoft Azure, I myself, like Udemy, I’m from a software development background, and they are more interested in the services from the development point of view. Like, I’m not really interested if Microsoft introduces new security standard that they support, or they have some service. I don’t know, for quantum computing and stuff like that, I don’t really focus on those services, neither I have the capacity for that? Actually.

Jamie

That makes sense. It’s “focused on what makes sense to you,” right? For instance, I’ve really only ever use a couple of things right: I’ve used web apps, I’ve used their AKS - their can Kubernetes stuff - and I’ve used like cosmos DB and some SQL Server stuff. And then that’s about it really. But that for the projects that I’ve worked on, in my own time that required it, that was all that was needed, right. And I feel like in my personal opinion - now obviously, I’m not trying to put words into your mouth - but my personal opinion is build it with what you know first.

Mohammed

Exactly. Yeah, exactly. And if you want to expand your knowledge, you can look at the Microsoft Azure certifications, they are a good tool, actually, to know what’s available. Not necessarily like the best way to learn the actual technologies. But at least if you take a certification, like AZ-204, you will know what do you have in your tool set. And then later on, when you face a problem you’ll say “ah, okay. This seems to be something that I can do using as your API Management. Or I can do using a CDN,” you can dig deeper into that service and look into the tutorials and so on.

Yeah, so that’s actually one of the challenges with Microsoft Azure is: there are so many things, actually, that can make your life easier. But since we, as developers don’t know about them, we tend to build those things, you know, manually, and we end up building very expensive and unmaintainable solutions.

Jamie

Sure, yeah. Yeah, I’ve been there myself where, you know, I’ve spent weeks building something out. And this was back, you know, five-six years ago: we spent weeks building something. And I was like, “okay, I’ve been told I have to run on a VM, here comes to the VM. There’s IIS serving it, excellent. And you know, it does all of these cool funky things and has a bunch of API endpoints that kick some jobs off, and it’s there as a scheduled task inside of the Windows Task Scheduler. It’s doing all the stuff for me, and it’s taken me weeks to figure it out.” And then someone joins the team and says, “okay, that right there is a web app, that right there is a web app, that right there is a function. This right here is a timer function.” And I’m like, “what?! You mean, I could have just stripped all these bits of code out and thrown them up on to Azure?”

But the thing that I learned from that experience was, quite literally what I said earlier on, right? It felt like it was quicker for me to throw it together in the way that I understood, to prove that there was actually a use case for this stack of software. And then I could tease it apart and say, “right, okay, now we’re gonna lift and shift like you said, lift and shift this over to Azure Functions, lift and shift this over to a web app, or lift and shift this maybe over to a different cloud provider. Maybe there’s something that Azure doesn’t do, but another cloud provider does. I don’t know.” But yeah, I think you’re right. I think it’s start with what you know, take maybe one or two certifications and just play around and see what there is, right?

Mohammed

Yes, exactly. And just don’t be afraid to experiment and try things. This is how you will learn.

Jamie

Yeah, those of us who went through a sort of university or code - what are they called, code booting, boot camps. Those of us who went through that sort of direction of learning have probably done experimentation based learning all of our careers right? All the way through university or a coding bootcamp is, “why isn’t this working? How do I get this working? Let’s get it working and move on,” right? And that’s kind of all you need to really do.

Mohammed

Yes, exactly.

Jamie

So, yeah, so like I said, there’s a couple of services that I know of, I really like the the open AI stuff. And there’s some machine learning stuff, but I don’t use very much of it. And this is, I feel like, how do I put it? Azure is not a tool made specifically for me, right? It’s like a generic cloud tool, right. And I feel like that’s why there are so many of the different tools out there different functions, different features, different things that you can do.

And so what do you think are some of the things that you’ve used in the past on Azure that are not really that - I don’t want to really use the word “famous,” but maybe developers aren’t that familiar with. Like, what are some of the hidden things that you’ve done in some of your projects that are like, “oh, cool, there’s an Azure feature for that!”

Mohammed

Yes, actually, there are a couple of them.

One of them is called the Azure API Management. So let’s say that in your organization, you will have many API’s that are developed by multiple teams, and you are exposing them, right. And typically, you have certain cross cutting concerns, things like logging, authorization, monitoring, stuff like that. Usually, what you’ll see so many teams doing, they will implement that logic, you know, manually in every API. And on the long them, you actually end up with lots of boilerplate code that’s hard to maintain across so many systems. So here comes a service from Microsoft called Azure API management. And as the name indicates, it helps you to manage your API’s.

So what you will essentially do is you will onboard all your API’s into that Azure API management service. And then you can offload all those cross cutting responsibilities to the Azure API Management. So it can do you know, things for you like authentication, even doing things like OIDC flows with your identity server, logging, stuff like that. And then your developers who are building the API’s, they should just focus on the business logic of their API: saving things to the database, doing some calculations, returning back results to you. I mean, even in the Azure API Management, if you want to, you know, if you want to do certain transformations, like from XML load to JSON load, you can do that as well, through something called policies. If you want to connect it to vNet, you know, if you have some resources that are secured in vNet, you can also do that. Even Microsoft has an offering that can be hosted on premise, if you want for Azure API Management. I haven’t used it before, frankly speaking, but I know that it’s available over there.

Jamie

Excellent. I do like the idea of being able to manage everything in one place, right? Because like you say, it leads to less boilerplate code. And it leads to more maintainability, right. And especially this is one of the things that I say to clients and customers, when they’re very reluctant to jump to the cloud, I’ll say, “hey, you know, it’s fine. We can build the software, we can host it on a machine in your server stack or whatever. But like managing those system updates becomes your job.”

Mohammed

Exactly.

Jamie

Making sure it’s got the system updates installed; making sure that you’re updating all of the components that it requires. And then checking, you know, for malware and things like that. And then like checking that you’re not getting any kind of - I’m not saying that you’re impervious to malware if everything’s on the cloud, but it’s a little bit harder to do. All of that stuff becomes a lot easier because you offload all of that trouble of running the software, like the infrastructure side of it to someone else: it becomes someone else’s responsibility.

Mohammed

Exactly.

Jamie

Regardless of which cloud provider you choose. I feel like, you know, what is it five nines, seven nines, the SLAs for Azure or something like 99.99999% uptime across the year or something like that. I can’t remember off the top of my head, but it’s something like five nines or seven nines; which equates to something like: when it goes down is down for a day. That’s it, then it’s back up. And then when it’s back up, your app comes back up. And the database comes back up. And it’s in the state he was in when he went down. Not like, can you imagine you have a server on premises? And you know, maybe the server explodes or the building catches fire. There is no way to get your application back to the state it was [in] at the crucial moment when everything fell over, right?

Mohammed

Yeah, exactly.

Jamie

Not when it’s on prem. Unless you are lucky enough to hit that backup button just as it happens.

Mohammed

Because you are super fortunate.

Jamie

Exactly right, exactly. So yeah, that’s one of the things I always say to people is that, “there is a learning curve. But I feel like most of the cloud providers are offering the same stuff, different names, but the same stuff. And as long as you learn it for one, you can transfer that knowledge to the other.” In the same way, that if you learn how to use Windows, you can use Mac OS, or a modern Linux desktop distro. They’re all doing the same stuff.

Mohammed

Exactly. There could be some concepts, which are different, but actually that’s very marginal difference. And I have actually a friend of mine who used to be a Microsoft Azure expert. And then AWS hired him. And he went to the other company. And actually, they just liked his knowledge in Microsoft Azure. And they knew actually, he will be able to translate that knowledge. And in less than one year, he is now actually training and consulting their clients.

Jamie

Yeah. Because, yeah, like I say, it’s all pretty much the same stuff, just different names and slightly different API endpoints, right.

Mohammed

Exactly.

Jamie

Excellent. So we talked about the API management are there any others? So just as a quick aside for the listeners, obviously, we have a chat before we hit record. And I can see you’ve written down some stuff here that I’ve never even heard of. There’s one here would you mind talking about Azure Custom Neural Voice?

Mohammed

Yes.

Jamie

That [sounds] awesome.

Mohammed

Actually, this is a very interesting service. And it reminds me of the deep fake.

So the idea of this service is Microsoft want to enable you to generate human similar voice. You know, Microsoft, they have another service called Azure Cognitive service that we’re going to speak about in a moment, you can use that service to generate text to speech. But there are very specific personas that you can use. However, with this service, you can take your own voice, send it to the cloud, train it in a specialized service by Microsoft, and then generate the voice as you want on the fly.

Of course, you can do so many bad things with that service. That’s why Microsoft will require you to fill in some specific intake form, they will need to understand the your exact business case, and they will take a consent from the user home voice will be emulated, so to speak.

Jamie

Sure.

Mohammed

So it’s a very powerful service right now. It needs to be trained, as far as I remember, like 20 to 30 hours. That’s how long the training takes. And it was very expensive, actually, to run the training. Of course, you need it one time. And then after that, you can generate as many voices from that voice as you need for like a lower fee. But the startup fee actually, it’s quite sizable, I think it’s a few hundred dollars.

Jamie

Right. Okay. So you’re saying then, that producing this podcast just got so much easier? I cna just write it out and have Azure produce it for me.

Mohammed

Exactly. Theoretically, so we could train our voices to Microsoft Azure and then exchange some text files.

Jamie

That’s it. I like it. Oh, my goodness, I may have to try that out. That’s brilliant.

I do remember that there was something - I think I brought it up when we did our behind the scenes conversation, our discovery call that we did. There is this amazing video by a team of visual effects artists called Corridor Crew. And I think they’re based out in Los Angeles, I may be getting this wrong, I’ve never really looked at where they’re based, right, I just like to watch the videos because I’m very interested in how visual effects work and how the the artistry and the science behind it all, kind of like the artistry and science of of development, right.

But they have this video, and I’ll link to it in the show notes, where they use the popular app Descript. So Descript allows you to put some audio into it; it’s one of these products that Adobe showed off years ago where you give it some audio and you can give you a text view and you can delete the bits of text and it removes it from the from the audio track. But you could also arbitrarily add your own text and it will try to fill in the gaps. What they did was they took gtp-3 which is a machine learning algorithm for writing stories based on prompts. And then they took Descript and they generated, using loads of training data, they generated a speech by one of the other people in the office; and had this recording of the speech given in place of the person giving the speech to the people and work at the company.

That’s a really boring description of what I’m what I’m getting at. But the point that I’m trying to make is that they used two different tools: one to write the speech, you want to actually deliver the speech. And the person was sitting there in the room, sort of just sitting there watching this thing happen. It was absolutely amazing. Just the things that we can do.

Mohammed

Yeah, this is really frightening, actually, if it gets misused,

Jamie

Absolutely. But I think perhaps, like you say, because they’ve got the forms you’ve got to fill it in, and you’ve got to give a good use case and the price as well. That may put off a lot of people who want to do nefarious things, right. Let’s hope so. But I think that’s one of the biggest problems with with machine learning. And like, the speed at which it’s picking up is that there’s loads of nefarious things that you could if you want to do.

Mohammed

Yes, exactly. It can be easily misused if it’s not properly managed.

Jamie

But I think that’s where I think there’s a group machine learning… I think it’s called machine learning for humanity, or I’ll get a proper I’ll get the proper name for it and put it in the show notes. [ED Note: it was Responsible AI] But like, there’s ethical artificial intelligence, I think it is. Microsoft a part of it Google a part of it, Amazon are part of it. Lots of really big companies are part of this group that are trying to answer those philosophical questions of, “if we give people these tools, and they are malicious with it. How do we stop them from being malicious with these tools?” Right.

Mohammed

Exactly. And by the way, this is the reason why gpt-3 is exposed as API’s. So they don’t want to give the people the actual models, because they want to be able to revoke it easily, if someone misuses it. And also, there are some other reasons because if they are computationally advanced to run, and so on. But the main reason actually, they want to prevent those scenarios whenever they discover them.

Jamie

That totally makes sense. So we talked about Azure Custom Neural Voice, did you say you’ve used this already? Or is this something that you just know of and you’ve been playing around with? I’m trying to figure out where you would use this as inside of an app, you see.

Mohammed

Unfortunately, no, I didn’t use it, I wanted actually to use it to produce one course, you know, I wanted to just record my voice, train it and then generate it just to save some time. But the training costs really deterred me, as by the way, this is just at the time of the recording. Of course, as the time advances, technology becomes cheaper. So don’t let this discourage you, and go check the pricing again.

Jamie

Sure, sure. And I mean, it could be that, you know, if you work for a company who are interested in training, and growing their employees, it could be that you could perhaps have the company pay for the training, and then you say, “hey, look, I’ve made this thing. It seems, at the moment, whilst I’m demoing it to you, it may seem pretty useless from a business perspective. But guess what? We could maybe have, I don’t know, like, maybe, okay, so you go to the website, and you get the chat box pop up, right? Or what if I have issues with with accessibility? I can’t see that? Well, maybe it could do a thing where it says, if you push this button, or if your screen reader gives you the option to, you can actually listen to me give you the help through the website, rather than have your screen reader to do it or whatever.” I like that idea. And like you say it could be useful for course writing or speech writing, right?

Mohammed

Yeah, exactly. Exactly. I’d actually, I really liked the scenario that you mentioned, enabling people with accessibility, this is something really important.

Jamie

Yeah, and I get the feeling that that’s probably where this offering has come from. Like this idea of, “why don’t we give the people the ability to solve this problem using technology,” right? Or perhaps, “what if you are in a public facing role, and you’re able to communicate to people, but then you suddenly become ill? Maybe you get laryngitis? Or maybe you’re told that you have to rest your voice for a while, but you have speaking engagements or requirements where you have to give a talk or give give a performance?” Well, you could probably - it wouldn’t be the same as you doing it - but you could probably use this software to do it for you, right?

Mohammed

Yeah.

Jamie

So you’ve also mentioned in our documentation: AppConfig versus Key Vault. Now I really like having all of my config strings somewhere that I can just pass around, right? And I really liked the idea of user secrets. So you know, this is like your database connection that doesn’t end up in app settings or whatever. And I’ve used AppConfig in the past where I’ve gone, “my app is running. And I’m going to go to the web to pull down the config.” I like that. And I’ve used Key Vault when I’ve used or rather a version of Key Vault when I’ve used Kubernetes. But I’ve never actually use the Key Vault offering that Azure has. Is that sort of similar, is that the same, am I just talking nonsense? What’s going on?

Mohammed

Actually are correct, they are quite similar. It’s just the Azure version of the Key Vault. I think there is a common on prem version from Hashi Corp. Is that what you’ve used you’re most probably?

Jamie

That’s what I’ve used it. Yeah.

Mohammed

So the key vault version is pretty much you can use it to store like normal secrets and certificates, you have also the option to use what’s called HSM modules - and that’s the hardware security modules. And that’s where you have the encryption down to the hardware level, you know, if you have tight security requirements. AppConfig is quite similar, actually not really similar service. But it’s not meant for the secrets, it’s meant, you know, for configurations. For example, if you are billing a customer with some frequency, and you want to make that configurable, this is not really a secret. And then you’re going to store that in the AppConfig, you can actually use it to store feature flags. So you can enable feature, I think there is also like, you know, out of the box portal you can use just to enable to toggle on and off those flags. So that’s something the app config provides you.

Also, the way how the secrets are structured in the AppConfig is more neat, because you can use labels, you know, for different environments. And yeah, there is also another way, I can’t really remember it, how you can structure those ones. But those are pretty much the differences. In practice, actually, I know so many teams using KeyVault for both configurations and secrets.


A Request To You All

If you’re enjoying this show, would you mind sharing it with a colleague? Check your podcatcher for a link to show notes, which has an embedded player within it and a transcription and all that stuff, and share that link with them. I’d really appreciate it if you could indeed share the show.

But if you’d like other ways to support it, you could:

I would love it if you would share the show with a friend or colleague or leave a rating or review. The other options are completely up to you, and are not required at all to continue enjoying the show.

Anyway, let’s get back to it.


Jamie

I mean, it makes sense, right? Every team is different and every project is different. So if you you know, if you’re storing certain things in KeyVault, or indeed AppConfig, and just your application is engineered to use that, you probably don’t want to be using another offering just because it means that you can ship the software faster, right? Because at the end of the day, yes, security is very important. And I’m not saying that you should not do secure coding practices. But also, you know, we don’t get paid until the customer pays us for the software. And they aint gonna pay us until we get it into the hands.

Mohammed

Exactly. And even if we get it into their hands, they won’t pay us until it’s really useful. So they won’t care if you are using the right practices or not.

Jamie

Absolutely.

Mohammed

They want things that generate value to their business.

Jamie

I often say to mentors and juniors, you know, I as your boss, regardless of whether I am your boss or not, but I as your boss, as the client is the customer, whatever. I don’t care how you did it, just that when I push that button, it gives me money. That’s all I care about. So you could build it with the greatest features in the world. But if all it does, when I click that button is give me money. I’m happy.

Mohammed

Exactly.

Jamie

So we’ve got here Azure Forms Recognizer. Now, we do have another episode planned for the future, where we talk very, very in depth about Form Recognizer. But let’s talk about how you’ve used it. So that’s a really brief overview of Form Recognizer, and then tell me, maybe how you’ve used it in in an app. If that’s okay.

Mohammed

This is a really interesting service. Because you can use it to pass in an invoice, you know, claim whatever document has a structure that’s, you know, in a form like a key value pairs, and then it will automatically pass those values and give them to you, I think it was XML. Yeah, I think XML. Actually, you can even put it in a class and so on to get a nice structure. So, that’s really useful actually, if you want to automate the processing of, you know, handwritten or like physical document. I have used that actually, you know, to automate entry to accounting systems. So, you get an invoice or a document and then just rather than taking things manually, you can send that document as it is and then it will parse all the parameters like date, amount, currency and so on. Actual I am seeing also like there are some accounting systems now started to provide that feature out of the box. So you can just maybe like take a picture of your invoice or receipt or whatsoever, they will process it behind the scenes - most probably using a service like this - and then just to store it.

Jamie

Again, right, this feels like it’s very specifically a problem that perhaps Microsoft have had, where they’re like, “there’s a bunch of OCR libraries out there. And we could write an app that does it. But hey, guess what, let’s wrap it up in,” I’m guessing that there’s some machine learning going on behind this as well, right? You talked about like a model, right? And just let’s wrap this up and give it I don’t want to say give it away. But you know, make it easier for developers to to create this stuff. I love that right? Because it makes everyone better.

Mohammed

Exactly. Exactly. Actually, it enables quite a lot. Because number one, as you mentioned, if it were library, that means you need to take care, you know, to update it upgraded, and then you don’t know if your API’s are compatible and so one. But if it’s an API in Microsoft Azure, then Microsoft takes care of everything, they are giving you the latest and greatest models. They are giving you the support that you need, you have pretty much everything you just need to call the endpoint. And that’s it.

Jamie

Yeah, and I absolutely love that as someone who has spent the past five-six months dealing with lots of different libraries that have gone into and out of support, across loads of different projects, making sure that you have the latest version and then rewriting the code to make it work with the latest version. That’s a real problem. Right?

Mohammed

Yeah. And it’s not fun to deal with. And it becomes very hard to justify right?

Jamie

Oh, yes, absolutely. Absolutely. And then like, you can’t not do it. So you’re forced to upgrade. Because, you know, maybe there’s some security vulnerability with the previous version. But you have to upgrade to the new version. Because otherwise maybe your code is now less secure than it was. But then if you want to upgrade you, then you’re stuck with, “well we’ve got to rewrite huge parts of,” hopefully you’ve separated concerns in your programming to interfaces. But you know, sometimes that doesn’t happen.

Mohammed

Yeah, exactly. I mean, even if you do them as interfaces, then you need to fix the implementation of those interfaces.

Jamie

Absolutely. Absolutely.

So I think what we’re getting at here, if you don’t mind me, saying Mohammed, what we’re getting at here is that there’s loads of different Azure specific offerings, and some of them are really specific, like the Forms Recognizer, the neural voice, things like that. And some of them are kind of like, I don’t want to say not as specific or general, but it feels like they’re a little bit less specific to a very particular problem domain. And I think that what you’re saying is that whilst there are loads to pick from, you don’t have to, right?

But then I guess that means that us as developers, we need to make sure that we are still sticking to best practices when we’re building code, right? And we just, like I said, we just poke at an API, “hey API, here’s my document, give me the key value pairs for the important fields,” or “hey API, here’s the text, give me a WAV file or an mp3 or something of the recording, right?”

Mohammed

Yeah.

Jamie

So is that the most important thing then? Rather than knowing all of the hundreds of different services? Yeah. Okay. So here’s the thing, is it more important to know all the different services? Or is it more important to understand like infrastructure and certificates and sort of basic concepts that we all agree that we know?

Mohammed

That’s a very good question, I would say it’s a mix between both. It’s always [good] to know at least what’s available on the plate. So that you know, whenever you see a problem, at least you’re able to connect the dots because you know, you don’t know what you don’t know. But then, of course, there are certain pieces you need to master like, you need to know Azure web app services, you need to know things related to Key Vault, maybe Azure SQL. There are just some core services that you should be familiar and confident with. And the other services as the business problem comes as the scenarios comes, just start to learn them step by step, but be aware of them at least.

Jamie

That makes a lot of sense, right? Because, you know, my own personal yardstick of someone who is a middle to senior developer. It is not about years of experience, right? You can have 25 years of writing “Hello, world,” does that make you a senior developer, right? Whereas you can have two or three years of very, very varied experience with different technologies, different offerings from different companies, solving different problems in different languages. I feel as though as long as that second person with the varied experience can demonstrate that they’ve understood what they’re doing on a deeply technical level, they are the senior engineer, whereas the person who has done “Hello, world” for 25 years, maybe not. Yeah.

Mohammed

That’s 100%. Correct. And I have met people like this, I have interviewed people with supposedly, like, you know, more than 10 years of experience, but on practice, when you test them, you’ll find that actually, no, it’s not that much. And then you’ll find some people who just graduated from the University a few years ago, but they had been really working hard on their career. And you actually, you get to learn during the interview from them.

Jamie

Yeah, I’ve said in the past that I am more than happy to learn from someone who, regardless of where they are in their career: right at the beginning, somewhere in the middle, towards the end, maybe their career is finished, and they’re retired, I can learn something from anyone, regardless of where they are, right. And that is because we all have such different journeys through our careers and our experiences in our lives, right.

Mohammed

Exactly.

Jamie

So, you know, you and I we’re .NET developers, but you’ve gone in a completely different direction to me, right? A friend of mine is doing .NET Maui, because he’s also done lots of Xamarin. And because he worked with Mono for a long time. Technically, all three of us are .NET developers, but we’ve all gone in different directions, right. And so, you know, there’s stuff that I will learn from you, and then I will learn from this other friend of mine. And it’s amazing just how much you can pick up from people, regardless of where they are. This is why I kind of don’t like titles, you know, job titles are like senior and, and lead and junior and all this kind of, what does that actually mean? It doesn’t mean anything, right? Because anyone in that journey can teach you something about the stuff that you use on a daily basis.

Mohammed

Exactly. And especially in our industry, I would say that as time goes, we can learn more from the juniors. Because as you can see, I would argue that at any point in software development, like 90 to 85% of the knowledge that you need, it’s from only the past five years, like you have that moving window of the past five years. So as the time goes people who are very senior, you know, like they have 20-25 years of experience, they don’t have much competitive advantage, actually over people who are like maybe seven years of experience. Yeah, of course, that’s arguable. And you should take it with a grain of salt. But I would say in a very specific scenarios, and very specific industries and projects, but in general, most probably both of them, they can produce the same thing. Pretty much.

Jamie

Absolutely. And then, because technology is moving so fast, but it’s slightly cyclical - so it goes around in circles. Yeah, the 5 to 10 years, I think, is the maximum amount of knowledge that you would ever need to [have]. Like, for instance, when I started doing .NET stuff, there was this type - I think it’s still available in .NET six, it may not be - called ArrayList. Now, ArrayList was a generic, you could literally it was an array, but it was a generic array, you could put whatever you wanted into it. You can say ArrayList.Push() and then push and int, ArrayList.Push() then push a string, then ArrayList.Push() then push a complex object. The problem was when you were popping them back out, you needed to know what order they were pushed in. So then you can then pop them back out. So it’s kind of like a stack, right? So I said, complex object last. So when I did ArrayList.Pop() whatever the last item I put in was, I had to say, of type. And if I didn’t do that, I got a no ref because it’s not the right type, right. But it was then popped off of the ArrayList stack. So then the next item is available.

But you don’t need to know that because for better or worse, that’s been, I think, abandoned as an API. Maybe it’s still around, maybe it isn’t I’m not trying to say that if you’re using this API is a bad thing. But what I’m saying is this is like a .NET [Framework] One, .NET [Framework] Two thing. You just don’t need to know it these days. Unless you are indeed working on C# or .NET, right, then you may need to know it.

Mohammed

Exactly.

One of the interesting stories actually that happened to me is we’ve been working in migrating some project from, the project was hosted on mainframe and in VB.NET Two, and actually the the source code was lost. So pretty much we don’t have a source code, you have a documentation of that source code. And I was leading the project at that time, and they had a meeting with the guy who is handling it. And obviously, since it’s a mainframe project, he was way older than me. And he started describing things I have no idea about, about mainframe. You know, like certain phrases, certain concepts, I was totally lost during that meeting. But then what we ended up, “okay, let’s totally forget about those mainframe things. Let’s see the business logic. If we want to build the same thing, what should we do?” And we just extracted the business logic from the business experts, of course, because we don’t have the source code, we migrate the database, and we forget about mainframe. So we don’t really need to know about mainframe. I mean, of course, some people need to know because, you know, there are still some jobs for mainframes, especially if you’re working in the banking sector. But for the vast majority of people, it’s not really needed.

Jamie

Absolutely, I agree. And I would say, and this may lead us on to the next topic, but I would say, writing about that experience is usually a great way to share that knowledge, right? When I learn something new, I like to pass it on, right? “Oh, cool. I’ve learned about there’s this operator in JavaScript, I only learned about it six months ago. It’s the triple dot. And what that does is it takes the object you’re just about to give it, deconstructs it, and so that you can copy it into a completely new object, like a deconstruction copier,” right? Previously, if you wanted to do a deep copy of an object, you may decide to JSON.stringify it, then JSON.parse it right. But that’s a whole bunch of CPU cycles, you’ve just wasted creating a string to then parse it back out, right? And what if the creation of the string doesn’t work, then you can’t parse it back. But you can use this deconstruction operator when you’re copying an object to literally do a deep copy. And it’s built into modern JavaScript. And that’s great.

So I, you know, for a few days, I was like, “oh, my goodness, I gotta tell you about this thing, right?” I go around to everyone I knew who was a developer, I was like, “you may know about it already. But I just wanted to tell you how happy I am that I’ve found this thing,” right. Let me tell you about it. And I think that doing that with maybe writing, or podcasting is a great way to sort of share that knowledge, right?

Mohammed

Totally agree with that. And actually, I’m really happy to hear about that, because deep copying has always been a challenge for me. And I used to do it like, in a very workaround with the styles. And I always feel this is not really clean way of doing it.

Jamie

No, it’s a, it’s really, it’s really good. I’m just seeing if I can find the actual name for it now. It’s called a spread or rest operator. So it expands all of your things out into like a temporary object. So then you can just copy that out. It’s brilliant. Definitely worth looking into the three dots. I’ve probably got the name wrong, but that’s because I’m not a JavaScript expert, right. But it’s a wonderful piece of technology.

And I think, based on that, let’s pivot and talk about sort of branding for developers, right? Because I see, that’s one thing that you wanted to touch on. And I think that it’s an important thing that for those who want to put themselves out there, and have a blog, and have a YouTube, or be the person at the conference. I think it’s important to know how to do that. So I was wondering, could you share some of your experience with that?

Mohammed

Yes. Actually, the first time I started writing about my experience, publicly, I would say that was in Blogspot and Facebook posts, until one of my friends recommended me to, you know, formalize that and set up my blog. And from there, I started writing and you know, actually, as you write, you figured out so many things as you go. So you figured out that you start to learn how to organize your concepts, you started to learn how to create an article outline, set up blog, you know, learn a little bit of WordPress or whatever hosting you’re using. And then you start thinking about how I can promote this, how I can share it, how I can collect feedback from the audience and then, “okay, should I enable commenting stuff like that?”

And automatically, you start seeing value coming, you know, like, the best feeling actually I feel when I hit publish is satisfaction that you know, “I build something now that’s out in the world,” and you know, when you start seeing those visits It’s and all those analytics, you feel that, “yeah, I helped 50-60 People today.” And you start getting actually some opportunities, some people reaching out to you. And actually, my blog helped me quite a lot in my career, either, you know, finding side gigs, getting interview opportunities, being perceived as expert or authority. So, you know, it becomes your online CV. Like, whenever someone wants to learn a little bit about me, I just send them my website, and then they start reading. And then they start, you know, building an idea how my character looks like, and so on.

So I would advise every developer to start with that, and I know, I have been there, like there is a psychological barrier, with that, “I don’t have enough experience, I don’t, what should I write about?” and so on. I would just say, please just go and start, you know. And as one of the business experts said, I don’t really remember he said, that “actually, you don’t learn, then you’ll figure it out. You’ll figure it out. And then you’ll learn.” And this is what you need to do with blogging just to start, hit publish on the first article, it shouldn’t be perfect, it shouldn’t be the best blog the world. Just share it. And as the time goes, you will improve and you will figure it out. Yeah, actually, you will unlock a big potential.

Jamie

Absolutely. One of the things that I used to do was, whenever I would solve a problem, maybe I’ve been banging my head against the keyboard for several days trying to solve some problem. I’d write down how I got to this not the solution. But how I got to the solution. That’s a blog post, right? You’re talking about a journey you went on, you know. Maybe you’re parsing some esoteric data format in .NET, right? Or maybe you need to integrate a JavaScript chat application with a SignalR server. Well, guess what? That’s a blog post.

And it doesn’t have to be - from my own opinion, now I feel like I’m stepping on your toes here a little bit Mohammed - but like you said, doesn’t have to be the world’s greatest content, you’re not writing for the express purpose of getting advertisers and getting a book deal. And, you know, becoming the best known person in the whole wide world. You’re writing to share that knowledge. And there’s a brilliant thing that Scott Hanselman says, and that’s whenever he gets a question at a conference, or maybe he gets emailed, he’s got a very public email address. He gets a question on, “how do I do this? How do I do that?” Or he’s asked a question by a junior or an intern at Microsoft, what he does is he goes in, solves the problem, or rather helps them to solve the problem. Then he writes a whole blog post about it, and puts it out there for people to see, because then he can then positively affect more people’s lives by making that knowledge public that he can by keeping it in his head and only letting every now and again.

Mohammed

Exactly, exactly. And actually, you’re helping your organization by saving time, right? Because if someone else comes with the same question, you can just point them to that blog post.

Jamie

Absolutely. And I have to say that one of my proudest moments as a developer was not sitting behind the keyboard and doing work. At one of my old jobs, five-six years ago, I walked into the office, and I could see like, you know, I’ve gotten a little bit late or whatever. And three people I could see over their shoulders onto their screens. They had a blog post that I’d written on a few days ago, up on their screens, and they’re reading through it going, “oh, yeah, I get how to do that now.” And that was amazing to me. It’s like, you know, I wasn’t producing the content to try and drive people to the website. I was just like, “this is a problem that I solved. And here’s how I solved it.” Right?

Mohammed

Yeah, it’s a really good feeling, when you see that it’s a really very, it’s a very satisfying feeling, I would say, yeah.

Jamie

absolutely. Because my thing is all about trying to help people, right? I just want to help as many people as I can. So if I can write up a blog post, or if I can introduce someone to someone or whatever, and, and that leads to helping someone. That’s me, I’m done. I’m happy. I can rest easy that that you know,

Mohammed

Exactly. And I mean, we are working in the technology field, right. So we have all the things that enable us just to 10x-100x our efforts. So you can put it in a YouTube video, you can put it in a podcast, you can say it in a conference, you name it. There are so many other means actually, even if you don’t like blogging.

Jamie

Absolutely. And I think there’s something that previous guest Dan Clark said to me once and that is, “be a force multiplier. Don’t worry about how productive you are, how great you are. Think about how you can help the people that you work with be better at what they do.” And like you say, if producing a blog, or podcast, or video, or running a conference talk helps those people, well you’ve just multiplied their productivity, you know?

Mohammed

Exactly, exactly. And that’s actually the way, if you want to excel as a senior engineer, because you know, like, no one can write code fast, like five times, or 10 times faster than someone else. But there are some engineers who know how to work with the high leverage tasks, right? Either by teaching, either by coaching, even if you’re programming, try to work on things that have high leverage. Maybe write a framework that can be used by all the teams across your organization, maybe take a piece of code that’s reusable somewhere and make it a library. Think on that level. Think big.

Jamie

Yeah. One of the places I used to work at, we all had a library of all the common things that we did, right? So in the front end, maybe you’ve got a color picker, right? You’ve got to drop down, you choose a color. Well, if you’ve used that in two projects: go to the library, because then you could just put it in.

Mohammed

Exactly.

Jamie

Yeah, one of the things that I did was, I wrote a script for setting up new hardware, right. They were all, at the time, they were all on Windows, and .NET, Core 2.0 had just come out. And I was like, “hey, I could write a .NET Core global application. So a globally installed CLI application that just sets up the computer and going it can run every so often, and update things, and even force like updating windows and updating all the packages, and stuff and pulling down the library, setting up NuGet feeds.” And that is a force multiplier in itself, right?

You don’t have to go as big as that. You could go as you could be like, like you say, you could have a library of common stuff. And you can say, “you know, don’t worry about, maybe you’re changing the color in the console,” right? That’s not actually an easy thing to do, is seems like an easy thing to do. But constantly changing the color of how text is printed into the console is actually not that easy, right? Especially if you want to be able to refer back as well. So write a library help someone out. Because then you’ve just turned that to our job into a 20 minute job. Right?

Mohammed

Exactly.

Jamie

Excellent, excellent. So let’s talk about ways that folks can get in touch with you, right? You said you’ve got the website, and you said, there’ll be a quiz on the website as well. So let’s talk about that for a minute. Like, how did you get started with that? And how like, what, what a wonderful URL smarter coder, that’s a great idea.

Mohammed

Actually, it required me lots of brainstorming to come up [with]. Actually, one of the things I learned was, you know, creating online content, it’s very hard to name your blog. Because I wanted to create a blog at the beginning, “okay, should I make it something personal, like containing my name, Mohammed Osman? Or should I make it something that’s a little bit disattached from me?” And then, “okay, I want it really to feel geeky, should I use a .com domain? That looks like a company. .dev feels is still not that serious, because you know, any environment that has dev, I start feeling this is not a clean environment. And so .dev things,” I don’t know, I have some psychological barrier from them. But then I came io, okay.

Then I started thinking, “what’s the message of my blog?” and I was a little bit rambling with content here and there. And then I decided that my blog mission is to make your code smarter and your career smarter. So I want to teach people tricks to make their code smart. You know, either it’s using architecture, design patterns, AI services, just having more leverage on your code, you know, the discussion we’ve been having. And the second part is making your career smarter. So usually, as software developers, we are weak, you know, on our interpersonal skills, so how we can negotiate our salaries? How can we speak publicly? How we can create content? That soft side of software development: I also speak about it in my blog.

Jamie

I like it, I like it. So that’s a smarter code.io, isn’t it?

Mohammed

Yes

Jamie

Excellent. Excellent. And then are you on Twitter? Are you open to people getting in touch and saying, “hey Mohammed I’ve got a question about this thing.” Are you okay with people reaching out?

Mohammed

Yeah, surely you can reach out to me in Twitter. And that’s twitter.com/cognitiveosman/),. I believe that Jamie we will put it for you in the show notes.

Jamie

Absolutely. Yeah, the the way we say to people is, “don’t worry about diving across the dashboard of your car to try and get a pen while you’re driving. Don’t worry about it. Just head to the website afterwards. Everything’s linked there,” right?

Mohammed

Yeah.

Jamie

Okay. Before we wrap up, have you got any parting bits of advice you would give to people just like one or two sentences? If you don’t it’s not a problem. So listeners, I’ve hit Mohammed with this question, and he has not been able to prepare for it. So I saw the look of worry on his face as soon as I asked it.

Mohammed

You’ve got me.

Yeah, actually, I would give two advices. The first one is: don’t be afraid jump and try it, especially with creating online content. You’re gonna improve with time, I can tell you this from experience. Number two: find people who are passionate and who are like you. And thankfully we are in the internet age. So just Google it in the internet, there are discord groups for you know, software developers want to build their soft skills. There are some cohort courses that help you in that area, there are coaching groups, there are so many options. Go and find one, build your small network and just take the journey together.

Jamie

I love it. I love it. Because that’s where I’m all about to connecting people and being able to like, build up those relationships and help people out. Because like, sometimes I can’t help someone out. But if I know someone else… So like, let’s say, theoretically, I’m having a problem with something. I come to you Mohammed, and you go, “well, you know what, that’s great. But I don’t know how to fix that. But guess what, I know this person over here who can help,” right? That’s what I’m all about. Because like Dan Clark said, like I mentioned earlier: you then become a force multiplier. Tou are able to connect to those two people and multiply those two, both of those people’s productivity and knowledge, right? I’m not trying to say you wouldn’t be able to answer my question, Mohammed I’m just using as an example, right?

Or indeed you come to me with a question that I can’t answer,and I go, “oh. Go see my friend, Dan. He knows all about this or whatever.” or, “go see, my friend, Joe,” or whatever. And I think you’ve really concisely put together some really good points there about build up a network, and see what there is out there, and try and connect with people. I love it. I love it and love it. Love it.

So…

Mohammed

Thank you.

Jamie

Hey, no, fantastic. Thank you very much. What else say Mohammed is it’s been wonderful to talk to you today. And I’ll make sure that all of the links that we talked about today are in the show notes. And thank you ever so much. My goodness.

Mohammed

Thank you so much. I really enjoyed it, actually, the conversation or the discussion with you. And I’m gonna do more of this. Actually, I really liked it.

Jamie

Yeah, definitely. There’s loads of other shows. I can probably - see, I talked about introducing people to people, I could probably introduce you to a number of people or be more than interested to talk to you. So let’s do this. Right. Start your media career.

Mohammed

Yeah, definitely. Yeah, that’s really fun. Thank you so much. Thank you for hosting me and let’s connect actually in the future. Yeah.

Jamie

Let’s Yeah, definitely. Yeah. Thank you so much

Mohammed

Okay, thank you so much.

The above is a machine transcription, as such there may be subtle errors. If you would like to help to fix this transcription, please see this GitHub repository

Wrapping Up

That was my interview with Mohammed Osman. Be sure to check out the show notes for a bunch of links to some of the stuff that we covered, and full transcription of the interview. The show notes, as always, can be found at dotnetcore.show, and there will be a link directly to them in your podcatcher.

And don’t forget to spread the word, leave a rating or review on your podcatcher of choice - head over to dotnetcore.show/review for ways to do that - reach out via our contact page, and to come back next time for more .NET goodness.

I will see you again real soon. See you later folks.

Follow the show

You can find the show on any of these places