Mark Brown lives in the United States. He works for Microsoft as a Principle Program Manager on the Azure Cosmos DB Team. He has worked in IT since 1992 with 20 years of that time working for Microsoft. Mark, a self taught programmer has a vast experience from working different roles within Microsoft. He was lucky to get involved with the Azure platform at the early stages so has seen the platform grow from strength to strength. He is very passionate about sharing knowledge as you will gather while reading the interview below. When we made contact with Mark he was very keen to help share his knowledge. Let’s move on to the interview.
Note: If you have any questions or feedback, please use the comment box towards the end of the interview. All comments are reviewed before we approve and notify the interviewee. Thanks
Mark Brown Interview
Tell us about yourself?
My name is Mark Brown. I live in the United States in a small town outside of Seattle. I work at Microsoft as a Principal Program Manager on the Azure Cosmos DB team. I’ve been working in IT since 1992.
What is your greatest achievement whilst working in the world of Tech?
I don’t think I can think of a single great achievement. There have been many of them over the course of my career. I can say that the things I am most proud of all revolve around when I delivered software that makes people’s lives better whether it made their job easier or made them happier or more successful. While it wasn’t the reason why I got into IT, it is one of the things I am most surprised by that those who work in this industry can have a massive impact on people’s lives. The work we do really does change the lives of people and it is the thing I love the most about what I do.
How did you get into IT?
I did not have a passion for IT when I was young. I studied Finance and Economics in school and was looking forward to a career in banking and working as a currency trader. I did use computers though as part of my studies to create portfolio and trading models using a combination of dBase and/or Lotus 123 spreadsheets. I became very good at writing Lotus macros so in some ways I was already learning how to write software without realizing it.
Unfortunately for me, I graduated in the middle of a recession in the early 1990’s. As a result, banks weren’t hiring new graduates and I ended up working as a cook at a golf resort. When they learned I had a degree in Finance, they moved me to their accounting department. While there, a co-worker gave me a beta copy of a new database called Microsoft Access. I took it and, in a few months, wrote an Access app that did my entire job. I gave them the app and left and started a new career in software. Within a year I was building apps with Visual Basic and FoxPro. By the mid-90’s I had taught myself C/C++ and Java and was building Enterprise Application Integration (EAI) and message-based distributed systems. By the late 90’s I had transitioned to working for dot.com start-ups and picked up web development doing ASP, JSP and PHP.
Everything I learned was from reading books, asking questions on newsgroups (this was well before Stack Overflow), and just plain trial and error until I figured it out. I am completely self-taught, and I always looked for new jobs that pushed me to learn new things.
Most techies would love to work for Microsoft. What is it like working at Microsoft?
I absolutely love it. It’s a massive company, so it can be very complex to navigate. And while it can be very slow and resistant to change, it can also adapt remarkably well too.
While being a big company can create challenges, it also provides opportunities. One of the things I love so much about working at Microsoft is that there is no shortage of fun, challenging things you can do. During my nearly 20 years at Microsoft I have had many jobs including working in consulting, business development, product marketing, technical evangelism and now program and product management. Each of these roles was vastly different in the skills necessary to be successful. During that time I also worked on a huge variety of products including our first generation of mobile devices called Pocket PC, our online mapping platform called Virtual Earth (now called Bing Maps), Microsoft’s Web Platform that included IIS, ASP.NET, Silverlight, Web PI, and long gone tools such as WebMatrix. Then finally on Azure I worked on App Services, Redis Cache, Azure Networking and now Cosmos DB. There are not many companies that can give you such a wide variety of products and completely different roles. It is why I have stayed for so long. There are always new things to learn and new ways to challenge yourself. Overall, Microsoft is full of people who are extremely smart and passionate. I often feel Imposter Syndrome because the people I am surrounded by are all brilliant.
What would you recommend for those leaving school, College, University and even professionals wanting to work for Microsoft?
Try to get a spot as an intern while you are still in school. It’s a great way to get a feel for what it’s like working for the company and a great way for us to see what you are like. We hire lots of people every year who are formally interns. If you’re already out of school, work to increase your profile in the community, become a Microsoft MVP. We hire lots of MVP’s every year.
How did you get into the world of Microsoft Azure?
It’s not that interesting of a story actually 😊. I joined the Azure team when Scott Guthrie was asked to go lead Azure as the team I worked on was led by him so when he moved over, our team did too.
What are your areas of expertise? What products are you currently working on at Microsoft?
I’ve done so many different jobs in so many different types of roles that I would say that I am not an expert at anything. 😊 Today I work on the Cosmos DB team which is Microsoft’s fully managed distributed NoSQL databases in Azure. I am the Program Manager for our replication and management features. For the replication features this includes our consistency models which govern how data is replicated as well as our multi-master and conflict resolution features. For our management features this includes everything exposed by our resource provider or control plane. A control plane is essentially a management API. We generate all of the various Azure Management SDK’s against a swagger spec we define for our management service API and everything flows from there that interacts with it including ARM templates, PowerShell, Azure cli, etc. I also lead a team of other PM’s and our charter is to drive awareness and scale adoption for Cosmos DB. Part of that is running all our social media and community efforts including our blog, our Twitter account, YouTube Channel, as well as keeping an eye on Cosmos DB questions Stack Overflow and Microsoft’s new Q&A site. We also deliver presentations and workshops using our core labs as well as our scenario based labs that have complete reference implementations for IoT and Retail scenarios.
What certifications have you achieved, or the certifications you are working towards?
I’ve never achieved or even sought any certifications. But I don’t recommend people follow in my footsteps.
Very early in my career I found myself working with someone who had recently gotten certified in a language that was being used on a project we were on. A couple of days working together it was clear to me that this person was not really as experienced and practiced on the language that I had and overall lacked sufficient depth to work without requiring lots of coaching. At the time, the lesson I learned was, certifications don’t matter, and I decided there was no need to bother with certifications. However, that was the wrong lesson. Certifications DO matter. I work with partners today and I want my partners to be certified on my product. Customers also care about them and people should do them as part of ensuring they at least meet an agreed upon level of competency in any technology they work with.
What would you recommend for those wanting to learn Azure Cosmos DB? Could you please explain what Azure Cosmos DB is and what would someone use this product for?
That’s a GREAT question because Cosmos DB is a very different type of database and there is actually quite a bit developers need to understand to be successful if they are new to this type of database.
Many people today are familiar with relational databases such as SQL, MySQL or Postgres to build applications. Cosmos DB is what’s known as a distributed NoSQL database and how you design for it is very different. While Cosmos DB can be used for nearly any purpose, it is notable in four ways.
- Cosmos DB can scale to a theoretically infinite size with zero change in response times. It can do this because Cosmos DB scales out, not up as with a relational database. It does this by partitioning or sharding the data stored which is basically like putting data on different computers in a cluster. To access the data you pass the partition key so Cosmos knows what computer your data is on. Because you can keep adding computers, there is no limit to the size of your database.
- It is latchless, meaning it does not put locks on data during inserts or updates. This means it is insanely fast and indeed Cosmos DB is the only database that has a latency SLA.
- It is schema agnostic, meaning you do not define a schema within Cosmos DB. The schema is defined by the object model within your application. This is important because you often will store different entities in your collection that share the same partition key.
- It is a distributed database and can replicate data to any Azure region in the world. This allows it to survive outages more robustly and offers 5-9s of availability, more than any other database in Azure.
So if I were to tell someone what they should first understand it would be how to model and partition data, what CAP/PACLC theorem is and understand the trade-offs inherent in building distributed applications and finally, learn what Change Feed is and why it is an essential part to designing and building applications using this type of database.
Change Feed and what it does to duplicate data is important because it’s important for people to know about it is that you do not design for it like you would a relational database. In a relational database you design the database to optimize for storage by “normalizing” to reduce duplicate data. This made sense in 1970 when Codd invented the relational database because in 1970 1GB of storage costs $279,000 USD. That same 1GB of storage today costs you .25c in Cosmos DB. So relative to storage, compute is now what is expensive. And in Cosmos DB, the objective is to optimize around requests which requires compute. This is also why it is typical to put different entities in the same collection. This allows you to get them in the same request as where you are fetching other data.
How do you keep up to date with the latest Microsoft Azure products?
Honestly, it’s impossible to follow everything there is just too much. But my best source for keeping up with what’s going on in Azure and Microsoft itself is Mary Jo Foley’s All About Microsoft blog and her Twitter feed.
What’s next in your Microsoft Azure journey?
I don’t have anything planned after Cosmos DB. I LOVE where I am and what I am doing. Working on distributed NoSQL databases is insanely fun and just good techy goodness. This is a database designed for developers building distributed applications and services for the cloud. I’ve always loved distributed systems so for me, working on Cosmos DB feels like home.
What would you recommend for someone who wants to start a career in IT?
You can do it!!! I started at near zero and taught myself everything I know today. There are so many good resources to learn. It is much easier now to get into this industry than it was for me in the 1990s. I would find what you are passionate about then find who in that space is influential. Follow them, find what they are working on. Go find repos for code or projects you want to learn more about and clone them and start to work with it. See how it ticks.Most of all don’t be afraid to just dig in. Find an app a site a service and then try to go build it. Be willing to try and fail and try again. Don’t be afraid to ask questions. People in this industry generally want to help. Reach out and get to know others in your local community. Make friends, network. You will need this as you start to embark on your career in IT.
The most important question of all 😊
From a scale from 1 – 10 how crazy are you about Microsoft Azure? (10 being the highest)
I’m a 10 for sure.
End of Interview