<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Stories by Nikolay Ashanin on Medium]]></title>
        <description><![CDATA[Stories by Nikolay Ashanin on Medium]]></description>
        <link>https://medium.com/@nvashanin?source=rss-f7a8f9885ea2------2</link>
        <image>
            <url>https://cdn-images-1.medium.com/fit/c/150/150/1*rTS7n6c--XwE6rITCYQ9vw.jpeg</url>
            <title>Stories by Nikolay Ashanin on Medium</title>
            <link>https://medium.com/@nvashanin?source=rss-f7a8f9885ea2------2</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Sat, 14 Nov 2026 06:03:26 GMT</lastBuildDate>
        <atom:link href="https://medium.com/@nvashanin/feed" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com/" rel="hub"/>
        <item>
            <title><![CDATA[How to Write and Monetize a Technical Blog?]]></title>
            <link>https://medium.com/cardsmobile/how-to-write-and-monetize-a-technical-blog-2637f204e0ac?source=rss-f7a8f9885ea2------2</link>
            <guid isPermaLink="false">https://medium.com/p/2637f204e0ac</guid>
            <category><![CDATA[writing-tips]]></category>
            <category><![CDATA[money]]></category>
            <category><![CDATA[blog]]></category>
            <category><![CDATA[writing]]></category>
            <category><![CDATA[tech]]></category>
            <dc:creator><![CDATA[Nikolay Ashanin]]></dc:creator>
            <pubDate>Thu, 09 Jul 2020 13:45:27 GMT</pubDate>
            <atom:updated>2020-07-09T13:45:27.589Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/714/1*_jse-YY-iryZeHPqPGDdGA.jpeg" /></figure><p>I have been working in development since 2011. Since the end of 2012, I have been developing for iOS. I wrote <a href="https://habr.com/ru/company/touchinstinct/blog/327356/">my first technical article in Russian about a localization approach for the mobile apps on Habr</a> in early 2017. Then I published several more articles on iOS development on Habr, and at the end of 2017, I moved to a new company and decided to <a href="https://medium.com/@nvashanin">write about solution architecture</a>, where I began to describe general concepts, architect’s responsibilities, and skill-set, etc. By the summer of 2020, the number of views of my articles exceeded 800k, and the total time people spent reading it was more than 6 million minutes or about 12 years. <a href="https://medium.com/@nvashanin/the-path-to-becoming-a-software-architect-de53f1cb310a">The key article</a> was translated by other people into different languages: for example, <a href="https://bulldogjob.pl/news/605-jak-zostac-software-architektem">Polish</a> and <a href="https://www.linkedin.com/pulse/el-camino-para-convertirse-en-arquitecto-de-software-castro-ramirez/">Spanish</a>.</p><p>Here I will describe how I write my technical blog — from coming up with new ideas to having regular publications. I’ll share my thoughts on the topics you can write about, how to write and edit articles, as well as how to make money from them. For example, I bought a watch for the money that the blog earned me. This article will be equally interesting and useful for those who are only thinking about writing articles, and those, who are already actively writing.</p><h3>Backstory</h3><p>Back in 2016, I became interested in a career in solution architecture. At the beginning of 2017, I visited the first three-day intensive training in my life, where an experienced architect spoke about the basic concepts. Towards the end of the training, the participants were asked to get into teams that were supposed to take the proposed problem, come up with an architectural solution for it, and defend it against other teams. Honestly, I didn’t do very well then. By then I had worked as a team leader for several years, and only when I moved to another company and found out that there is a separate career development way —solution architects. To achieve this, I had to work on my project as an architect and get assessed by a committee of experienced architects. The committee rated my exam positively only the second time, six months after the first attempt. The total admission to this position in the company was only about 25%.</p><p>And at the end of 2017, when I began to informally perform duties of an architect on a large project, I simultaneously started a blog in which described my career growth in the field. Writing was a way to figure it all out myself, as well as to help others who are in a similar situation and are thinking about where to go after the team-lead position, apart from going into management. This was my main motivation why I started to write a blog. Let’s see what other reasons one can have.</p><h3>Why keep a tech blog</h3><p>I often hear a question: “Why do I need a blog?” Here are just a few reasons — and they are relevant not only for the IT sector.</p><ul><li><strong>Expand your knowledge.</strong> If you are interested in a topic and you want to understand it better — write an article. This way you can improve your existing knowledge and structure it. I started the blog because I wanted to enhance my knowledge in the field of a software architect work.</li><li><strong>To grow a personal brand. </strong>Even as a developer, you are part of the community. If you are known in the community, it will be easier for you to find a new dream job, get promoted, increase income, and gain respect of other professionals from your field. And, also, developing your personal brand competently, you can become a so-called “influencer” — that is, a specialist whose opinion is valuable to other community. One of the striking examples is the story of the guys from Rambler. In 2016, they managed to recommend VIPER as the best architecture for the presentation layer on iOS and an alternative to the more classic MVC and MVVM among the Russian iOS community. They did it all by making clear presentations and writing comprehensive articles. A lot of companies and developers have tried VIPER, and some are still using it.</li><li><strong>To promote the company. </strong>Creating a personal brand is always closely intertwined with the strengthening of your company’s brand. This is a win-win situation: you help attract the best personnel, set a good example for your colleagues, talk about the product, and useful insights in the market and the company encourages you in one way or another. We, at <a href="https://cardsmobile.ru/en">Cardsmobile</a>, are now working actively towards strengthening the HR brand in the market and, perhaps, my articles will help motivate my colleagues from the team to share their knowledge, write articles, and make public talks. <br>Of course, it is important that the management of the company also recognizes the value of such initiative and encourages its employees in this direction.</li><li><strong>To earn money. </strong>Most start a blog to earn money. This is a common reason for starting blogs in travel or beauty industries, but, paradoxically, in the IT sector one rarely goes into blogging for money. However, opportunities here do exist: I bought a watch for the money that the blog earned me — having said that, making a profit of it wasn’t my goal.</li></ul><h3>What to write about</h3><p>The question that everyone confronts at the start is: “What to write about?” Most often, the topic for articles is suggested by the very reason you decided to start a blog. If you’ve decided to enhance your knowledge — write articles about what you want to understand and figure out. If you’ve decided to strengthen the company’s brand and your own brand, tell the reader about your work, projects, and applied technologies. As for myself, I identified the following subjects:</p><ul><li><strong>Reviews. </strong>Came across a new technology — try to explain it in the “A to Z” format. Find out what they are talking about at professional conferences, what is a trend today. Almost everything new has great potential for research and deep immersion into the subject. Reviews of books that you’ve read are also good.</li><li><strong>Cases. </strong>Did something interesting — write about it. A common mistake is the feeling that you are not doing anything interesting. Often the opposite is true. Look at your work not from the inside, but outside, and fight the <a href="https://en.wikipedia.org/wiki/Impostor_syndrome">impostor syndrome</a>.<br>Working with a heavily loaded back-end — tell us how you make a high load and why you are doing it this way. Developing UI — tell us about an interesting animation that you made. Used a new technology in the project — tell us about your experience with it. Discussing your pitfalls and sharing your insights will help others avoid looking for the solution for hours.</li><li><strong>Guides.</strong> Take some kind of a problem and try to solve it. Describe the solution in detail — you get a kind of a guide for those who face a similar problem.</li><li><strong>Analytical notes.</strong> Form your own opinion on a new technology or a problem that is the market’s primary concern. To clarify, this format is more suitable for influencers who already have an audience and whose opinion matters to the community.</li><li><strong>Articles with a sense of humor.</strong> Take a serious topic and talk about it in a light manner. The audience likes it.</li></ul><p><strong>A couple of tips on topic research:</strong></p><ul><li><strong>Note questions from colleagues.</strong> Most companies have things that will be of interest to the whole community. It is not difficult to find such topics: analyze what processes and technologies provoke most questions from the beginners — write about this.</li><li><strong>Read news and know your trends.</strong> This is an endless stream of new topics for your blog. By preparing an article about a piece of news or a trend, you kill two birds with one stone: you improve your own knowledge on the subject and save time for other community members by collecting information for them.</li><li><strong>Read comments to other people’s articles.</strong> This is a storehouse of information that interests and moves other people. Remember that the number of unique and brilliant ideas, as a rule, is little. One way or another, everything has been already invented by someone. Nevertheless, this is not a reason not to write, because there are very few well-written comprehensive texts. My advice: just write, and over time you will learn how to quickly find interesting topics for your blog.</li></ul><h3>How to write a good article</h3><ul><li><strong>Share unique content.</strong> The main rule of a good text: it must be unique. No one is interested in reading what has already been published somewhere. In addition, according to the rules of some sites — including Habr — publishing non-authentic content is prohibited. It may also mean a ban.</li><li><strong>Make a plan.</strong> An interesting and clear article begins with a plan and structuring of the main points. Mind maps help me construct a good outline for the article. The mind map for this article was rather small, yet sometimes I come up with quite extensive ones. Below is the mind map I put together to tweet about my <a href="https://twitter.com/nikolay_ashanin/status/1215243490982055936">experience living in the Netherlands</a> in Russian.<br>Make the plan as detailed as possible. Try to highlight all the main ideas that you want to reveal in the article.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*aB1VlQkrhCD6NQQmDHWbUQ.jpeg" /><figcaption><em>Mind map for Tweeter posts about my experience living in the Netherlands.</em></figcaption></figure><ul><li><strong>Stick to the structure. </strong>Make it easier for the reader to navigate through the article, and use the traditional structure consisting of an introduction, main part, and conclusion.</li></ul><p><strong>— Introduction. </strong>The introduction should capture the readers’ attention and motivate them to immerse into the text. Write what the article will be about and what helpful material your text entails. Clearly indicate the target audience for whom the article was intended.</p><p><strong>— Main part. </strong>Here reveal the main idea and give answers to the questions posed in the introduction. Be considerate of the reader and simplify navigation through the article: use headings and subheadings, different fonts (bold and italics to highlight headings and important fragments of text), split the text into paragraphs, and make lists. Trudging through a continuous body of the text is difficult and uninteresting, while these simple tricks will help increase its readability.</p><p><strong>— Summary or conclusions. </strong>At the end of the article, briefly reiterate the main ideas that you revealed in the text. It will help clarify all the points in the mind of the reader — or you might as well leave room for thought. You can also add useful links on the topic at the end of the article so that the readers who became interested in the topic can study it further.</p><ul><li><strong>Write as you speak. </strong>Be yourself — write the way you speak in your everyday life and avoid using complex syntactical structures. At the same time, the text should be well-thought-out, without any filler words and other verbal garbage.</li><li><strong>Come up with a meaningful headline. </strong>There is no magic in choosing perfect wording or coming up with the heading length. Formulate the title so that it reveals the content of the article and helps the reader to make the choice: to read or not to read. In some cases catchy and intriguing headlines work very well — they literally catch attention, but it is important that the content of the article meets the expectations of the reader. It is also advisable to study the search engine results in order to understand which topics are searched most often. Always choose a headline after you have finished writing up the content of the article — so that it turns out as relevant as possible.</li><li><strong>Do not forget about the pictures. </strong>Can’t do without them — reading a bare text with no pictures is boring. Choose images that are meaningful or that are funny, ones that add a little lightness to a serious topic.</li></ul><p>A special mention goes to the main image below the heading of the article — it’s a teaser (from the English to tease: “to make fun of or attempt to provoke in a playful way”). The word speaks for the reason an image to be selected: it should summon the reader to open the link. This is important because the first thing a person notices is the picture. Striking visual content is bound to attract more attention and transitions. If possible, write the name of the author and the name of the company on the picture — this way this information becomes more noticeable and eye-catching.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/856/1*6zEgZYAlcooNpS81T0oenQ.png" /><figcaption><em>Sharing posts on Medium</em></figcaption></figure><p>I choose pictures for my articles from the <em>Monument Valley </em>game. I subconsciously associate it with architecture and complex design and, in my opinion; the images are well suited for the main heading. And in general, it’s a very cool game — I recommend it.</p><ul><li><strong>Check the content.</strong> I do not publish the article as soon as I write it. I have a ritual that I strictly observe — I review the text in several stages.</li><li><strong>Check spelling, punctuation, and style. </strong>I advise you to use specialized digital tools, such as <a href="https://grammarly.go2cloud.org/SH2Jg"><strong>Grammarly</strong></a><strong>.</strong></li><li><strong>Editing by reviewers. </strong>I have several good reviewers in the areas I write about — from iOS development to architecture — they are experts in the field whose opinion I trust. They are well versed in the topic and can give comments on the content: in iOS — it’s a developer of the biggest Russian social network VK, a good friend of mine from St. Petersburg, and in architecture — an architect from Google in Silicon Valley. If you have no such experts around, show the article to your supervisor or colleagues. Large companies, where the content production is rather similar to an assembly line process, collaborate with external reviewers.</li><li><strong>Proofreading of the text by a technical writer. </strong>I always send texts written in foreign languages to relevant native speakers. They help with the wording and make the whole article sound better. I send technical texts to friends who are technical writers.</li></ul><p>As a result, the article goes through approval stages not only by me but also by professional reviewers — which means that such content can be trusted.</p><h3>Where to publish the article: choosing a platform</h3><p>If the company has its own blog, that’s where you can start. If not, there are two options: existing sites or a blog on your domain. There are many blog platforms: <a href="https://habr.com/ru/">Habr</a> is popular among the Russian-speaking audience, and <a href="https://medium.com/">Medium</a> is popular among the English-speaking audience. There are also many platforms for creating your own blog. Each approach has its pros and cons.</p><h3>Popular platform</h3><p><strong>+ Platform with a strong SEO</strong> is the reason why readers would find your article. This reduces the costs, both in terms of time and money, of promoting a blog. At the same time, platforms generate traffic not only for new articles: I have not written anything new since last August, but each month my articles receive about 25k views.</p><p><strong>+ Ready-made UI</strong> simplifies the layout of articles. The platforms offer user-friendly editors that integrate a variety of templates and mechanics. In Medium, for example, there is a feature with automatic calculation of the time it takes a reader to go through an article. Articles are also convenient to read: the editors, by default, include “air” in the text, as well as a choice of fonts, headings, as well as easy picture editing, and much more.</p><p><strong>+ Simple launch</strong>. Working on the article goes according to a simple scenario: writing -&gt; publishing.</p><p><strong>- Basic customization of style.</strong> If you want a complicated layout or custom features, this option will not work.</p><p><strong>- The need to accept all the rules of the blog platform. </strong>There can be legal nuances, and you may also be banned for the rules violation, which will lead to a complete loss of the blog. Privacy issues: for example, you cannot publish private correspondence or make a full copy of an article from another site. Such things seem obvious, but it’s better to read the rules of the platform before you do anything else.</p><p><strong>- Dependence on the demand of the site.</strong> If the service is losing popularity, then your blog is losing popularity too.</p><h3>Keeping a blog on your own domain</h3><p>The advantages of popular platforms are the disadvantages of your domain. And the disadvantages of the common platforms are the advantages of your own sites. You can customize the blog as you like, but at the start, a lot of resources need to be invested. In addition, your own site requires a large budget and promotion activities, as well as generation and retention of traffic, while blog platforms generate traffic for you themselves. If you still want to have your own domain, some sites allow setting up your own domain name and publish articles under it — this option is available, for example, on Medium.</p><p>Having considered all the pros and cons of both options, I started blogs on two platforms: Habr and Medium.</p><h3>How to promote your article</h3><p>If you decided to start a blog on any given platform, the traffic generated by the platform itself will be available to you by default. Promoting a blog on your own domain, it makes sense to employ an SEO specialist. There are other promotion formats that can attract readers — regardless of the platform on which you are based. Below I’ll share ways that particularly helped me.</p><ul><li><strong>Send the link to your friends. </strong>They are the most loyal of audiences. It is highly likely that they will read your article and ‘like’ it. Friends’ activity can help surge into the daily top, which, in turn, will generate more traffic from the site.</li><li><strong>Post the link on all social networks. </strong>Even if you don’t have an active social media presence and don’t have a lot of followers yet, the posts that do appear would still generate a certain number of views — this is good enough at the start. Linkedin works best for me — that’s where I have more than 3k contacts, mainly English-speaking. Yet, Instagram, in my opinion, doesn’t work for IT bloggers at all.</li><li><strong>Send the link to influencers. </strong>It can be bloggers, public pages, and portals that cover topics similar to yours. Perhaps your article will be added to a newsletter or published in the feed. I was once published in a group on <a href="https://t.me/leadgr">Telegram messenger channel with a couple of thousands of active readers</a>.</li><li><strong>Make presentations. </strong>Participation in conferences strengthens your personal brand among other obvious benefits. You can share a blog link with your audience and thereby increase its organic reach. This is not an intrusive advertisement: your audience, by default, is interested in the subject you are talking and writing about, and so you naturally offer them more useful content.</li></ul><p>All these tools will help you become an expert in your field and become known in the community. I do not consider myself an influential expert in software architecture, yet my blog has a regular audience and it generates new useful contacts. Below are a few posts from Linkedin that have grown into interesting conversations.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/866/1*KjytybicubTc1xMwUBi_Kg.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/854/1*hfe7VwZcd1q3odFL-8hBRw.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/874/1*qyo1V0AuA6Pnebuv9YAy_w.png" /></figure><figure><img alt="" src="https://cdn-images-1.medium.com/max/862/1*Pb1RD4DnfZQmleNiea4Kzw.png" /><figcaption><em>Screenshots of messages in LinkedIn</em></figcaption></figure><p>I have a motivating story from a past job. <a href="https://www.epam.com/">EPAM</a> is a big company, and even as an architect you may never meet CTO. But it happened to me: when we met for the first time, he noted that he had read my blog and liked my articles.</p><h3>How to monetize a blog</h3><p>Let’s move on to the most provocative topic — is it possible to monetize a blog, and how to do it.</p><p><strong><em>Important disclaimer</em>.</strong> Before adding monetization, check the rules of your company — in case you are writing on behalf of your company, and with the rules of the site on which you are planning to publish. The points regarding monetization most often are clearly defined. Knowing them, you can avoid negative consequences: for example, getting banned and losing your blog.</p><h3>Types of Monetization</h3><p>There are two types of monetization.</p><ul><li><strong>Direct. </strong>You get money directly for writing an article.</li><li><strong>Indirect. </strong>You do not receive money directly for writing an article, but your income is still growing. It works like that. For example, you speak at conferences for money. Your blog with quality articles increases your fame and expertise in the community, and you can increase the price of conference appearances. Another scenario is possible: if you are developing a paid product, mention it in the articles — this can stimulate sales. It is possible to “monetize” you as a specialist: the image of an expert affects the wages and probability of employment in cool companies. Indirect monetization is too voluminous of a direction, so I will not consider this topic in detail in this article and focus on direct monetization, on tangible financial flows. In direct monetization, the key metric is incoming traffic, or rather, the number of views and reads of the article. The number of reads increases revenue and generates the main cash flow. Roughly speaking, if you double your incoming traffic, then there’s a high probability your income will also double. An important aspect is the orientation (targeting) of the audience. I will explain with an example of a <a href="https://en.wikipedia.org/wiki/Guido_Fawkes_(website)">blog about British politics</a>. The traffic on this site was very small, so the author set low advertising prices. But once the author was informed that the British Prime Minister was reading his blog, and he realized that he could push up the price of advertising, as the country’s political elite read the blog. So if you are targeting a specific audience — for example, writing for Android developers or, as in my case, beginner and experienced architects — you can count on good monetization even with relatively low traffic.</li></ul><h3>Monetization mechanisms</h3><p>I tested several monetization mechanisms. Here’s what I’ve learned.</p><p><strong>Native monetization of a blog platform</strong>. I’ll share my experience with <a href="https://help.medium.com/hc/en-us/articles/115011694187-Join-the-Partner-Program">Medium</a>. Each reader or author can buy a paid account for $5 and read all articles on the platform. The articles the reader likes are ‘liked’ — on Medium this is called “cotton”. The money that the reader pays for the subscription is distributed among the authors of the articles he liked. The best authors can get good money. At the end of the month, Medium sends a mailing list to all authors, in which it discloses top income figures. In May 2020, the numbers looked like this: the best author received $25,000 per month from all of his articles, while for one of the articles he was paid more than $10,000. I received $50 for one of the articles — it was published 8 months before I started using the tool.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*wDFpNe89T-rGMlCJPnCp3A.png" /><figcaption><em>Screenshot of the information about how much I earned on one of my articles</em></figcaption></figure><p>The disadvantage of this format is that the article is available only to those who have a subscription. This did not suit me, so I explored other options.</p><p><strong>Affiliate links.</strong> You become a member of the so-called “affiliate program” and post affiliate links in your article. If the reader follows it and buys the goods, you get a certain percentage of the sale. Many software products and stores have affiliate programs — <a href="https://blog.hubspot.com/marketing/best-affiliate-programs">a list of available programs has been published on HubSpot</a>: from Coursera to Amazon. I chose the latter: in each of my articles, there are a couple of links to books on architecture. If someone buys them on my recommendation, Amazon transfers me a certain percentage. The mechanics are simple: if you write useful content for your audience, a properly selected affiliate program can make you rich. Links in my articles still generate an average of $100–150 every month — even taking into account the fact that I wrote the last article almost a year ago (but I promise to get back on track and start writing again!).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/312/1*h6_sJyulR2fXKNJl8Es2ww.png" /><figcaption><em>My income in the Amazon affiliate program as of October 2019</em></figcaption></figure><p>The disadvantage of this method is that it is impossible to transfer money from Amazon to Russian bank accounts. I lived in the Netherlands, so I had no problems with a bank account and withdrawing money. You can make an account on PayPal and withdraw money through it. Affiliate programs are the most profitable and proven way to monetize. They can bring thousands of dollars every month, provided that you write constantly. Cases confirm: one author made a link invitation to Uber drivers when the aggregator was just starting its expansion and earned $50.000, while another <a href="https://hackernoon.com/how-to-monetize-a-medium-article-b4c1aeb7fdae">one wrote articles about Instagram bots on Medium and earned $2000</a>.</p><p><strong>Referral invitations.</strong> If you work in IT, most likely your company has bonuses for inviting employees to the company. As a rule, bonuses range from a few hundred to several thousand dollars. For example, if you write complex and interesting things about the Android, probably the people who read you want to work with you or in your team and can get into the company through you. This method of monetization is the most unstable and requires the most time. You will have to filter people and review the CVs before making the recommendation, as well as present the company and talk about the conditions to the potential candidate. Of course, at some point, you can hit the jackpot by making several successful referrals, but the company can suspend hiring at any time, and your income will “freeze”.</p><p><strong>Marketing posts. </strong>If you run a popular blog on a specific topic, companies will want to publish marketing posts or internal integration for your money — because your target audience is concentrated on your blog. For example, you write about everything related to DevOps, and the company opens new paid courses in this area. It is possible they will want to buy integrated native advertising on your blog. Personally, I have not tried such method of monetization, but I have received offers.</p><p><strong>Bonuses from the company. </strong>Many companies have bonus programs for writing articles. It can be either cash prizes or alternatives — mobile devices, tickets to foreign conferences, or cool unique merch items. Perhaps if I wrote more articles, I would earn a couple of thousand dollars a month on a blog. So far, for the entire time of its existence, i.e. since 2017, the blog has brought me about $5,000 through various formats of monetization. With this money I bought a watch, which I had already mentioned at the beginning of the article. A nice bonus — especially considering that I did not seriously engage in blogging and promotion, but only wanted to study this subject area.</p><h3>Length of the article, tags, and three more life-hacks</h3><p>In the process of writing articles for the blog, I found some life-hacks for myself. Perhaps they will be useful to you too. Better to finalize an article than to publish a raw one. It may sound daunting, but sometimes I had to modify an already published article. The downside of this is that belated editing affects your credibility in the eyes of the readers and leads to a decrease in traffic. A Russian novelist Aleksandr Solzhenitsyn in <a href="https://amzn.to/3ehFbKy">his book “In the First Circle”</a> describes the rule of the last steps: when 95% of the work is completed, nothing remains but the rest 5% and they are the most difficult in terms of self-motivation and are the most important in terms of reader convenience. Always finish working on the article until the end, even if it seems that “it will do”. Otherwise, what’s the reason for doing it all?</p><ul><li><strong>The optimal length of an article is 7 minutes</strong>. <a href="https://medium.com/data-lab/the-optimal-post-is-7-minutes-74b9f41509b">This is the statistics of Medium</a>. Meaning that reading articles with the highest rating on the platform takes 7 minutes. Of course, this is not a universal number. In my opinion, the best timing is from 6 to 10 minutes. This article has enough content to fully reveal the topic, but it is not difficult to read at a time. Much also depends on the site: somewhere, the optimal length of the post is 3 minutes, and somewhere, perhaps, up to 30 minutes.</li><li><strong>Use tags</strong>. Almost all blog platforms offer tagging. Put them to the maximum and focus on the audience for which you are writing. This will allow readers to find your article faster.</li><li><strong>Publish your article on Thursday or Saturday morning</strong>. <a href="https://blog.alore.io/how-to-start-a-blog-on-medium/">According to statistics</a>, the number of views is 33% higher on those days than on any other days of the week. The worst day to post is Monday.</li><li><strong>Use keywords to optimize your search</strong>. Keywords will help bring your article and blog to the top if you publish text on your site.</li></ul><p>Life-hacks are good, but still, content is the main reason a person will read your article. If the content is decent, then it’s not so important when you publish the article and how many characters it may contain.</p><h3>Instead of a conclusion, or what’s next</h3><p>And then, most likely, you need to write more. Because writing a good tech blog is a long process. It’s too early to make any conclusions after publishing the first article, and even more so you should not compare yourself with those who have been writing for a long time — they are at the end of this journey. Don’t jump before you leap, so to speak. Try to publish at least five articles, and then evaluate your first interim results: 5 and look at the feedback. Is there an improvement, did you start writing and formulating your thoughts better, whether there is an increase in readership, whether you’ve got more readers, and whether you have acquired any regulars. And beware of the Impostor Syndrome: it may affect your motivation, and it may make you think that it is not your thing, but there are no victories without mistakes and without trials, there is no achievement.</p><p>At the start, come up with subjects for several articles at once. So it will be easier for you to maintain motivation and not to abandon the blog. Try to build a long-term development strategy for your blog. For example, I immediately realized that I wanted to write a series of 8 articles on the subject of career development. And I clearly indicated to the readers in the first article that there will be a sequel — in the very first article. Thus, I prepared the audience to wait for more content that they are interested in, and myself for the fact that it won’t be so easy to leave — because I promised readers a series of articles.</p><p>It turned into a long article in the end — the biggest article I have ever written. I really hope that I revealed the topic and motivated you to start writing. It’s a long way, but it’s worth it. <strong>Start writing one right now!</strong></p><h3>Useful links</h3><ul><li><a href="https://grammarly.go2cloud.org/SH2Jg">Grammarly</a> — a service for checking texts</li><li><a href="https://amzn.to/2BMdLiW">“The Million Dollar Blog” </a>— a book by Natasha Courtney-Smith, a renowned digital marketing expert.</li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=2637f204e0ac" width="1" height="1" alt=""><hr><p><a href="https://medium.com/cardsmobile/how-to-write-and-monetize-a-technical-blog-2637f204e0ac">How to Write and Monetize a Technical Blog?</a> was originally published in <a href="https://medium.com/cardsmobile">Cardsmobile</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Solution Architect Roles&Responsibilities & Personal skills — Alpha version]]></title>
            <link>https://medium.com/@nvashanin/solution-architect-roles-responsibilities-personal-skills-alpha-version-7315e591d0a8?source=rss-f7a8f9885ea2------2</link>
            <guid isPermaLink="false">https://medium.com/p/7315e591d0a8</guid>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[growth]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[management]]></category>
            <category><![CDATA[self-improvement]]></category>
            <dc:creator><![CDATA[Nikolay Ashanin]]></dc:creator>
            <pubDate>Mon, 12 Aug 2019 09:39:18 GMT</pubDate>
            <atom:updated>2019-08-12T09:39:18.542Z</atom:updated>
            <content:encoded><![CDATA[<h3>Solution Architect Roles&amp;Responsibilities &amp; Personal skills — Alpha version</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*CjlEom9dOxdPp6kX" /></figure><p>Solution Architect position becomes more and more popular nowadays. If ten years ago, there were almost no such roles in IT companies, then today those specialists can be seen in a lot of projects.</p><p>However, there are just a few sources and books which can help with Solution Architecture definition, Roles&amp;Responsibilities, and required skills.</p><p>The goal of this Road Map is to help in understanding what the Solution Architect role is and how to grow in that direction. For such purposes, there is a plan to interview people who already play the Solution Architect role in different companies.</p><p>For me, this guide helps to identify the ways how to grow as a Solution Architect.</p><h3>Road Map</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*dSB8Jd45r3jd6hRav13Gaw.png" /></figure><p><a href="https://github.com/NikAshanin/Solution-Architect-Road-Map">The RoadMap</a> includes two main parts:</p><ul><li><strong>Roles&amp;Responsibilities</strong>. A high-level list of working roles and concrete responsibilities for each.</li><li><strong>Personal skills</strong>. Required skills for playing those roles.</li></ul><h3>Work in progress</h3><p>Current version in pre-alpha. You are welcome to contribute to a project via a pull request, or you can create an issue.</p><h3>Knowledge Base</h3><p>Each point of the <a href="https://github.com/NikAshanin/Solution-Architect-Road-Map">Road Map</a> will be appropriately described:</p><ul><li><strong>Definition</strong></li><li><strong>Why is it important</strong></li><li><strong>How to improve</strong></li><li><strong>Sources/books/courses</strong></li></ul><h3>How to contribute</h3><p>Please, feel free to contribute to this <a href="https://github.com/NikAshanin/Solution-Architect-Road-Map">Road Map</a>. In case, if you are a Solution Architect OR playing a similar role, then there are a few possibilities how to do that:</p><ul><li>Create a pull request with improvements.</li><li>Create an issue with your concerns.</li><li>Feel free to <a href="/service/mailto:nv.ashanin@gmail.com">contact me directly</a> to discuss raised questions.</li></ul><p>You are welcome to contribute :)</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=7315e591d0a8" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[System Design Cheat Sheet]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/@nvashanin/system-design-cheat-sheet-762810f95fb6?source=rss-f7a8f9885ea2------2"><img src="https://cdn-images-1.medium.com/max/688/1*vWqTbAvLzgAFU9BkHIeP-w.jpeg" width="688"></a></p><p class="medium-feed-snippet">It can be used for interviews or assessments, pre-sales or estimations.</p><p class="medium-feed-link"><a href="https://medium.com/@nvashanin/system-design-cheat-sheet-762810f95fb6?source=rss-f7a8f9885ea2------2">Continue reading on Medium »</a></p></div>]]></description>
            <link>https://medium.com/@nvashanin/system-design-cheat-sheet-762810f95fb6?source=rss-f7a8f9885ea2------2</link>
            <guid isPermaLink="false">https://medium.com/p/762810f95fb6</guid>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[interview]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[management]]></category>
            <dc:creator><![CDATA[Nikolay Ashanin]]></dc:creator>
            <pubDate>Sun, 03 Feb 2019 09:16:00 GMT</pubDate>
            <atom:updated>2019-06-04T15:39:18.993Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Documentation in Software Architecture]]></title>
            <link>https://medium.com/@nvashanin/documentation-in-software-architecture-4f2e4159c4fc?source=rss-f7a8f9885ea2------2</link>
            <guid isPermaLink="false">https://medium.com/p/4f2e4159c4fc</guid>
            <category><![CDATA[software]]></category>
            <category><![CDATA[management]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[software-architecture]]></category>
            <dc:creator><![CDATA[Nikolay Ashanin]]></dc:creator>
            <pubDate>Mon, 14 Jan 2019 13:41:08 GMT</pubDate>
            <atom:updated>2019-06-04T16:01:51.158Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*r8Zexn6T0Gn88SAR2VLVaQ.jpeg" /><figcaption>Image 1. Monument valley game</figcaption></figure><p>Let’s continue to consider software architecture. After we recognized stakeholders, functional and non-functional requirements, it is time to document the results. That is why, in this article in the series, we consider the principles of working with architectural documentation.</p><p>However, before to dive deeper with individual cases, I would first like to note what we consider as architectural documentation. Unfortunately, there are no standards in software architecture that need to be followed when creating documentation, such as, for example, in the architecture of buildings. Also, each company may have its own rules for writing documentation, which you also need to follow. In this article, the architectural documentation is referring to the high-level description of the system, showing its fundamental principles of work. The primary purpose of this documentation is to correlate functional and non-functional requirements.</p><h3>Article series</h3><ol><li><a href="https://medium.com/@nvashanin/the-path-to-becoming-a-software-architect-de53f1cb310a">The Path to Becoming a Software Architect</a></li><li><a href="https://medium.com/@nvashanin/stakeholders-in-software-architecture-6d18f36250f9">Stakeholders in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/types-of-software-architects-aa03e359d192">Types of Software Architects</a></li><li><a href="https://medium.com/@nvashanin/quality-attributes-in-software-architecture-3844ea482732">Quality attributes in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/documentation-in-software-architecture-4f2e4159c4fc">Documentation in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/certificates-in-software-architecture-6b18e0102fe7">Certificates in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/books-in-software-architecture-6ad974e524ce">Books in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/system-design-cheat-sheet-762810f95fb6">System Design Cheat Sheet</a></li></ol><h3>Why do we need software documentation</h3><p>Before describing how to create architectural documentation properly, we need to understand why it is required.</p><p>There are three primary goals for architectural documentation:</p><ul><li><strong>Knowledge sharing.</strong> It is suitable for knowledge transfer between people working in different functional areas of the project, as well as for knowledge transfer to new participants.</li><li><strong>Communication</strong>. Documentation is the starting point for interaction between different stakeholders. In particular, it helps to share the ideas of the architect to the developers.</li><li><strong>Analyses</strong>. Documentation is also a starting point for future architectural reviews of the project.</li></ul><p>Of course, the critical question that related not only to architectural documentation but to any documentation in general, it does not matter be it project documentation, developer documentation, etc. — when it is worth starting to create and maintain documentation. There is a short formula to answer this question:</p><p><strong>(Cx — Cy) &gt; Cdiff</strong></p><p>where</p><p>Cx = The cost of the project without documentation,</p><p>Cy = The cost of the project with the documentation,</p><p>Cdiff = The cost of maintaining documentation.</p><p>It is also easy to calculate what documentation you need to create, how often it is required to be updated, and other similar questions, using this formula. It also answers the questions of whether the documentation is necessary for small-size projects, long-term or short-term, and so on.</p><p>Moreover, how it can be that a project’s cost without documentation is much higher than a project with documentation? Just imagine that you have a project for 200 developers, lasting five years, with an average period of developer’s work on a project which is equal to 2 years. Without documentation, it is pure chaos, even for doing minor changes. A few tips on how to maintain proper documentation are listed below.</p><h3>Types of diagrams</h3><p>Let’s consider what types of architectural schemes and diagrams exist that can be used in the documentation:</p><ul><li><strong>Informal</strong>. The most common type of diagrams. May be represented in any form. Often acts as the easiest and fastest way of communication between stakeholders. Among the disadvantages — it is almost the same to understand or to be confused, that why it is required a detailed description of the diagram.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*bptsj78B1_3ApMoaAQzj8w.png" /><figcaption>Image 2. Informal diagram example (<a href="https://en.wikipedia.org/wiki/Load_balancing_(computing)">https://en.wikipedia.org/wiki/Load_balancing_(computing)</a> )</figcaption></figure><ul><li><strong>Semiformal</strong>. It is a standard graphical scheme or diagram that has certain rules of creating. Among the disadvantages, it does not provide a complete description of each specific element. Therefore it requires knowledge of the semantics of the specific diagram. Also, additional software is required to create these diagrams. Also, each scheme is usually focused on a single attribute. UML diagrams are semi-formal, as well as certain approaches for creating diagrams, for example, <a href="https://c4model.com/">https://c4model.com/</a> or <a href="https://en.wikipedia.org/wiki/4%252B1_architectural_view_model">https://en.wikipedia.org/wiki/4%2B1_architectural_view_model</a>.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6U10PlTkJK8hHC9PyqXBig.png" /><figcaption>Image 3. Semiformal diagram example (C4 deployment diagram example from <a href="https://c4model.com/img/bigbankplc-LiveDeployment.png">https://c4model.com/img/bigbankplc-LiveDeployment.png</a> )</figcaption></figure><ul><li><strong>Formal</strong>. It is in some form a language for describing architecture. Allows making code generation directly from the created schemes. It is more suitable for hardware system engineering. Among the disadvantages: it requires special software and knowledge, both for writing and understanding. Example: <a href="https://en.wikipedia.org/wiki/Architecture_Analysis_%2526_Design_Language">https://en.wikipedia.org/wiki/Architecture_Analysis_%26_Design_Language</a></li></ul><h3>Tips for writing documentation</h3><p>At work, I often have to write documentation or maintain it. Therefore, I developed several basic principles for writing it:</p><ul><li><strong>Avoid repetitions. </strong>DRY principle (Don’t Repeat Yourself) works equally well as in programming and in documenting architecture. Create links, but do not write the same thing several times.</li><li><strong>Recognize for whom you are writing.</strong> Perhaps the most important rule. Documentation for developers and top management may differ dramatically. Therefore, it is necessary to decide for whom you are doing it, then understand what these people need in your documentation and what answers they try to find.</li><li><strong>Avoid ambiguity.</strong> In my practice, one of the most frequent problems with documentation. For example, you came up with a solution that is documented in the form of diagrams. You understand it, you know the context, but the person who read it may not know it, and it confuses him what exactly you had in mind. Therefore, you should always provide context for your diagrams as a description. Also, try to use standard approaches. For example, I really love using C4 (<a href="https://c4model.com/">https://c4model.com/</a>) to describe my solutions, due to the fact that this approach allows you first to make a high-level description of the system, and then dive into the details at the level of components, containers, and deployment, and also has reasonably formal criteria for describing each element.</li><li><strong>Maintain relevance. </strong>In this case, you should find a compromise between time spent and relevance. Here you can again use the same formula which is described at the very beginning of that article. If maintaining documentation is cheaper for a project than the opposite way, then it is the right thing to do.</li><li><strong>Review documentation</strong>. You should periodically review the documentation. So you will most likely find places that have lost relevance and are worth updating. Also, try to share documentation with stakeholders and ask for their opinion. It is especially useful when you are starting to document architecture.</li></ul><h3>Popular tools for creating diagrams</h3><p>Let’s consider what you can use for creating diagrams, schemes, except the standard whiteboard:</p><ul><li><strong>MS Visio</strong> (<a href="https://en.wikipedia.org/wiki/Microsoft_Visio">https://en.wikipedia.org/wiki/Microsoft_Visio</a> ). It allows you to do almost everything possible. One of the minuses — does not work on Mac OS. Not free.</li><li><strong>Omnigraffle</strong> (<a href="https://www.omnigroup.com/omnigraffle/">https://www.omnigroup.com/omnigraffle/</a> ). It is for Mac OS users. Not free.</li><li><strong>Enterprise Architect</strong> (<a href="https://sparxsystems.com/products/ea/">https://sparxsystems.com/products/ea/</a> ). It is paid, but there is a 30-days trial period.</li><li>My favorite, fast, simple, and online tool is <strong>draw.io </strong>(<a href="https://draw.io/">https://draw.io</a> ). It supports third-party plugins, ranging from C4 to AWS specific. You can do anything as you wish on any platform. Ideal as a whiteboard tool for creating informal diagrams. Free!</li></ul><h3>Recommended books</h3><ul><li><a href="https://amzn.to/2u9y55R"><strong>Designing Software Architectures: A Practical Approach (SEI Series in Software Engineering)</strong></a></li><li><a href="https://amzn.to/2NsvQU0"><strong>Documenting Software Architectures: Views and Beyond</strong></a></li><li><a href="https://amzn.to/2KS5wB8"><strong>Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development</strong></a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=4f2e4159c4fc" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Books in Software Architecture]]></title>
            <link>https://medium.com/@nvashanin/books-in-software-architecture-6ad974e524ce?source=rss-f7a8f9885ea2------2</link>
            <guid isPermaLink="false">https://medium.com/p/6ad974e524ce</guid>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[books]]></category>
            <category><![CDATA[software]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[programming]]></category>
            <dc:creator><![CDATA[Nikolay Ashanin]]></dc:creator>
            <pubDate>Thu, 05 Jul 2018 12:35:16 GMT</pubDate>
            <atom:updated>2019-06-04T16:21:03.372Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*0ZEBnaXOXMH0ll9B" /><figcaption>Image 1. Monument Valley game</figcaption></figure><p>It is necessary to have much practical experience and an excellent theoretical background to be successful in any field of activity. The area of software architecture is no exception. If one can get their practical experience only from participating in real-life projects, the theoretical knowledge can be improved at home.</p><p>One of the main differences between the development theory and theory of software architecture is that knowledge is becoming obsolete more slowly for the latter. So, if you have found a resource of the 2000s, it is likely to be still relevant.</p><p>I would recommend you to start your acquaintance with the theory of software architecture by reading some books. This article suggests which ones suit the best.</p><h3>Article series</h3><ol><li><a href="https://medium.com/@nvashanin/the-path-to-becoming-a-software-architect-de53f1cb310a">The Path to Becoming a Software Architect</a></li><li><a href="https://medium.com/@nvashanin/stakeholders-in-software-architecture-6d18f36250f9">Stakeholders in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/types-of-software-architects-aa03e359d192">Types of Software Architects</a></li><li><a href="https://medium.com/@nvashanin/quality-attributes-in-software-architecture-3844ea482732">Quality attributes in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/documentation-in-software-architecture-4f2e4159c4fc">Documentation in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/certificates-in-software-architecture-6b18e0102fe7">Certificates in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/books-in-software-architecture-6ad974e524ce">Books in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/system-design-cheat-sheet-762810f95fb6">System Design Cheat Sheet</a></li></ol><h4>Outside this list of books are:</h4><ul><li><strong>Books related to a specific technological domain</strong>. The software architect must have a broad technical range of skills. At the same time, there are quite a lot of good books related to specific technologies like cloud solutions or enterprise java. However, this list does not include such kind of literature.</li><li><strong>Books titled “3, 7, 9, 97, 99, 248, something “ or “something in 24 hours/21 days /for dummies”.</strong> In general, I feel skeptical about the books which offer you to become an expert during a short period. Especially it concerns the area of software architecture. The same applies to the sets of N-tips. The software architecture cannot be considered without its context. Sometimes even minor details affect the decisions, but it can be impossible to catch them without a context. The books with the title “N best practices in the field of something” often contain straightforward tips like “brush your teeth in the morning, do morning exercises, do not take alcohol before the job interview.”</li></ul><h4>How do you rank books on this list?</h4><p>In the list, each book has one of the following icons:</p><ul><li>🥇<strong>MUST READ</strong>! This book is recommended for reading, even if you are not going to deal with the software architecture in the future. Also, it does not matter what is your role, whether you are a developer, a manager, or a tester.</li><li>🥈The book can be useful to those who want to grow in the direction of software architecture.</li><li>🥉This book can expand your horizons. However, for the lack of time or with better alternatives, you can skip it.</li></ul><p>Also, I need to warn you that most of these books are challenging to read because of the authors’ abstract-mindedness and a large number of details that you have to keep in mind simultaneously. Personally, for me, it was hard to read almost half of the books from this list. However, I hope that you are as motivated and self-disciplined as I was because these books can change your mindset.</p><h3>Books on the theory of Software Architecture</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*_Nl9Fzmv0P23eKCJ" /></figure><h4>🥇<a href="https://amzn.to/2zgDSMQ">Software Architecture in Practice (3rd Edition) (SEI Series in Software Engineering)</a></h4><p>by Len Bass, Paul Clements, Rick Kazman</p><p>The first book on the list, as well as the first book which you should read on the subject of software architecture. This book describes the basic concepts: management of project requirements, especially non-functional, documenting the architecture, assessing the architecture in terms of success. It also clarifies how to work on architecture in agile terms and changing requirements. Examples and an easy-to-read style of writing are good advantages of this book.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*rlHjSmKAR7uIDnTo" /></figure><h4>🥈<a href="https://amzn.to/2IY9JBr">Essential Software Architecture</a></h4><p>by Ian Gorton</p><p>One of the alternative books for your acquaintance with the basic theory giving a good overview of the software architect’s work. It describes the essential skills which are needed to be an architect, from the way of thinking to the knowledge of various technologies. Also, there are considerations on the attributes of quality and other areas of software architecture.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*Pc1z227yHUJV2KWk" /></figure><h4>🥈<a href="https://amzn.to/2IWwJ3Q">Patterns of Enterprise Application Architecture</a></h4><p>by Martin Fowler</p><p>An excellent book, which describes the cases that developers of enterprise applications have to deal with, as well as ways to solve those issues. One of the advantages is that the proposed solutions can be applied to many different technological stacks. However, in general, this book is more suitable for a developer or a system architect than for a solution/enterprise architect, since it describes low-level problems and solutions.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*Ozj2yl5SCh6QSp7n" /></figure><h4>🥇<a href="https://amzn.to/2u4C4Sb">Domain-Driven Design: Tackling Complexity in the Heart of Software</a></h4><p>By Eric Evans</p><p>This book is a must if you do not understand why it is a deadly sin to have the word “car” in the documentation, “automobile” in the implementation of the back-end database, and “vehicle” on the client side. Besides, it contains useful guidelines on how to communicate to get a working conceptual model and to orchestrate it for all of the stakeholders.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*_xt9pBEKqMGC1_yI" /></figure><h4>🥇<a href="https://amzn.to/2uaP7QY">Stakeholder Theory: The State of the Art</a></h4><p>by R. Edward Freeman, Jeffrey S. Harrison, Andrew C. Wicks, Bidhan L. Parmar, Simone de Colle</p><p>The authors offer to review their great practical experience in understanding the needs of the modern business for stakeholder management. The book describes both the basics and specific examples from various business domains, such as finance, accounting, law, management. Particular attention is paid to business ethics in cooperating with the stakeholders. It is one of the books for changing the mindset: it helps to realize that everything should be done to solve people’s problems in the first place, but not because the developers need to practice the technologies.</p><h3>Books about Design and Diagrams in Software Architecture</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*Clt3N010hgR_6mPp" /></figure><h4>🥈<a href="https://amzn.to/2KS5wB8">Applying UML and Patterns: An Introduction to Object-Oriented Analysis and Design and Iterative Development</a></h4><p>by Craig Larman</p><p>UML is one of the generally accepted and popular standards of documentation in the development and architecture of the software. The book gives many examples of how to draw UML diagrams. The author gradually shows what skills are necessary for documenting, each time complicating the task. The only drawback for the software architect is that most of the examples in the book are about object-oriented programming, and they are not related to high-level schemes for large projects.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*TOOcWn7XXuJeL6hZ" /></figure><h4>🥈<a href="https://amzn.to/2NsvQU0">Documenting Software Architectures: Views and Beyond</a></h4><p>by Paul Clements, Felix Bachmann, Len Bass, David Garlan, James Ivers, Reed Little, Paulo Merson, Robert Nord</p><p>This one is a real classic in the field of documenting software architecture. It is the most comprehensive guide answering the questions from “Why do I need documentation at all?” to “How to document SOA.” Besides, it explains various documentation techniques (UML, AADL, and SysML) along with real-life examples.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*gA2Gx404OtosobSA" /></figure><h4>🥉<a href="https://amzn.to/2KzRvf3">Software Systems Architecture: Working With Stakeholders Using Viewpoints and Perspectives</a></h4><p>by Nick Rozanski, Eóin Woods</p><p>The authors of one of the best known and most frequently used techniques for designing and documenting software architecture offer their vision for these processes. At least you learn an alternative approach to designing and documenting. At most, you apply it to your project.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*rePaXD222JS7ZHdi" /></figure><h4>🥈<a href="https://amzn.to/2u9y55R">Designing Software Architectures: A Practical Approach (SEI Series in Software Engineering)</a></h4><p>by Humberto Cervantes, Rick Kazman</p><p>This book can help you adopt various designing methodologies from real-life projects. One of the main points of this book is the description of ADD (Attribute-Driven Design) and the application of this approach to practice. The authors also introduce different principles of designing concerning various projects, from pre-sales to enterprise solutions.</p><h3>Other books on Software Architecture</h3><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*Kbs19YDqk97je6zd" /></figure><h4>🥇<a href="https://amzn.to/2tYr7Bu">Software Estimation: Demystifying the Black Art</a></h4><p>by Steve McConnell</p><p>The author of “Code Complete” shares the secrets of evaluating projects of any size and degree of uncertainty. This book is as suitable for the developer, as the architect or manager. It contains a massive number of assessment techniques and allows you to understand your current level as an assessor of projects. A must-read!</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/1*QbgwX6VFt8lP-g6LBzWOPQ.jpeg" /></figure><h4>🥇<a href="https://amzn.to/2H12ppP">Site Reliability Engineering</a></h4><p>by Betsy Beyer, Chris Jones, Jennifer Petoff, Niall Richard Murphy</p><p>The fantastic book described how Google support their production environments. There is also an interesting note: DevOps vs. SRE. Have you ever heard about SRE? If not, then this book is for sure for you.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*K8pUbqsmJLXSF37H" /></figure><h4>🥉<a href="https://amzn.to/2NqTErg">Enterprise Architecture As Strategy: Creating a Foundation for Business Execution</a></h4><p>by Jeanne W. Ross, Peter Weill, David Robertson</p><p>The book is for those who want to learn more about the enterprise architecture and to understand interrelations between the business and the nature of solutions for it. The authors’ overview of the company’s business and its connection to IT inside the company allows you to understand why the choice is made in favor of this or that solution, and also how to arrange IT processes so that they work for business.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/200/0*xjPXU2FBLK0nMUN1" /></figure><h4>🥉<a href="https://amzn.to/2IVSzVd">Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems</a></h4><p>by Martin Kleppmann</p><p>The author shares his experience in building scalable, stable, and flexible systems. The book describes the fundamental principles of building such systems, as well as examples of workarounds which may be unavoidable during the design.</p><h3>Conclusion</h3><p>In the next article, we consider a short guide to the system design: whether you can quickly determine how the project should look like, and what questions you need to ask so that there are no uncertainties with the stakeholders.</p><blockquote><strong>🙌 If you enjoyed this article, then please hit the big clap button and recommend it to your colleagues and friends. 🙌</strong></blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6ad974e524ce" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Quality attributes in Software Architecture]]></title>
            <link>https://medium.com/@nvashanin/quality-attributes-in-software-architecture-3844ea482732?source=rss-f7a8f9885ea2------2</link>
            <guid isPermaLink="false">https://medium.com/p/3844ea482732</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[software]]></category>
            <category><![CDATA[development]]></category>
            <dc:creator><![CDATA[Nikolay Ashanin]]></dc:creator>
            <pubDate>Wed, 28 Mar 2018 10:27:22 GMT</pubDate>
            <atom:updated>2019-06-06T11:48:22.384Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*IL5scVORhcB8yzmb." /><figcaption>Image 1. Monument Valley game</figcaption></figure><p>Let’s continue investigating Software Architecture. We considered who is a Software Architect, what types of Software Architects exist, and what the architect should do at the beginning of a project. When stakeholders are identified, and requirements are collected, the question arises what to do next. After functional requirements are formulated — or the answer to the question “<strong>WHAT</strong> the system should do” is found, the <a href="https://hackernoon.com/tagged/software">software</a> architect starts searching for the answer to the question “<strong>HOW</strong> the system should work.” Non-functional requirements help in that case.</p><h3>Article series</h3><ol><li><a href="https://medium.com/@nvashanin/the-path-to-becoming-a-software-architect-de53f1cb310a">The Path to Becoming a Software Architect</a></li><li><a href="https://medium.com/@nvashanin/stakeholders-in-software-architecture-6d18f36250f9">Stakeholders in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/types-of-software-architects-aa03e359d192">Types of Software Architects</a></li><li><a href="https://medium.com/@nvashanin/quality-attributes-in-software-architecture-3844ea482732">Quality attributes in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/documentation-in-software-architecture-4f2e4159c4fc">Documentation in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/certificates-in-software-architecture-6b18e0102fe7">Certificates in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/books-in-software-architecture-6ad974e524ce">Books in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/system-design-cheat-sheet-762810f95fb6">System Design Cheat Sheet</a></li></ol><h3>What are the non-functional requirements?</h3><p><a href="http://www.scaledagileframework.com/nonfunctional-requirements/">Non-functional requirements (NFRs)</a> define the criteria that are used to evaluate the whole system, but not for a specific behavior, and are also called quality attributes and described in detail in architectural specifications.</p><p><strong>All NFRs can be divided into two main categories:</strong></p><ul><li><strong>NFRs that affect system behavior, design, and user interface during work.</strong></li><li><strong>NFRs that affect the development and support of the system.</strong></li></ul><p>A situation in which the system has the desired combination of quality attributes, for example, of usability and performance or reliability, shows the success of the architecture and the quality of the software. When designing to meet any requirements, it is essential to consider the impact on other attributes and find compromises between requirements. Along with this, the value or priority of each attribute differs from system to system. This article covers not all existing attributes, but those covered can be a good start for designing your system.</p><h3>Quality attributes types (ISO/IEC FCD 25010 diagram)</h3><p>To consider the types of quality attributes, we can use a <a href="http://iso25000.com/index.php/en/iso-25000-standards/iso-25010">diagram from ISO 25010</a>:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*okq3czjTQIdd9GpB." /><figcaption>Image 2. ISO/IEC FCD 25010 diagram</figcaption></figure><p>This standard describes the quality attributes of a software product. Next, we’ll look at what exactly each attribute means individually.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*K0PwrmqEgnJdpfckqVPDEg.png" /></figure><p><strong>Performance</strong> shows the response of the system to performing certain actions for a certain period.</p><p>There <strong>are two ways how to measure performance</strong>:</p><ul><li><strong>Latency:</strong> Time spent on responding to an event</li><li><strong>Channel capacity</strong>. The number of events that occur at a certain point in time.</li></ul><p>In practice, <strong>the possible performance indicators</strong> include, for example:</p><ul><li>Average/maximum number of system users per time unit.</li><li>Average page load time.</li><li>Average method execution time.</li></ul><p><a href="https://gist.github.com/jboner/2841832">Here</a> you can find interesting latency numbers that every developer should know.</p><p>Performance issues very often grow into problems that can affect everything, from the server’s capacity or how you develop your front-end to the efficiency of database queries or the capacity of communication channels.</p><p>Performance is almost always included in the list of critical quality attributes that need to be considered by the architect since it affects the entire system and can affect many parts of the architectural solution. Therefore, on the internet, you can find a large number of examples of <a href="https://github.com/donnemartin/system-design-primer#step-1-review-the-scalability-video-lecture">how to deal with performance problems</a>.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*q7wqz-7nZGV6GNhdHT_kZQ.png" /></figure><p><strong>Interoperability</strong> is an attribute of the system or part of the system that is responsible for its operation and the transmission of data and its exchange with other external systems. A well-designed system facilitates integration with third-party systems. To improve the interoperability, you can use well-designed external interfaces, standardization systems, etc.</p><p>Naturally,<strong> there are a lot of problems for interaction</strong>:</p><ul><li>Outdated external systems.</li><li>Different formats of data in similar external systems.</li><li>Different versions of the API in external systems.</li><li>Backward compatibility of the API for integration.</li><li>Poor quality and lack of standards of external systems.</li></ul><p>Interoperability cannot be ignored. In the best case, you will have to create additional layers for the interaction API. At worst, it will be necessary to rebuild the entire system.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*KsgJ5E7iSJtMT_jFH2Fb6g.png" /></figure><p><strong>Usability</strong> is one of the most essential attributes, because, unlike in cases with other attributes, users can see directly how well this attribute of the system is worked out. One of the critical problems of usability is too much interaction or too many actions necessary to accomplish a task. Incorrect sequences of steps in multistage interfaces are also a problem of usability. Data elements and controls may be designed not according to the accepted patterns of user experience, which also complicates the interaction. For example, if you are developing an iOS application, then it is important to use <a href="https://developer.apple.com/ios/human-interface-guidelines/overview/themes/">the guidelines from Apple</a>, or <a href="https://msdn.microsoft.com/ru-ru/library/windows/desktop/dn688964(v=vs.85).aspx">the guidelines from Microsoft</a> — for Windows desktop applications.</p><p>Examples of important indicators for this attribute are:</p><ul><li>List of supported devices, OS versions, screen resolutions, and browsers and their versions.</li><li>Elements that accelerate user interaction, such as “hotkeys,” “lists of suggestions,” and so on.</li><li>The average time a user needs to perform individual actions.</li><li>Support of accessibility for people with disabilities.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*TScG9yyVvsQgNxpiuvt_Rg.png" /></figure><p><strong>Reliability</strong> is an attribute of the system responsible for the ability to continue to operate under predefined conditions. Most often, the system fails due to the inaccessibility of external elements, such as databases, systems, and <a href="https://hackernoon.com/tagged/network">network</a> connections.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*FxUh-Df4acez7E049rjx2w.png" /></figure><p><strong>Availability</strong> is part of reliability and is expressed as the ratio of the available system time to the total working time. Important indicators for this attribute are:</p><ul><li>Availability.</li><li>Planned downtime.</li><li>The time needed to update the software, and so on.</li></ul><p>Availability is often expressed in the number of nines after the comma, that is nines of availability (hours / minutes / seconds):</p><ul><li>2 9’s (99%) = up to 87.6h / 5256.0m / 315360.0 seconds of downtime per year.</li><li>3 9’s (99.9%) = up to 8.76h / 525.6m / 31536.0 seconds of downtime per year.</li><li>4 9’s (99.99%) = up to 0.876h / 52.559999999999995m / 3153.6 seconds of downtime per year.</li><li>5 9’s (99.999%) = up to 0.0876h / 5.256m / 315.36 seconds of downtime per year.</li><li>6 9’s (99.9999%) = up to 0.00876h / 0.5256000000000001m / 31.536 seconds of downtime per year.</li><li>7 9’s (99.99999%) = up to 8.76E-4h / 0.05256m / 3.1536 seconds of downtime per year.</li></ul><p>For example, availability is <a href="https://www.colocationamerica.com/data-center/tier-standards-overview.htm">one of the main criteria for the tier-ranking of data centers in the USA.</a></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*2TEwA6-Wc93c6ASkMgX1Lw.png" /></figure><p><strong>Security</strong> is responsible for the ability of the system to reduce the likelihood of malicious or accidental actions as well as the possibility of theft or loss of information. Several measures are used to protect systems: authentication, encryption, audit, and others.</p><p>Examples of this attribute in the work of the system are:</p><ul><li>The ability of the system to detect DDoS attacks and respond to them.</li><li>Restrictions of user access by authentication/authorization.</li><li>Prevention of SQL injection.</li><li>Encryption of passwords and content.</li><li>Secure connection.</li></ul><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*dYKARf5sU8UN1K1zRcZ-Uw.png" /></figure><p><strong>Maintainability</strong> is the ability of the system to support changes. Changes can be related to new business requirements or the correction of old errors and affect system components or separate methods. Also, maintainability affects the time needed to restore the system after a failure. Excessive dependencies between components have a very negative effect on maintainability. In programming, there is a notion of anti-pattern <a href="https://en.wikipedia.org/wiki/Spaghetti_code">spaghetti code</a>, which means excessive coherence in the code. In architecture, there is no such thing, but architecture is very close to programming in this sense. It is because of the maintainability attribute that such concepts as separation of responsibility, microservice architectures, and modularity have appeared. At the same time, this attribute affects not only development processes but also management processes (for example, splitting teams into product-related parts).</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*WhUlcWKXu7H7f2UVVWxoRw.png" /></figure><p><strong>Modifiability</strong> determines how many common changes need to be made to the system to make changes to each item. The ideal is the case where each change affects only one element.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*mm9cuhGzseXmcJx9Vbikfg.png" /></figure><p><strong>Testability</strong> shows how well the system allows performing tests, according to predefined criteria. In addition to testing performance, testability makes it possible to effectively divide the system into subsystems.</p><p>The main indicators for this attribute are:</p><ul><li>Percentage of coverage with modular, integration, or unit tests.</li><li>The final list of required test environments as well as the final list of used approaches to testing (manual/automatic, regression, integration, etc.).</li></ul><p><strong>Other fundamental quality attributes are not covered by the standard but cannot be ignored in this article.</strong></p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*Gm-x491hP7SFY5mCZo9dXw.png" /></figure><p><strong>Scalability</strong> is the ability of the system to handle load increases without decreasing performance, or the possibility to rapidly increase the load.</p><p>There are <strong>two ways to improve scalability</strong>:</p><ul><li><strong>Vertical:</strong> To increase, we add more resources, such as memory, disks, or processors into one system.</li><li><strong>Horizontal:</strong> We increase the number of computing units and divide the load.</li></ul><p>The key indicators for measuring this attribute are:</p><ul><li>If the system allows for horizontal scaling.</li><li>The time needed to increase scaling, in seconds.</li><li>Scaling limitations: the number of servers or the network capacity.</li><li>Possibility to scale: the increase in the number of transactions or the amount of content.</li></ul><p>And this is only a small part of the indicators which you need to follow when designing. Scalability is one of the most essential attributes, no matter what is the project’s stage.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*Lt8sy_pprChG-oSwpsraRQ.png" /></figure><p><strong>Reusability</strong> is a chance of using a component or system in other components/systems with small or no change. Segregation of responsibilities, modularization, decreasing of copy-paste are all about reusability. Copying code, or worse, using different components for the same result in different modules, is one of the biggest problems of reusability.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/800/1*zywbMRLo_tTRhfJpF-a-Gg.png" /></figure><p><strong>Supportability</strong> is the ability of the system to provide useful information for identifying and solving problems. The main issues in ensuring supportability can be addressed with the following means:</p><ul><li><strong>No diagnosis:</strong> How the activity and performance of the system are controlled. It includes various types of logging.</li><li><strong>No tools for troubleshooting:</strong> This includes backups, various systems for creating snapshots of the system, and tools for auditing the system. When the system fails, it is always more pleasant to wait for an automatic restart than to solve the issue manually.</li><li><strong>No health checking:</strong> This includes a variety of systems for measuring compilation time, deployment time, database size, or mobile application size.</li></ul><p>Most often these are not considered in start-ups or small projects initially. The cost of maintaining the supportability attribute is high, and the result is only visible on a large scale. However, with the growth of the team and the product, this attribute becomes one of the important ones.</p><p>This article is divided into two parts. <strong>In the second part, let’s consider the approaches on how to prioritize quality attributes and answer the question of why it is so important to choose the right priorities.</strong></p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=3844ea482732" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Certificates in Software Architecture]]></title>
            <link>https://medium.com/@nvashanin/certificates-in-software-architecture-6b18e0102fe7?source=rss-f7a8f9885ea2------2</link>
            <guid isPermaLink="false">https://medium.com/p/6b18e0102fe7</guid>
            <category><![CDATA[certification]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[management]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[software-architecture]]></category>
            <dc:creator><![CDATA[Nikolay Ashanin]]></dc:creator>
            <pubDate>Mon, 05 Mar 2018 08:16:32 GMT</pubDate>
            <atom:updated>2019-06-06T11:42:41.428Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/0*lGl4CR_Jr7zpX9vd." /><figcaption>Image 1. Monument Valley game</figcaption></figure><p>Let’s continue investigating Software Architecture. In this article, we will consider the certification of architects. We will analyze issues related to the types of certificates and methods of obtaining them. Also, we will become aware of the need for certificates for a Software Architect.</p><h3>Article series</h3><ol><li><a href="https://medium.com/@nvashanin/the-path-to-becoming-a-software-architect-de53f1cb310a">The Path to Becoming a Software Architect</a></li><li><a href="https://medium.com/@nvashanin/stakeholders-in-software-architecture-6d18f36250f9">Stakeholders in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/types-of-software-architects-aa03e359d192">Types of Software Architects</a></li><li><a href="https://medium.com/@nvashanin/quality-attributes-in-software-architecture-3844ea482732">Quality attributes in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/documentation-in-software-architecture-4f2e4159c4fc">Documentation in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/certificates-in-software-architecture-6b18e0102fe7">Certificates in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/books-in-software-architecture-6ad974e524ce">Books in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/system-design-cheat-sheet-762810f95fb6">System Design Cheat Sheet</a></li></ol><h3>Why does Software Architect need certificates</h3><p>Certificates are an official and documented way to show your skills. <a href="https://www.microsoft.com/en-gb/learning/dashboard.aspx">According to Microsoft, 86% of recruiters track the existence of certificates from the candidate. 64% of HR managers indicate that the existence of certificates affects a career in IT</a>. Certificates confirm skills and help the candidate find work more comfortable. If the recruiter sees two identical summaries, then his choice will fall on the candidate, who has a certificate confirming her/his skills.</p><p>If certificates influenced the career of the architect, they could be considered as a silver bullet. However, some moments devalue certificates:</p><ul><li><strong>The uniqueness of the architect</strong>. A certificate for an average developer means much more. It is because when searching for a developer in companies such as Google or Facebook, the recruiter accumulates hundreds of resumes for one position. One of the options to highlight your resume among the rest may be the availability of a certificate that formally proves the candidate’s skills. For a software architect, such a scheme is not suitable, because there are very few architects on the market, and usually, they have high visibility.</li><li><strong>Software Architecture is a practice</strong>. Each certificate implies the passing of the theoretical part. But for the architect, nothing can replace practical experience. In theoretical preparation, there is no answer to the question of what to do if the cost of a solution error costs millions of dollars, and the consequences can be understood six months later. Or how to connect non-functional requirements for a project on which 30 stakeholders with the same degree of responsibility. In theory, there are several approaches to solving this problem, but in practice, they may not work. Therefore, the loss of an architect for a company rises in an insane amount of money, just like the growth of a new one inside the company. <strong>Nothing can replace practical experience</strong>.</li><li><strong>A certificate is a formality. </strong>Many certificates can be obtained by spending a month preparing and not understanding the topic before. All questions take place within a month. Then the memorized correct answers are displayed in the exam. A month after the successful completion, the candidate no longer remembers a single answer, but the certificate is received. There are unique guides and manuals on how to pass on the required certificate and what you need to learn for this.</li></ul><p>In the beginning, we specifically considered the minuses of certification, so as not to get the impression that it is a must-have for the architect. Now let’s look at the existing certification systems and find out what pluses certificates give for the architect’s career.</p><h3>Certificates for Solution Architect</h3><p>Let’s consider the essential universally recognized certificates for Solution Architects (<a href="https://medium.com/@nvashanin/types-of-software-architects-aa03e359d192">see who’s Solution, Enterprise and Domain Architects in the previous article</a>):</p><ul><li><a href="https://www.sei.cmu.edu/training/certificates/architecture/professional.cfm"><strong>Certified Software Architect</strong></a> <strong>by Carnegie Mellon University.</strong> One of the most formal options. It consists of three courses. Almost like a Master Degree in Software Architecture! The certificate is free, but there is a nuance — you will have to pay all three courses of study :)</li><li><a href="http://www.iasaglobal.org/certifications/"><strong>CITA-P: Certified IT Architect.</strong> </a>It costs US$ 300. Held by IASA (an Association of All IT Architects). It looks like a standard certification system with online/offline courses, <a href="https://www.iasaglobal.org/product/self-paced_foundation/">own book</a>, and the opportunity to become a part of this association.</li><li><a href="https://www.arcitura.com/soa-school/"><strong>Certified SOA Architect</strong></a>. Provide a separate school for architects. The school consists of 23 lessons and is the most complete of the entire list of this article — one of the most attractive options for learning and becoming a software architect.</li><li><strong>Private certifications SA</strong>. Large companies have their certification systems for architects. For example,<a href="https://itcluster.lviv.ua/en/programa-rozvy-tku-napryamku-solution-architecture-v-epam-ukrayina/"> EPAM Systems has a Solution Architect University</a>, which consists of three levels. Each level implies four months of training and contains a large amount of theoretical and practical work. The biggest plus of such certification is that they are more directed to practice than others. The biggest minus is available only to the company’s employees.</li></ul><h3>Certificates for Enterprise Architect</h3><p>In this part, we will consider the five<a href="http://www.tomsitpro.com/articles/enterprise-architect-certifications,2-640.html"> most popular certificates for enterprise architects</a>:</p><ul><li><a href="https://www.axelos.com/certifications/itil-certifications/itil-master"><strong>ITIL Master (Axelos)</strong></a>. The cost depends on the place of passing. ITIL (Information Technology Infrastructure Library) is a global provider of certification and quality assessment systems in a wide range of software development areas. And also, one of the most popular certification systems in the world (more than 2M certified specialists in the world, but not all of them are architects). There are five levels of the exam. The architect needs to get the last fifth level — ITIL Master Certificate — IT Service Management.</li><li><a href="https://www.opengroup.org/togaf9/cert/docs/indiv.html"><strong>TOGAF 9 (The Open Group)</strong></a>. There are two levels. It costs US$ 320 per level or US$ 496 for both. It is the recognized leader among certification systems for enterprise architects. It represents a framework for the organization of development and architecture in more than 80% of companies in the world. <a href="https://www2.opengroup.org/ogsys/catalog/b133">There is documentation for this framework, consisting of ± 500 pages,</a> which should be used when preparing for the exam.</li><li><a href="http://certification.salesforce.com/technicalarchitect"><strong>CTA (Salesforce)</strong></a>. The cost is US$ 6,000. It is carried out by Salesforce. A distinctive feature is the requirements that must be met for the exam. Namely, five years of proven practical experience in the full development cycle, or 3 years of proven practical experience in the role of the architect.</li><li><a href="https://www.zachman.com/certification/enterprise-architect"><strong>Zachman Certified — Enterprise Architect (Zachman)</strong></a>. To obtain this certificate, it is necessary to pass a 4-day workshop priced at US$ 3,499. It is a recognized ontology of enterprise architecture. Created by John Zachman. Like a TOGAF, it is a framework. Its distinctive feature is the presence of four levels of the certificate: from associate (level I) to the educator (level 4).</li><li><a href="https://www.redhat.com/en/services/certification/rhca"><strong>RHCA (Red Hat)</strong></a>. Costs are from US$ 2000 for level I to US$ 2,400 for level II. Red Hat holds it. It has a broad set of requirements for passing the certification exam. In particular, you need to get five necessary certificates. To pass the exam, you must use the company’s paid resources, including the possibility to hire an instructor offline or online.</li></ul><h3>Certificates for Domain architect</h3><p>For Domain architects, there are also certificates. There are many more of them than for Solution and Enterprise architects. Most of the large companies provide certificates both for specific directions, <a href="http://education.oracle.com/pls/web_prod-plq-dad/db_pages.getpage?page_id=654&amp;get_params=p_id:212">like JavaEE from Oracle</a> and for certain technologies, for example, Amazon Web Services. Let’s consider a particular case of such certificates related to cloud computing:</p><ul><li><a href="https://aws.amazon.com/certification/certified-solutions-architect-associate/?nc1=f_ls"><strong>AWS Architect certification</strong></a><strong>.</strong> From US$150 for the Associate level to US$300 for Professional. Requirements for passing: a year of experience with AWS for the Associate level, and you need to have the Associate certificate to apply for Professional. A distinctive feature is that the exam itself is updated every six months.</li><li><a href="https://www.microsoft.com/en-us/learning/azure-exams.aspx"><strong>AZURE Architect certification</strong></a><strong>.</strong> From US$100. <a href="https://www.microsoft.com/en-us/learning/browse-all-certifications.aspx">Microsoft has a large number of certificates</a> that are recognized throughout the world of development and affect the developer’s career. Like Amazon, Microsoft actively updates all certification systems.</li></ul><p>Certificates for Domain architects have some distinctive features to differ from Enterprise certificate &amp; Solution Architect certificate:</p><ul><li><strong>Knowledge, like certificates, is becoming obsolete quickly. </strong>Yesterday you passed the exam for one version of the technology, today another one has come out, and the knowledge has become invalid. Count on the “lifetime” service time certificate is not worth it. In domain areas, everything changes often, and knowledge becomes obsolete every day.</li><li><strong>Domain certificates are most of all. </strong>It is necessary to competently approach the choice, so as not to waste money and time.</li><li><strong>Narrowly specialized. </strong>As a rule, it confirms highly specialized knowledge. It is worth remembering that the higher the architect is on the career ladder, the more abstract the way of her/his thinking is. Therefore, these certificates are preferably suitable for developers of specific platforms.</li></ul><h3>Why does Software Architect need certificates</h3><p>This question was repeated twice in the article. And the certification systems mentioned above exist for several reasons. Perhaps, one of those reasons will be critical for you, and that will encourage you to receive one of the certificates:</p><ul><li><strong>Customer’s requirement. </strong>The customer can require certified employees only. It is one of the key points why you might need certification. For non-technical persons, certificates are one of the few ways to understand that an expert has the skills to perform a particular job.</li><li><strong>If you work on the global market. </strong>If you have not been heard about in the country of relocation, even if you are a good and well-known specialist on your market, the certificates will allow you to prove your skills.</li><li><strong>If you want to change your job. </strong>The more tags in the resume, the easier it is to change the job. But developers know that the more experience they have, the more often the work is looking for them, and not vice versa. For an architect, as for an incredibly unique resource on the human resources market, this phrase is even more reasonable.</li></ul><p>It is your own decision whether you need a certificate with confirmation of your skills or not. Usually, this situational decision is based on current needs. I believe that certificates for an architect are not needed and you do not need to pass exams for them if this is not required by the reasons outlined above. Practice and constant independent theoretical preparation have much greater importance for the career of an architect.</p><p>In the next article, we will consider the list of literature for a Software Architect.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6b18e0102fe7" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Types of Software Architects]]></title>
            <link>https://medium.com/@nvashanin/types-of-software-architects-aa03e359d192?source=rss-f7a8f9885ea2------2</link>
            <guid isPermaLink="false">https://medium.com/p/aa03e359d192</guid>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[management]]></category>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software]]></category>
            <dc:creator><![CDATA[Nikolay Ashanin]]></dc:creator>
            <pubDate>Thu, 01 Feb 2018 09:11:50 GMT</pubDate>
            <atom:updated>2019-06-06T11:31:35.343Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*ih6Qyv5_PCDpJNbKC7Z2Rw.png" /><figcaption>Image 1. Monument Valley game</figcaption></figure><p>Let’s continue investigating Software Architecture. In every field of professional activity, there are various specializations. For example, in medicine, we have surgery, cardiology, ophthalmology, and many other areas. Or, for instance, management unites resource managers, PR managers, even cleaning managers!</p><p>Specialization is necessary when the amount of knowledge in the field exceeds a rational limit. And since the software architecture is a massive amount of knowledge, it is essential to reduce the duties of a person for better productivity. Therefore, the types of software architects will be discussed in this article.</p><h3>Article series</h3><ol><li><a href="https://medium.com/@nvashanin/the-path-to-becoming-a-software-architect-de53f1cb310a">The Path to Becoming a Software Architect</a></li><li><a href="https://medium.com/@nvashanin/stakeholders-in-software-architecture-6d18f36250f9">Stakeholders in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/types-of-software-architects-aa03e359d192">Types of Software Architects</a></li><li><a href="https://medium.com/@nvashanin/quality-attributes-in-software-architecture-3844ea482732">Quality attributes in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/documentation-in-software-architecture-4f2e4159c4fc">Documentation in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/certificates-in-software-architecture-6b18e0102fe7">Certificates in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/books-in-software-architecture-6ad974e524ce">Books in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/system-design-cheat-sheet-762810f95fb6">System Design Cheat Sheet</a></li></ol><h3>Types of architects</h3><p>Let’s consider <a href="https://en.wikipedia.org/wiki/Software_architect">the following division</a>:</p><p>● <strong>System architect.</strong></p><p>○ Affects one system and builds connections within it.</p><p>○ Focuses on the technical component of the development.</p><p>○ Helps the project manager to make management decisions.</p><p>○ Has a deep knowledge of the technologies.</p><p>● <strong>Solution architect.</strong></p><p>○ Participates in discussions of business.</p><p>○ Creates connections between several systems.</p><p>○ Provides communication between several teams.</p><p>○ Designs connections between systems.</p><p>○ Codes independently only solution prototypes.</p><p>○ Acts as a universal soldier of business and technology.</p><p>● <strong>Enterprise architect.</strong></p><p>○ Affects all development of the company.</p><p>○ Works with high-level abstractions of the created systems.</p><p>○ Provides technical communications throughout the company.</p><p>○ Does not interact with the code.</p><p>○ Focuses on the business component.</p><p>○ Has a broad technological horizon.</p><p>○ Owns several domains.</p><h3>Domain architects</h3><p>I often heard the question — is it possible for an architect to exist in mobile applications? And this question is so resonant that it is challenging to get a reasoned response to it. Can there be an architect who knows only the JavaEE technology stack, or just .NET? How should these specialists be called? Tech leads or something else?</p><p>While thinking, during my career, how to answer this question, I changed my mind several times. In my discussions with specialists who hold the positions of highly specialized architects, they naturally tried to give arguments to justify their position. Others said it was pointless and you should call such a person anything, but not an architect.</p><p>Consider a situation where a three-person startup has a CEO (chief executive officer), a CTO (chief technical officer), and a CMO (chief marketing officer). Can there be a technical officer for one developer? Or a marketing officer for a department of one specialist? Is it possible to determine whether a fictional rank is in pursuit of a beautiful name or a real necessity?</p><p>Let’s try to answer these questions. If there is a post, then there must be job descriptions that the specialist does. For architects, we described them in <a href="https://medium.com/@nvashanin/the-path-to-becoming-a-software-architect-de53f1cb310a">the previous article</a>.</p><p>In large projects, there are posts whose instructions coincide with those described in the above article. If the project consists of one or more platforms, each of them requires an expert who will act as a domain architect and perform the following duties:</p><p>● <strong>Identifying the stakeholders on the project.</strong> It is important to note that a domain architect should select stakeholders that affect his platform and work with them.</p><p>● <strong>Identifying business requirements and requirements of the stakeholders on the project</strong>. If the architect finds platform-specific stakeholders, then he/she should find the requirements with the restrictions, specifically for the domain.</p><p>● <strong>Designing the entire system based on the received requirements. </strong>For a domain architect, it is more important not to design a whole system, but to integrate the platform into the project outline. And also, to consider the connections between the components that affect the platform.</p><p><strong>● Choosing the technologies for the implementation of each component and connections between the components. </strong>Unlike higher-level architects, a domain architect, as a rule, has the most significant impact on the choice of application technologies for her/his platform. For example, in mobile applications, the architect deals with such issues as what kinds of testing to use on the project, whether it needs code generation, how to organize the service and presentation layers, what architectural patterns to use and why it is generally necessary for the project.</p><p><strong>● Writing project documentation and support it.</strong> If there is an architecture, then it should be documented. Even in terms of one platform. As written in the book “<a href="https://www.amazon.com/Software-Architecture-Practice-3rd-Engineering/dp/0321815734">Software Architecture in Practice</a>,” if the architecture is not documented, then it is not architecture. In mobile development, it can be a scheme for working with databases, a description of network interactions, class diagrams, and so on.</p><p>● <strong>Creating unified development standards in the company.</strong> This point is especially suitable for a domain architect because all standards are usually developed for a specific platform.</p><p>● <strong>Controlling the architecture during the next iteration of the system release</strong>.</p><p>A domain architect must control the entire product development cycle. And being the closest person to the technical component of the platform and, at the same time, seeing it as a whole picture, the architect is fully responsible for the quality of the product on a particular platform.</p><p>As a result, there is a large number of different types of domain architects:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*6ZOJNn4SDSD9KYlFHr34_A.png" /><figcaption>Image 2. Some types of domain architects</figcaption></figure><p>The picture shows only a small part of them. In reality, there are many more of them, as well as various technology stacks.</p><p>On the other hand, it is necessary to add the position of the architect only when the corresponding responsibilities are apparent. If you have a project from one platform and two developers, adding an architect’s position is redundant, and one of the developers can perform these duties.</p><h3>Growing from one type of architect to another</h3><p>To consider this topic, let’s use the concept of the <a href="https://en.wikipedia.org/wiki/T-shaped_skills">T-Shape model</a>. It assumes that a specialist can grow vertically and horizontally. Increasing the vertical line means improving the skills within your specialization, that is, Deep Knowledge. Increasing the horizontal line means getting skills and experience in a wide variety of domain areas and technological stacks, that is, the Wide Experience. By combining these two features, you can get information about the current level of knowledge and experience of the employee at any time.</p><p>For example, developer level growth is described by a vertical bar. The developer learns new knowledge about frameworks, language, and development tools within the limits of one technical stack. The architect, however, must possess not only deep knowledge but also to have broad technical erudition across several platforms.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*n1Zqvw8Bk-_o8RWXnzS5KQ.png" /><figcaption>Image 3. T-Shaped skills of an architect</figcaption></figure><p>At the same time, the architect’s growth is closely related to the number of platforms in which he/she has theoretical and mainly practical expertise, and also, with the number of subject areas in which he/she know oats. The goal of the architect’s career development is the formation of the “m” — multiplatform &amp; multidomain specialist.</p><p>At this moment, we finish the consideration of the architect types and their growth perspectives. In the next article, we will consider the quality attributes and their usage in software architecture.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=aa03e359d192" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Stakeholders in Software Architecture]]></title>
            <link>https://medium.com/@nvashanin/stakeholders-in-software-architecture-6d18f36250f9?source=rss-f7a8f9885ea2------2</link>
            <guid isPermaLink="false">https://medium.com/p/6d18f36250f9</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[development]]></category>
            <category><![CDATA[project-management]]></category>
            <category><![CDATA[software-engineering]]></category>
            <dc:creator><![CDATA[Nikolay Ashanin]]></dc:creator>
            <pubDate>Sat, 04 Nov 2017 07:27:07 GMT</pubDate>
            <atom:updated>2019-06-06T11:27:42.775Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*-lspDvai8tDyZyHgwY0WuQ.png" /><figcaption><strong>Image 1. Monument valley game</strong></figcaption></figure><p>Let’s continue investigating Software Architecture. Before reading, I recommend that you read <a href="http://medium.com/@nvashanin/the-path-to-becoming-a-software-architect-de53f1cb310a">the previous article from the series</a>.</p><p>This time we will talk about the purpose of the development of projects, construction of architectural solutions, and programming of algorithms. Let’s talk about the people for whom this is done and who can influence the project.</p><h3>Article series</h3><ol><li><a href="https://medium.com/@nvashanin/the-path-to-becoming-a-software-architect-de53f1cb310a">The Path to Becoming a Software Architect</a></li><li><a href="https://medium.com/@nvashanin/stakeholders-in-software-architecture-6d18f36250f9">Stakeholders in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/types-of-software-architects-aa03e359d192">Types of Software Architects</a></li><li><a href="https://medium.com/@nvashanin/quality-attributes-in-software-architecture-3844ea482732">Quality attributes in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/documentation-in-software-architecture-4f2e4159c4fc">Documentation in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/certificates-in-software-architecture-6b18e0102fe7">Certificates in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/books-in-software-architecture-6ad974e524ce">Books in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/system-design-cheat-sheet-762810f95fb6">System Design Cheat Sheet</a></li></ol><h3>Who is a stakeholder</h3><blockquote>There’s always one more System Stakeholder than you know about; and the known stakeholders have at least one more need than you know about now.</blockquote><blockquote>Tom Gilb</blockquote><p>The code itself, no matter how ideal it is, is not worth a penny. What matters is the business functionality that this code implements. Or rather, the people who are willing to pay for this business functionality, because it solves their problems, or entertains. All these people, for whom developers, architects, managers work all over the world, are called stakeholders. Project development is all about its stakeholders. And the developers themselves are also among these people.</p><p><a href="https://www.iso.org/standard/63711.html"><strong>A stakeholder</strong></a> is a person or organization that has rights, shares, claims, or interests concerning the system or its properties meeting their needs and expectations.</p><p>To put it more simply, the interests of stakeholders have some influence on the project, so their opinion should always be taken into account. If you do not do this and overlook one of the key stakeholders, you can ruin the whole project, and it will be much more expensive than just letting a development bug in the project. Stakeholders provide opportunities and limitations for the system and are the source of requirements.</p><p>The interesting point is that often, stakeholders are not defined before the decision-making stage. But as soon as the decision is designed, announced, or implemented, everyone affected by this decision will express their opinion. To save the project from potential harm, you are recommended to first answer the questions why and to whom, and only then how.</p><h3>Stakeholder types</h3><p>For whom is the project usually created? A satisfactory answer will be — for end users. End users are also stakeholders on the project. However, they may not be the important ones. Therefore, in software development, it’s worth focusing not on end users, but entirely on stakeholders.</p><p>It’s impossible to compile a complete list of stakeholder types since, for different systems, they can differ significantly.</p><p>Let’s highlight the following stakeholders as the most common. Also, let’s look at <a href="https://simplicable.com/new/project-stakeholder">each category in terms of consequences</a> when ignoring their interests:</p><p>● <strong>Those who are involved in the project and work on it</strong>.</p><p>○ <strong>Project team</strong>. Imagine that you have developed a solution that uses the .NET technology stack. But there is one problem. You have twenty available Java developers in the company and no one who knows .NET. I suppose after you remember this, there will be no need in explaining why the designed solution is terrible. And this is the simplest example. You need to know the team to understand what technologies they know well and which of them should not be used just because they are trending.</p><p>○ <strong>Management team</strong>. Let’s say you forgot to ask your project manager about something important before making a decision. But they will cover you and do so for the designed solution to reach the final result. Moreover, often, a project manager has more information and listening to their opinion is very useful.</p><p>○ <strong>Third-party companies</strong>. There may be various problems from the complexities with integration to the inability to use third-party solutions.</p><p>○ <strong>Supporting team</strong>. An organization or a person who supports the system at one or more stages of its life cycle. Let’s say an architect forgot to come up with a support system. It raises such questions as “Was the designing of this system just a hobby, and how do we support it?”.</p><p>● <strong>Those who are affected by the project and who will use its artifacts, including the results</strong>.</p><p>○ <strong>Customers</strong>. Customers are one of the key stakeholders. If you are an architect, then there is only one question. How could you forget to discuss your decision with the people who pay the money for the project development? I will answer myself. It’s easy. In my practice, there was one example when a fantastic technical solution for real-time data processing and synchronization was created. This decision was one of the most advanced on the market, taking into account the latest technological trends. Furthermore, it was competently designed, correctly tested, and shown to the customer. And then it turned out that the customer wanted something different. More precisely, a completely different solution. And they did not need super synchronization at all.</p><p>○ <strong>Heads and employees of functional units</strong>. They are rarely encountered in practice, but they are one of the most demanding stakeholders. If you forgot them, then prepare yourself for them putting sand in your wheels. For example, you are designing an accounting system that affects two departments. Each department has a head and 15 employees. The designed system further optimizes the work of one of the departments and allows them to free 12 out of 15 people. At the same time, the manager is very greedy for power and is shocked that, due to the additional functionality you have developed, they will have only three employees. Therefore, they try to look for flaws in the system, write a huge number of emails to all key persons on the project, and stall the process wishing this functionality would be removed.</p><p>○ <strong>End users</strong>. So, we finally got to them. I hope they always had a key influence on the project, but in practice, this is not true.</p><p>● <strong>Those who are not involved in the project, but because of their position or activities can influence it</strong>.</p><p>○ <strong>Top-managers of the company</strong>. The company’s profit, success, and position, as well as the success of projects, are essential for them. We should try to take this into account.</p><p>○ <strong>Owners of the company</strong>. They get very upset hearing the words “project” and “risks” in one statement. Try to minimize them when designing your project.</p><p>○ <strong>Shareholders and creditors</strong>. The company’s profit is significant for these stakeholders. Moreover, they want to get it as soon as possible and be stable. Designing a solution that will be done in five years, although you can divide it into iterations and start earning tomorrow is a mistake that can cost you your career.</p><p>○ <strong>Regulatory structures</strong>. You designed a system that does not correspond to some standards and guides, and then your solution is banned from the AppStore? It is anything but the right solution.</p><p>Also, it is worth paying special attention to the fact that stakeholders can have not only a positive attitude towards the project but also a negative one. Therefore, we will consider how to define stakeholders for a specific project.</p><h3>Theory of stakeholder management</h3><p>The theory of stakeholder management was firstly detailed by Edward Freeman in the book “Strategic Management: A Stakeholder Approach.” It states that understanding and defining groups of people that can influence a business or a specific project makes it possible to structure and optimize the management process. And although this process is more related to the realm of management, let’s not forget that we are not just coders, but architects, and this applies to us too. In his concept, Edward Freeman divided the process of stakeholder analysis and management into six stages:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*iLnzEJpWg63SjOwgUjN5dA.png" /><figcaption><strong>Image 2. Process of stakeholder analysis</strong></figcaption></figure><p>Let’s look at these stages in more detail.</p><h3>Identifying all stakeholders</h3><p>Since stakeholders influence the project, all stakeholders should be identified and studied strictly before starting the design. It can be done by a business analyst or an architect. Information about stakeholders should be used by the project manager at the business analysis stage, during the creation of the architecture, and also when implementing the designed solution.</p><p>It is very important not only to identify stakeholders but also to find ways to influence them so that later it is easier to agree on various issues.</p><p>Communication is the primary tool used to influence stakeholders. It should always be used first. In particular, it allows you to determine their motivation for acting a certain way.</p><p>To communicate effectively with stakeholders, you need to know them well. Without that, it is impossible to work efficiently.</p><p>Any stakeholder analysis begins with identifying all the stakeholders of the project. It will be useful to use the technique of brainstorming. The following questions can help identify stakeholders:</p><p>● Whose actions can result in failing to meet the project goals?</p><p>● Who has the most interest in developing this project?</p><p>● Was there a project like this before? If so, was it successful?</p><p>● Is it necessary for all departments to participate in this project?</p><p>● What issues need to be solved during the project?</p><p>● Who knows this data better than everyone else, and can design it independently?</p><p>Stakeholder analysis allows:</p><p>● <strong>Identifying the interests</strong> of stakeholders that may affect the project.</p><p>● <strong>Identifying the potential difficulties</strong> that may interrupt the project or reduce its success.</p><p>● <strong>Identifying the key persons</strong> who need to be informed about the project progress.</p><p>● <strong>Identifying the groups of people</strong> that need to be involved at each stage of the project.</p><p>● <strong>Evaluating the means, rules, and principles</strong> of communication throughout the project.</p><p>● <strong>Planning actions</strong> to reduce the negative impact of stakeholders on the course of the project.</p><p>Bear in mind that the designed architectural solution must pass several phases of work with stakeholders to be recognized as successful.</p><p>According to the <a href="https://ru.wikipedia.org/wiki/Object_Management_Group">OMG</a> proposals, we can distinguish six project states in terms of accounting for, involving, and satisfying the stakeholders:</p><p>● <strong>Recognized </strong>— stakeholders are identified.</p><p>● <strong>Represented </strong>— methods of engaging stakeholders are agreed upon, and representatives from each group of stakeholders are appointed.</p><p>● <strong>Involved </strong>— representatives of stakeholder groups take an active part in the project and fulfill their duties.</p><p>● <strong>In agreement </strong>— representatives of stakeholders are all in agreement.</p><p>● <strong>Satisfied for deployment </strong>— the minimum expectations of the stakeholder representatives are achieved.</p><p>● <strong>Satisfied in use </strong>— the system meets or exceeds the minimum expectations of the stakeholders.</p><p>Determining the requirements with the stakeholders’ help</p><p>After determining the list of stakeholders, it is necessary to understand their position. Their importance and influence allow us to identify the main requirements and exclude unnecessary ones.</p><p>To do this, you can use the following strategy of stakeholder management, which is usually used in project management:</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*LygKENWoGb39G-QrCZyHhg.png" /><figcaption><strong>Image 3. Influence-importance map</strong></figcaption></figure><p>The stakeholder map is a two-axis chart with axes of influence and importance.</p><p><strong>Influence</strong> is the stakeholder power in project management. The stakeholder power is in influencing the level of the project investment, participating in the project budgeting, and having an impact on people who make decisions on critical issues during the project.</p><p><strong>The importance</strong> is the stakeholder’s contribution to the project outcome. It is determined by how satisfying the needs, solving the problems and interests of each stakeholder can affect the project outcome. The importance is, for example, the special knowledge or skills of the stakeholder, as well as the needs that must be satisfied for the project to become successful.</p><p>The map is divided into four sectors, which are the stakeholder groups. Different working methods are applied to each group.</p><p><strong>The first group is High influence, high importance — Good relations.</strong> It is necessary to establish close working relations with these stakeholders because, for them, the project is essential. They are involved in the implementation and actively influence the process and result.</p><p><strong>The second group is High influence, low importance — Monitoring.</strong> These stakeholders have the power to implement the project but are not too interested in it. With this combination of factors, they can become sources of risk, so careful monitoring and management are required.</p><p><strong>The third group is Low influence, high importance — Protection.</strong> They require special initiatives to protect their interests because the project is quite crucial for them, but their impact on its implementation is insignificant (or they cannot influence).</p><p><strong>The fourth group is Low influence, low importance — Low priority. </strong>This group of stakeholders is involved and relatively interested, but not so much. Therefore, from the perspective of attention allocation, this group has a low priority.</p><h3>Applying your stakeholder knowledge</h3><p>When the list of stakeholders is formed, the importance-influence map is drawn, the list of requirements is created and approved by the key stakeholders, you can start designing the project. Further, the project manager should work with the key stakeholders and accompany them throughout the whole life cycle of the project. The project manager must ensure that the requirements of stakeholders are applied during development, and in case of sudden changes in the requirements or stakeholders themselves, the manager should inform the architect who will be responding to these changes.</p><p>It is important to remember that if the architect does not propose the most optimal algorithm, this can lead to the project becoming more expensive with different consequences. If the architect fails to identify one of the key stakeholders, it may cost him his career.</p><h3>Recommended Books</h3><ul><li><a href="https://amzn.to/2uaP7QY">Stakeholder Theory: The State of the Art</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=6d18f36250f9" width="1" height="1" alt="">]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Path to Becoming a Software Architect]]></title>
            <link>https://medium.com/@nvashanin/the-path-to-becoming-a-software-architect-de53f1cb310a?source=rss-f7a8f9885ea2------2</link>
            <guid isPermaLink="false">https://medium.com/p/de53f1cb310a</guid>
            <category><![CDATA[software]]></category>
            <category><![CDATA[software-architecture]]></category>
            <category><![CDATA[software-engineering]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[management]]></category>
            <dc:creator><![CDATA[Nikolay Ashanin]]></dc:creator>
            <pubDate>Sun, 01 Oct 2017 13:49:10 GMT</pubDate>
            <atom:updated>2019-06-06T11:12:36.150Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*JFdmWD8_X5gpCjNVaqILgQ.png" /><figcaption>Image source: monument valley game</figcaption></figure><p>Have you ever wondered what career opportunities a developer has? What directions are open, beyond what horizons to grow. And most importantly, where are developers beyond the age of 45? Is there a developer among your friends who is over 45? I know several developers beyond this age, and many of them are hardcore programmers who even saw punch cards back in the day.</p><p><strong>There are several career paths a developer might take:</strong></p><p>● The first and obvious one is to <strong>grow in the area in which you are working</strong>. If you are a junior developer, then become to middle, then senior and lead roles.</p><p>● <strong>Transition to another technology stack</strong>. A significant number of developers moved into the mobile area when iOS and Android OS gained ground.</p><p>● <strong>Grow into a manager role</strong>. As a developer, the hugest staffing issue I saw was the shortage of competent managers. Smart managers are expensive, hence they are scarce. If the manager has a technical background, that will allow him to be on the same wavelength with the developers.</p><p>● <strong>Become a software architect</strong>. This direction will be considered in this series of articles.</p><p>● <strong>Get out of IT</strong>. Sometimes this happens. It is never too late to do what you like to do.</p><h3>Article series</h3><ol><li><a href="https://medium.com/@nvashanin/the-path-to-becoming-a-software-architect-de53f1cb310a">The Path to Becoming a Software Architect</a></li><li><a href="https://medium.com/@nvashanin/stakeholders-in-software-architecture-6d18f36250f9">Stakeholders in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/types-of-software-architects-aa03e359d192">Types of Software Architects</a></li><li><a href="https://medium.com/@nvashanin/quality-attributes-in-software-architecture-3844ea482732">Quality attributes in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/documentation-in-software-architecture-4f2e4159c4fc">Documentation in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/certificates-in-software-architecture-6b18e0102fe7">Certificates in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/books-in-software-architecture-6ad974e524ce">Books in Software Architecture</a></li><li><a href="https://medium.com/@nvashanin/system-design-cheat-sheet-762810f95fb6">System Design Cheat Sheet</a></li></ol><h3>Yes, This Was My Path</h3><p>In the past eight years, I have worked with Java EE, then moved to iOS, and became a team lead. I managed various developer teams, including Android, and Web stacks. Created the architecture of the network layer for several services developed by the company, with sockets and REST API. I became acquainted with the managerial role and the prospect of growing in this direction while in the position of team lead for over two years. In my next role, my goal is to grow as a software architect.</p><p>For most developers, the function of the architect on the project is often unclear, so in this series of articles, I will try to find the answers to these related questions. Who is an architect, what is the scope of responsibilities, and how to grow in this direction and outline an action plan for myself and beginners wanting to move along this path?</p><h3>Who Can Benefit from This?</h3><p>This series of articles will help you if you belong to one of the following categories:</p><p>● <strong>IT developer or engineer</strong>. You are still growing as a developer, but you are looking ahead and planning your career. Even if the goals are initially vague, a person who consciously sets strategic goals will reach them much quicker than a person who does not plan where she is heading.</p><p>● <strong>Team leader, lead software engineer</strong>. You are at the highest stage of the software development discipline. To grow further, you have a choice to either learn one more stack of technologies, pursue a career outside software engineering, or to become a software architect.</p><p>● <strong>Software architect</strong>. You recently took this position, or have been working in this field for a long time. Perhaps one of the main qualities of such a specialist is the understanding that there are always areas that a person does not know and that the learning process is continuous.</p><p>● <strong>IT manager</strong>. Although you are a manager, you understand perfectly well that you should at least approximately understand what your subordinates or colleagues are doing. The acute problem of management is the technical incompetence of the manager in the field in which he or she is managing.</p><h3>Who is an Architect?</h3><p>Before moving on to more specific questions, it is necessary to define the software architect role and responsibilities.</p><blockquote>A <strong>software architect</strong> is a software expert who makes high-level design choices and dictates technical standards, including software coding standards, tools, and platforms. The leading expert is referred to as the chief architect. (Wikipedia, The Free Encyclopedia, s.v. “Software architect”, <a href="https://en.wikipedia.org/wiki/Software_architect">https://en.wikipedia.org/wiki/Software_architect</a></blockquote><p>Like most high-level positions, there are no clear criteria that define this role. However, it is possible to identify several responsibilities and qualities that contribute to the career of the architect.</p><p>First, let’s consider the <strong>characteristics of the architect</strong>:</p><p>● <strong>Communicability</strong>. Having talked with many software architects, I heard that it is one of the essential characteristics of this specialist. During the working day, they have to speak with customers in the language of business, managers of all levels, business analysts, and developers. If you have a natural charisma and you know how to convince people, then this will be a huge plus, as it is crucial to explain your actions correctly. Architects are laconic, eloquent, and competent speakers. The software architects with whom I spoke have highly developed skills in communication and persuasion. Another reason why this characteristic is most important is that the architect in this role participates in most discussion making processes, and often compromises must be reached that is acceptable and beneficial for all involved parties.</p><p>● <strong>Broad and deep technical knowledge</strong>. It should be obvious since one cannot become a software architect with a medical background. Besides, the architect usually has expertise in several technological stacks at a decent level and should have a good understanding of a few other ones. The software architect should also be prepared to compose a large number of technical documentation, reports, and diagrams.</p><p>● <strong>Responsibility</strong>. You should understand that architect decisions are usually the most expensive. Therefore, a person in this position should take the most responsible approach to his work and the decisions made. If the developer’s error costs a couple of days of work of one person, then the architect’s mistake can cost person-years on complex projects!</p><p>● <strong>Stress resistance</strong>. You will have to make decisions because in this role, you will be asked to do so, and you will need a response. You will be working with different people from different areas, and you will have to deal with rapidly changing demands or even with changing business environments. Therefore, it is necessary to be ready for stress and to look for some ways to escape negative emotions. Work is always more pleasant when it brings pleasure. So if you choose this role only for the money, then think again.</p><p>● <strong>Management skills</strong>. This includes both organizational and leadership skills. The ability to lead a team, which may be distributed and composed of very different specialists, is essential.</p><p>● <strong>Analytic skills</strong>. Even if a specialist has a broad erudition in technology, he has tried many things on his own or participated in projects of various types. It does not guarantee that he can easily change the style of thinking to an architect. One of the most valuable tasks is the ability to represent an abstract problem in the form of some finite real object of the system, which developers are already evaluating, designing, and developing. Excellent communication skills are essential to represent the abstraction in the form of the final system to the members of the team and the customer. It will be necessary to communicate with both business and development, which is still to be done.</p><p>If we talk about the responsibilities of the architect, then here is the perfect example from the 19th century about bridge construction. At that time, the tests of the newly constructed bridge were the following: the key group of engineers, architects and workers stood under the bridge while the first vehicles were on it. Thus, they staked their lives upon the construction and the strength of the structure. So if there is a question — what is the responsibility of the software architect on the project? The answer is, he is responsible for everything.</p><p>If you give up loud and beautiful phrases, then the architect’s work includes:</p><p>● Identifying the stakeholders on the project.</p><p>● Identifying business requirements and requirements of the stakeholders on the project.</p><p>● Designing the entire system based on the received requirements.</p><p>● Choosing the system architecture and each component of this system at a high level.</p><p>● Choosing the technologies for the implementation of each component and connections between the parts.</p><p>● Architectural review. Yes, yes, it exists.</p><p>● Code-review.</p><p>● Writing project documentation and support it.</p><p>● Creating unified development standards in the company.</p><p>● Controlling the architecture during the next iteration of the system release.</p><p>It is only a subset of the software architect’s responsibilities. The most important responsibility is full technical support of the project from the moment of inception, through product release, to the development of enhancements. And supporting the next releases. It will be necessary to switch a lot between different tasks during the working day.</p><h3>How to Become a Software Architect?</h3><p>To begin with, it is requisite to define milestone goals that lead to achieving your strategic goal of becoming a software architect. For me, such <strong>goals for the next six months</strong> are:</p><p>● <strong>Understand and try several technological stacks</strong>. My current knowledge is concentrated in the field of iOS. It is necessary to try Android, several server languages, to start python, and refresh Java EE skills. The architect is a full-stack developer, so it is essential to have a broad technical knowledge.</p><p>● <strong>Reading literature</strong>. It is required to determine the most valuable books and articles that will help to grow in this direction. Usually, the most effective way to find such literature is to ask other professionals in this field for their recommendation. In one of the future articles, I plan to give you such a list of literature.</p><p>● <strong>Find a mentor</strong>. It is desirable to find a software architect at your current place of employment. It is always easier to get experience from a trained specialist than to start considering a particular area from scratch. It is requisite to be prepared to ask the right questions from your mentor.</p><p>● <strong>Study courses/obtain certificates</strong>. There are many courses and certifications available, but only a few are worth their money, and the higher level courses cost a lot of money. I have attended the architectural courses of Luxoft (<a href="http://www.luxoft-training.com/it-course/ARC-001/">http://www.luxoft-training.com/it-course/ARC-001/</a>), which have proven to be a worthy investment. It is crucial that the lecturer of the course be a professional in this field and be able to answer questions. As for certificates, before starting, it is best to understand whether there are authoritative certification systems for architects and whether it is worthwhile obtaining the certification. This point I will discuss in a future article of this series.</p><p>One of the essential parts is a clear and stable plan review. What has been done, what should be reviewed, and where to accelerate or which goal to remove as useless.</p><h3>Check Your Readiness Level</h3><p>If you are interested in this introductory article from the series on how to become a software architect, or if you suddenly have thoughts to try this path, it is worth making sure that you want it.</p><p>Firstly, people are afraid of everything new. A new position, new kind of stress, as opposed to the comfortable status quo. Of course, the choice is not always unambiguous and depends on how much you are willing to change something in your life. At the same time, it can depend not only on you but also on the family, your financial commitments, parents, and other factors.</p><p>Secondly, this path takes several years. The process of becoming a software architect does not happen overnight. As a team lead, I realized what to do and how to deal with stress only a year after I was appointed to an official position. At the same time, six months before that, I performed it unofficially. One software architect I know said that he understood what his responsibilities are 18 months after he was promoted to this role. Such intervals of time are reasonable, and you need to know whether you are ready to move in this direction. Even if you do not have a stable plan available, it is better to start taking small steps that move you ahead, rather than remaining in the same place.</p><p>Standing in the same place in IT is a synonym for stagnation and personal fetters in life.</p><h3>Recommended Books</h3><ul><li><a href="https://amzn.to/2zgDSMQ">Software Architecture in Practice (3rd Edition) (SEI Series in Software Engineering)</a></li><li><a href="https://amzn.to/2IY9JBr">Essential Software Architecture</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=de53f1cb310a" width="1" height="1" alt="">]]></content:encoded>
        </item>
    </channel>
</rss>