tag:blogger.com,1999:blog-64717782024-03-08T11:25:06.268+02:00Ivan Mitev in the Tech HiveBrain Dump of a Maker of Delicious Software (Yummy as Honey)Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.comBlogger280125tag:blogger.com,1999:blog-6471778.post-73530983156721196032023-12-27T08:24:00.002+02:002023-12-27T08:24:23.909+02:00Summary of the year 2023<p><span style="font-family: inherit;">I am continuing my series of annual retrospectives from </span><a href="https://immitev.blogspot.com/2022/12/summary-of-year-2022.html">2022</a>, <span style="font-family: inherit;"><a href="https://immitev.blogspot.com/2021/12/summary-of-year-2021.html">2021</a>, </span><span style="color: black; font-family: inherit;"><a href="https://immitev.blogspot.com/2020/12/summary-of-year-2020.html" style="background-color: #fafafa; display: inline; outline: none; transition: all 0.3s ease 0s;">2020</a></span><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: inherit;"> .</span><span style="color: black; font-family: inherit;">..</span></p><p><span style="font-family: inherit;"><span style="color: black;"><span style="color: #333333;">It's been now 6 years since I joined COZYROC and 4.5 years since I took a managerial role in the company. This year it's been more or less business-as-usual. The most notable challenge was that two of our developers decided it's time for a change and left the company, I had to to do some more hiring. My efforts were somewhat futile the first month, but the next one I managed to hire three developers - two senior and a junior.</span></span></span></p><p><span style="font-family: inherit;">On the personal side, I continued to run. Shortly after completing a challenging 35 km trail run with 2000m denivelation I had a sprained ankle in June which left me 3 months with no practing. Shockingly, I still fell that my ankle is not fully recovered although I do my regular 5Ks in the park. Thus I decided to skip snowboarding our first winter vacation around Christmas. </span><span style="font-family: inherit;">Besides running, I continued to practice table tennis this year with a trainer. My progress is somewhat slow, but steady.</span></p><p>The year 2023 was the year of AI, and I've been playing with ChatGPT occassionaly, mostly for fun, but also found a few applications in work. I should focus more on it this year, as this will definitely be an important lifelong skill.</p><p>This year I also helped my wife to launch the new brand for her digital marketing agency. I've came up with the new name <a href="https://www.mogic.digital/">MOGIC</a> and helped with preparing the website text and structure. I'm not that much of a web developer, but nowadays WYSIWYG tools for websites are pretty decent.</p><p><span style="font-family: inherit;">That's basically it. Have a great 2024!</span></p>Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-48145256917123659162023-11-26T10:15:00.001+02:002023-11-26T10:15:04.360+02:00More of a Mender<p>It's been awhile since I've ran into the distinction of <a href="https://corgibytes.com/blog/2015/08/14/makers-vs-menders/">makers vs. menders</a> . As times goes by, I notice I'm shifting more and more to enjoing the work of a mender. It's like I've already done enough of "making stuff from scratch" and fixing, growing and nurturing stuff comes more naturally to me. It's not that it's less challenging technically, it's just different. But it's certainly feels more rewarding, as (usually) the pay off for the effort comes much faster (and with much less risk for implementing stuff that might not get used).</p>Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-63200447724751870492022-12-27T11:17:00.002+02:002022-12-31T17:21:27.618+02:00Summary of the year 2022<p><span style="font-family: inherit;"><span>I am continuing my series of annual retrospectives from <a href="https://immitev.blogspot.com/2021/12/summary-of-year-2021.html">2021</a>, </span><span style="color: black;"><a href="https://immitev.blogspot.com/2020/12/summary-of-year-2020.html" style="background-color: #fafafa; display: inline; outline: none; transition: all 0.3s ease 0s;">2020</a></span><span style="color: black;">, </span><span style="background-color: #fafafa; color: #333333; display: inline; float: none;"><a href="http://immitev.blogspot.com/2019/12/summary-of-year-2019.html">2019</a> .</span><span style="color: black;">..</span></span></p><p><span style="font-family: inherit;"><span style="color: black;"><span style="color: #333333;">It's been now 5 years since I joined COZYROC and 3.5 years since I took a managerial role in the company. </span></span>At work, I continue to spend my time with various types of activities - assisting developers in elaborating and prioritizing tasks, doing code reviews, writing occasionally some code, advising on help desk tickets. <span style="color: black;"><span style="color: #333333;">Nothing that remarkable happened this year in the company. The main revenue-generating SSIS+ components suite keeps expanding, and</span><span style="color: #333333;"> </span></span><a href="https://cozyroc.cloud/">COZYROC Cloud</a> is maturing, as well. In terms of team management,<span style="color: #333333;"> I was asked to hire a developer after another dev left. Luckily it took only an interview and an assessment of a single candidate, who got an offer and accepted it. That's what I call "lean hiring" - 1 of 1 🤔</span></span></p><p><span style="font-family: inherit;">On the personal side, I continued to do some running and for the first time in my life entered a 42km trail race. It was at Tryavna Ultra, but after doing 30km at a pretty good pace, I felt pretty bad. As I made some unwise decisions regarding eating and drinking liquids before and during the race, I had to exit it. Hopefully I'll try again next year.</span></p><p><span style="font-family: inherit;">Besides running, I started playing more table tennis this autumn and even had some lessons with a trainer. I'm learning more tricks of the trade and improving my game, so I'll probably continue with this hobby, especially as my bigger son Stamen also started playing ambitiously.</span></p><p><span style="font-family: inherit;">Speaking about hobbies, this year was also big for my now 10-year hobby of following politics and geo-politics. The start of the Russian war in Ukraine in February incited my interest in geopolitics - understanding better the bigger picture. I learned a lot about this field, as well as about global economics and about warfare in general. Btw, I stumbled upon the TV series <a href="https://www.imdb.com/title/tt1526318/" target="_blank">Borgen</a>, which turned out pretty good and I've managed to finish all 4 seasons. Highly recommended!.</span></p><p><span style="font-family: inherit;">That's basically it. Have a great 2023!</span></p>Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-41588421931895339812021-12-22T13:30:00.004+02:002021-12-29T16:31:39.422+02:00Summary of the year 2021<p><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "times new roman";">I am continuing my series of annual retrospectives from </span><span style="color: black;"><a href="https://immitev.blogspot.com/2020/12/summary-of-year-2020.html" style="background-color: #fafafa; display: inline; font-family: "times new roman"; outline: none; transition: all 0.3s ease 0s;">2020</a></span><span style="color: black; font-family: "times new roman";">, </span><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "times new roman";"><a href="http://immitev.blogspot.com/2019/12/summary-of-year-2019.html">2019</a>, <a href="http://immitev.blogspot.com/2018/12/summary-of-year-2018.html">2018</a> </span><span style="color: black; font-family: "times new roman";">..</span></p><div><span style="color: #333333; font-family: "times new roman";">It's been now 4 years since I joined COZYROC and 2.5 years since I took a managerial role in the company. And another year in the COVID-19 pandemic, where most of the work was still done remotely and the office was rarely used</span><span style="color: #333333; font-family: "times new roman";">.</span></div><div><span style="color: #333333; font-family: "times new roman";"><br /></span></div><div><span style="color: #333333; font-family: "times new roman";">What's most notable is that in the beginning of 2021 we revealed (what is the biggest undertaking of the company, since I've joined the company) - an iPaaS service <a href="https://cozyroc.cloud/">COZYROC Cloud</a>, which first version took about two years for three senior developers to develop (not counting myself). My involvement there, besides being a product owner and a technical advisor, continued with authoring most of the texts on the website and the documentation. We'll </span><span style="color: #333333; font-family: "times new roman";">soon</span><span style="color: #333333; font-family: "times new roman";"> </span><span style="color: #333333; font-family: "times new roman";">be revealing another major feature </span><span style="color: #333333; font-family: "times new roman";">- the support for on-premise execution agents</span><span style="color: #333333; font-family: "times new roman";">.</span></div><div><span style="color: #333333; font-family: "times new roman";"><br /></span></div><div><span style="color: #333333; font-family: "times new roman";">My main technical focus remained on our flagship <a href="https://www.cozyroc.com/products">COZYROC SSIS+</a> suite to which I've been contributing in many ways - elaboration of technical and UX designs, code reviews, some coding (mainly small tasks) and helping with the customer support. Btw, in 2021</span><span style="color: #333333; font-family: "times new roman";"> I've hired the first BG-based person to join the customer support team, which was till then entirely US-based. Getting myself a direct access to our Help Desk system provided me with even more insight about the problems and the needs of COZYROC customers. I had ran a customer support system in one of my previous jobs for about an year, so I had enough experience to be able to quickly identify what can be tweaked for good in the processes and in the KB content organization.</span></div><div><br /></div><div>In terms of my management duties, this year also brought a couple of unexpected challenges. I think I dealt with them pretty well. Btw, one of the places where I find some good advice on people management topics is this podcast https://tochka2.com/radiotochka2/ (mainly Bulgarian). </div><div><br /></div><div>On the personal side, with the continuing pandemic, again I spent plenty of time with my toddler and it's been fascinating to watch him grow. Despite the extra parenting duties, I managed to dedicate enough time to run this year after spraining an ankle in the winter and to complete my second marathon in 4 hours (in Plovdiv on Oct 31st). As I celebrated my 42th birthday in 2021, I just had to do a 42.195 km run. Actually being better prepared this time, it felt a lot easier than my first marathon two years ago. Throughout the year I managed to run a total of 1200 km (750 km of which in July-October) and I can say I'm in my best physical shape ever.</div><p>This year was also big for my hobby of following Bulgarian politics. Three elections, a plenty of political suspense and drama, me participating in online discussions, trying to educate more people how to make more rational assessment of the political parties and politicians. It was an eventful political year, and hopefully the following couple of years will be less interesting, as participating in political discussions can be exhausting and nerve-racking. Almost as tiring as trying to get some people realize that COVID-19 vaccines are actually good on a personal and a societal level :)</p><p>Have a great 2022!</p>Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-78355505072738237552020-12-27T14:41:00.002+02:002021-01-01T17:25:39.440+02:00Summary of the year 2020<p><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "times new roman";">I am continuing my series of annual retrospectives from <a href="http://immitev.blogspot.com/2019/12/summary-of-year-2019.html">2019</a>, <a href="http://immitev.blogspot.com/2018/12/summary-of-year-2018.html">2018</a>, </span><span style="color: black;"><a href="http://immitev.blogspot.com/2017/12/summary-of-year-2017.html" style="background-color: #fafafa; display: inline; font-family: "times new roman"; outline: none; transition: all 0.3s ease 0s;">2017</a></span><span style="color: black; font-family: "times new roman";">...</span></p><div><span style="color: #333333; font-family: "times new roman";">It's been 3 years since I joined COZYROC and 1.5 years since I took a managerial role in the company. This year has been a somewhat special one due to the COVID-19 pandemic, but as we already had experience in </span><span style="color: #333333; font-family: "times new roman";">working remotely, this was not that big of a deal.</span></div><div><span style="color: #333333; font-family: "times new roman";"><br /></span></div><div><span style="color: #333333; font-family: "times new roman";">In terms of team growth in Bulgaria, 2020 seemed to start well, as I hired a very capable developer for the secretive new product that we have been working for more than an year now. But, several months later, it turned out that the guy was, let's put it mildly, very hard to work with. Despite all my efforts to try to influence his attitude, his jerky behavior continued to escalate to a point where I had no better option, but to let him go. A tough, but valuable, hiring lesson was that I shouldn't compromise on humility as an essential personal characteristic of anyone who's working in a team, no matter how knowledgeable and technically savvy they are. </span><span style="color: #333333; font-family: "times new roman";">On the good side, I've hired three more developers later on - one started August, another December, and the last one will be joining us in March next year. </span></div><div><br /></div><div><span style="color: #333333; font-family: "times new roman";">For our "secretive" product/service that would be revealed by end of January 2021, I limited my involvement mainly to the role of a product owner/manager and to giving advice on some architectural decisions. I delegated most technical decisions to the team and was mainly focusing on clarifying the vision of the product, doing feature prioritization and elaborating the use cases and the desired user experience. I think this worked out pretty well and early feedback on the UX has been positive.</span></div><div><span style="color: #333333; font-family: "times new roman";"><br /></span></div><div><span style="color: #333333; font-family: times new roman;">This year I was less involved in coding, as my focus was in other activities (hiring, managing, tasks elaboration, code reviews, etc.). Still I did some programming - mainly fixes, enhancements and small new features. I coded a couple of cool things, too, like using the </span><a href="https://harmony.pardeike.net/">0Harmony</a> <span style="color: #333333; font-family: times new roman;">library to workaround an SSIS bug that Microsoft didn't plan to fix. Besides coding, I've produced some technical marketing content for COZYROC website and even a <a href="https://www.youtube.com/watch?v=rMahQuhfoLU">YouTube video</a>. I was keeping current with tech via my usual ways (i.e. mainly by reading <a href="https://www.reddit.com/r/programming/">Reddit/Programming</a>). My Medium subscription also fed me some interesting content on programming, management, product management, business of software etc. While running, I was also enjoying some nice podcasts like <a href="https://softskills.audio/">Soft Skills Engineering</a> (super good infotainment) and <a href="https://devcast.bg/">DevCast</a> (in Bulgarian).</span></div><div><br /></div><div><span style="color: #333333; font-family: "times new roman";">On the personal side, my second, long-awaited, child (again a boy) was born in August. It turned out I had forgotten some things about baby care, but quickly relearned the tricks of the trade. And by staying more at home due the COVID19 pandemic, I got much more practice than with my first child :) Having a small child definitely affected my daily routine, e.g. I had a lot less time for sports. OK, that might be actually an excuse, as I did find enough free time for other hobbies, like discussing BG and US politics online :) I had also a lot less time for reading books, so I read about twice less books than in 2020. Hopefully next year, I will be able to make a bit more time to reading and other things that I enjoy.</span></div><span style="color: #333333;"><br /></span><span style="color: #333333;">Have a great 2021!</span>Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-12223716124186695022019-12-30T18:29:00.001+02:002020-02-01T14:32:10.099+02:00Summary of the year 2019<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="color: #222222; font-family: arial, helvetica, sans-serif;">
<span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "times new roman";">I am continuing my series of annual retrospectives from <a href="http://immitev.blogspot.com/2018/12/summary-of-year-2018.html">2018</a>, </span><a href="http://immitev.blogspot.com/2017/12/summary-of-year-2017.html" style="background-color: #fafafa; color: #00b2b4; display: inline; font-family: "times new roman"; outline: none; transition: all 0.3s ease 0s;">2017</a><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "times new roman";">,</span><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "times new roman";"><span class="Apple-converted-space"> </span></span><a href="http://immitev.blogspot.bg/2016/12/summary-of-year-2016.html" style="background-color: #fafafa; color: #00b2b4; display: inline; font-family: "times new roman"; outline: none; transition: all 0.3s ease 0s;">2016</a> <span style="color: black; font-family: "times new roman";">...</span></div>
<div style="color: #222222; font-family: arial, helvetica, sans-serif;">
<span style="color: black; font-family: "times new roman"; font-size: small;"><br /></span></div>
<div>
<span style="color: #333333; font-family: "times new roman";">It's been 2 years since I joined COZYROC and the last 6 months were especially interesting. I was asked to replace the person who was previously responsible for running our Sofia office (he left the company to pursue other interests). So basically I moved to a "3-in-1 role" - a manager, a technical lead and an individual contributor (the latter obviously having a lower priority now).</span><br />
<span style="color: #333333; font-family: "times new roman";"><br /></span>
<span style="color: #333333; font-family: "times new roman";">I was mostly excited at this opportunity, because this was a chance for me to implement (to an even greater extent) my understanding how a high-performing development team should be run. At the same time I was somewhat hesitant of taking on some administrative duties/chores and of having to deal with various people-management stuff (for the latter I had not enough practice, having been mainly on the other end of such relationships). In the past, I have lead small teams, but mostly in the making/evaluating/influencing the technical decisions. I have also been in a project management role awhile ago, so I've done some tasks prioritization, allocation, etc. But the current arrangement felt definitely different... </span><br />
<span style="color: #333333; font-family: "times new roman";"><br /></span>
<span style="color: #333333; font-family: "times new roman";">I decided I need to do some additional learning to be able to perform well in a managerial role. I've listened to the <a href="https://www.storytel.com/bg/bg/books/142723-Radical-Candor">Radical Candor</a> audio-book (which might be considered a classic already), which powerful ideas would definitely become the pillars of my managerial approach. I've read a plethora of articles on management and leadership on Medium (so many that I decided to become a subscriber). I've read also a newly published BG book <a href="https://ciela.com/studen-dush-za-menidzhari.html">Студен душ за мениджъри</a> which despite not being targeted to the tech industry, had several worthwhile insights about what is key for being a successful manager. Now, I'm feeling better equipped to be a manager that doesn't suck (at least not in a big way), but time will tell how well I'll be able to put this wisdom in practice.</span><br />
<span style="color: #333333; font-family: "times new roman";"><br /></span>
<span style="color: #333333; font-family: "times new roman";">My first challenge as a manager was to grow our team by hiring two more .NET developers. It took a couple of recruitment sprints (i.e. running ads in Jobs.bg and LinkedIn and then carefully assessing candidates) to fill in the positions. It took more than 20 interviews, 9 take-home-assessment-tasks, and a couple of rejected job offers. Unfortunately one of the new hires didn't prove to be a good cultural fit and </span><span style="color: #333333; font-family: "times new roman";">after 2 months</span><span style="color: #333333; font-family: "times new roman";"> I had to let him go. It's unfortunate and emotionally draining when such things happen, but it's a lesson for me to try to assess in a greater depth the candidate's attitude and team work skills. Btw, this incident also motivated me to read the book </span><a href="https://www.goodreads.com/book/show/28930640-the-ideal-team-player" style="font-family: "times new roman";">The Ideal Team Player</a><span style="color: #333333; font-family: "times new roman";">, which gave me extra clarity what kind of non-technical qualities I should try to look for in a candidate (humility is a big one). I have started in December a new </span><span style="color: #333333; font-family: "times new roman";">recruitment </span><span style="color: #333333; font-family: "times new roman";">sprint, but the holiday month is probably not the best one to get lucky :) Hope that January is better...</span><br />
<br />
<span style="color: #333333; font-family: "times new roman";">Btw, one of the first practices I introduced as a new manager in the company was 1:1 meetings. I had experience with those in my last two jobs. Although they are not yet regular, I think they have a positive impact on everyone and would definitely stick with those. I am also introducing annual performance reviews, in order to state more clear expectations what skills, attitude and activities are considered desirable at the company.</span><br />
<br />
<span style="color: #333333; font-family: "times new roman";">On the personal side, I've turned 40 this year. To combat the feeling of getting old, I was extra motivated to complete my first full marathon (the Sofia Marathon in October). It was tough after the 25th kilometer and I was close to giving up at some point, but managed to finish in 04:14 hours in a good spirit and with enough power to sprint the last 100 meters. This year, I also made some progress with my snowboarding hobby, as I took some extra lessons and had more practice than usual. Not sure if this year I would get a similar number of snow days, but let's hope that my muscle memory is stronger than my other memory :)</span></div>
<span style="color: #333333;"><br /></span><span style="color: #333333;">Have a wonderful 2020!</span></div>
Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-75825409921793803772018-12-30T13:12:00.002+02:002018-12-30T13:12:59.463+02:00Summary of the year 2018<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="color: #222222; font-family: arial, helvetica, sans-serif; font-size: small;">
<span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "times new roman"; font-size: 14px;">I am continuing my series of annual retrospectives from </span><a href="http://immitev.blogspot.com/2017/12/summary-of-year-2017.html" style="background-color: #fafafa; color: #00b2b4; display: inline; font-family: "Times New Roman"; font-size: 14px; outline: none; transition: all 0.3s ease 0s;">2017</a><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "times new roman"; font-size: 14px;">,</span><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "times new roman"; font-size: 14px;"><span class="Apple-converted-space"> </span></span><a href="http://immitev.blogspot.bg/2016/12/summary-of-year-2016.html" style="background-color: #fafafa; color: #00b2b4; display: inline; font-family: "Times New Roman"; font-size: 14px; outline: none; transition: all 0.3s ease 0s;">2016</a><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "times new roman"; font-size: 14px;">,</span><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "times new roman"; font-size: 14px;"><span class="Apple-converted-space"> </span></span><a href="http://immitev.blogspot.bg/2016/01/summary-of-year-2015.html" style="background-color: #fafafa; color: #00b2b4; display: inline; font-family: "Times New Roman"; font-size: 14px; outline: none; transition: all 0.3s ease 0s;">2015</a><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "times new roman"; font-size: 14px;">,</span><a href="http://immitev.blogspot.bg/2014/12/summary-of-year-2014.html" style="background-color: #fafafa; color: #00b2b4; display: inline; font-family: "Times New Roman"; font-size: 14px; outline: none; transition: all 0.3s ease 0s;"> 2014</a><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "times new roman"; font-size: 14px;">,<span class="Apple-converted-space"> </span></span><a href="http://immitev.blogspot.com/2013/12/summary-of-year-2013.html" style="background-color: #fafafa; color: #00b2b4; display: inline; font-family: "Times New Roman"; font-size: 14px; outline: none; transition: all 0.3s ease 0s;">2013</a><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "times new roman"; font-size: 14px;">,<span class="Apple-converted-space"> </span></span><a href="http://immitev.blogspot.com/2012/12/summary-of-year-2012.html" style="background-color: #fafafa; color: #00b2b4; display: inline; font-family: "Times New Roman"; font-size: 14px; outline: none; transition: all 0.3s ease 0s;">2012</a><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "times new roman"; font-size: 14px;">,<span class="Apple-converted-space"> </span></span><a href="http://immitev.blogspot.com/2011/12/summary-of-year-2011.html" style="background-color: #fafafa; color: #00b2b4; display: inline; font-family: "Times New Roman"; font-size: 14px; outline: none; transition: all 0.3s ease 0s;">2011</a><span style="color: black; font-family: "times new roman"; font-size: small;">...</span></div>
<div style="color: #222222; font-family: arial, helvetica, sans-serif; font-size: small;">
<span style="color: black; font-family: "times new roman"; font-size: small;"><br /></span></div>
<div style="color: #222222; font-family: arial, helvetica, sans-serif; font-size: small;">
<span style="background-color: #fafafa; color: #333333; font-family: "times new roman"; font-size: 14px;">It's been more than a year since I've joined </span><a href="https://www.cozyroc.com/" style="font-family: "Times New Roman"; font-size: 14px;">COZYROC</a><span style="background-color: #fafafa; color: #333333; font-family: "times new roman"; font-size: 14px;"> and it has been definitely an exciting time. We started just two guys in the newly opened Sofia office and finishing 2018 with a team of six developers. It took a lot of interviews and coding tasks assessments to assemble a strong team, but I am quite happy with the results.</span></div>
<div style="color: #222222; font-family: arial, helvetica, sans-serif; font-size: small;">
<span style="background-color: #fafafa; color: #333333; font-family: "times new roman"; font-size: 14px;"><br /></span></div>
<span style="background-color: #fafafa;"><span style="color: #333333;"><span style="font-size: 14px;">The coolest thing about being part of this company is that I've found a way to channel my intrapreneural passion by participating in the optimization of various parts of the business - strategy, marketing, branding, customer support, documentation, etc. Still my primary duties revolved around a traditional-developer-type-of-work: implementing new components (e.g. </span></span><a href="http://www.cozyroc.com/ssis/mongodb" style="color: #333333; font-family: "Times New Roman"; font-size: 14px;">MongoDB SSIS adapters</a><span style="color: #333333;"><span style="font-size: 14px;">), improving existing functionality, bug-fixing, process automation. On the latter, I've helped with setting up a brand new automated build & test processes (based on GitLab CI) and have introduced obfuscation (better late than never). </span></span></span><br />
<span style="background-color: #fafafa;"><span style="color: #333333;"><span style="font-size: 14px;"><br /></span></span></span>
<span style="background-color: #fafafa;"><span style="color: #333333;"><span style="font-size: 14px;">On the product side, I've invested a lot of time to develop a solid understanding of the business domain, our company's portfolio, our value proposition and how do we compare with the other vendors. I've been an </span></span></span><span style="color: #333333;"><span style="font-size: 14px;">advocate for various UX improvements, have come up with some (hopefully notable) ways to enhance & extend our products and have been providing critical feedback on various feature ideas. I've also been actively enhancing the quality of the code base (by refactoring and practicing the "boy-scout rule") and have been carefully reviewing most of the merge requests (making sure the team is producing both functionally correct and easy-to-maintain code). Btw, on the topic of code quality, I've read this summer a very good book <a href="https://www.goodreads.com/book/show/8677004-the-art-of-readable-code">The Art of Readable Code</a> that I can recommend to every developer that cares about writing good code.</span></span><br />
<span style="color: #333333;"><span style="font-size: 14px;"><br /></span></span>
<span style="color: #333333;"><span style="font-size: 14px;">I've also found a way to channel my passion for writing by occasionally taking the role of technical copywriter (or sometimes just a reviewer) for most of the new content on our website (e.g <a href="http://www.cozyroc.com/ssis/dbas">some</a> <a href="http://www.cozyroc.com/ssis/solution-architects">featured</a> <a href="http://www.cozyroc.com/ssis/application-integrators">components</a> pages, the newly released <a href="http://www.cozyroc.com/ssis/javascript">JavaScript support for SSIS</a>, etc.). As I don't get to write often in my blog, that's been definitely a good practice.</span></span><br />
<span style="color: #333333;"><span style="font-size: 14px;"><br /></span></span>
<span style="color: #333333;"><span style="font-size: 14px;">Beyond programming, I've been in a pretty good shape this year. I've restarted running after a small injury last year and did one 20K run in Sofia Marathon. Hopefully next year would do more 20K runs and eventually a full marathon. Also I've been doing regularly push-ups and plan to continue this practice next year (at until I got to do 40 pushups without resting). Also hope to improve my snowboarding skills this winter (already booked some holidays in Borovets and Pamporovo)!</span></span><br />
<span style="color: #333333;"><span style="font-size: 14px;"><br /></span></span>
<span style="color: #333333;"><span style="font-size: 14px;">Have a fantastic 2019!</span></span></div>
Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-68257444241082064532018-08-26T14:08:00.001+03:002020-01-24T10:04:48.159+02:00Some good advice on how to do better code reviews<div dir="ltr" style="text-align: left;" trbidi="on">
Code reviews can be illuminating, but also sometimes frustrating for all the parties involved, if not done right. I decided to re-post some of the better articles I've read the last 6 months on the topic, as I think they deserve to reach a wider audience, beyond our internal company's Slack:<br />
<div>
<ul style="text-align: left;">
<li><a href="https://arne-mertz.de/2017/12/code-reviews-why/">https://arne-mertz.de/2017/12/code-reviews-why/</a></li>
<li><a href="https://dev.to/vaidehijoshi/crafting-better-code-reviews">https://dev.to/vaidehijoshi/crafting-better-code-reviews</a></li>
<li><a href="https://www.pagerduty.com/blog/better-code-reviews-empathy/">https://www.pagerduty.com/blog/better-code-reviews-empathy/</a></li>
<li><a href="https://guzalexander.com/2018/07/10/code-review-missing-advice.html">https://guzalexander.com/2018/07/10/code-review-missing-advice.html</a></li>
<li><a href="https://blog.philipphauer.de/code-review-guidelines/">https://blog.philipphauer.de/code-review-guidelines/</a></li>
</ul>
<div>
UPDATE: Some more good articles:</div>
<ul style="text-align: left;">
<li><a href="https://medium.com/swlh/3-problems-to-stop-looking-for-in-code-reviews-981bb169ba8b?">https://medium.com/swlh/3-problems-to-stop-looking-for-in-code-reviews-981bb169ba8b?</a></li>
<li><a href="https://stackoverflow.blog/2019/09/30/how-to-make-good-code-reviews-better/">https://stackoverflow.blog/2019/09/30/how-to-make-good-code-reviews-better/</a> </li>
<li><a href="https://www.michaelagreiler.com/code-reviews-at-microsoft-how-to-code-review-at-a-large-software-company/">https://www.michaelagreiler.com/code-reviews-at-microsoft-how-to-code-review-at-a-large-software-company/</a></li>
</ul>
</div>
<div>
Hopefully you'll find some missing piece of the puzzle how to make your code reviews more useful and enjoyable.</div>
</div>
Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-40384269270072406802017-12-27T12:53:00.001+02:002018-12-28T17:51:14.861+02:00Summary of the year 2017<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;">I am continuing my series of annual retrospectives from </span><a href="http://immitev.blogspot.bg/2016/12/summary-of-year-2016.html" style="background-color: #fafafa; color: #00b2b4; display: inline; font-size: 14px; outline: none; transition: 0.3s;">2016</a><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-size: 14px;">,</span><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><span class="Apple-converted-space"> </span></span><a href="http://immitev.blogspot.bg/2016/01/summary-of-year-2015.html" style="background-color: #fafafa; color: #00b2b4; display: inline; font-size: 14px; outline: none; transition: 0.3s;">2015</a><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;">,</span><a href="http://immitev.blogspot.bg/2014/12/summary-of-year-2014.html" style="background-color: #fafafa; color: #00b2b4; display: inline; font-size: 14px; outline: none; transition: 0.3s;"> 2014</a><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;">,<span class="Apple-converted-space"> </span></span><a href="http://immitev.blogspot.com/2013/12/summary-of-year-2013.html" style="background-color: #fafafa; color: #00b2b4; display: inline; font-size: 14px; outline: none; transition: 0.3s;">2013</a><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;">,<span class="Apple-converted-space"> </span></span><a href="http://immitev.blogspot.com/2012/12/summary-of-year-2012.html" style="background-color: #fafafa; color: #00b2b4; display: inline; font-size: 14px; outline: none; transition: 0.3s;">2012</a><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;">,<span class="Apple-converted-space"> </span></span><a href="http://immitev.blogspot.com/2011/12/summary-of-year-2011.html" style="background-color: #fafafa; color: #00b2b4; display: inline; font-size: 14px; outline: none; transition: 0.3s;">2011</a>...<br />
<br />
<span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;">After spending a year and a half at <a href="https://www.receipt-bank.com/">Receipt Bank</a> (a quite wonderful company to work for), in October I took a somewhat unexpected opportunity and joined <a href="https://www.cozyroc.com/">COZYROC</a> in its newly opening development center in Sofia. I am really excited to be a part of a smaller company where I would hopefully be making much greater business impact - by utilizing not just my programming skills, but also my aptitude for product thinking. I guess I had gotten also a bit nostalgic about programming in C#, too. By departing from and then returning to </span><span style="background-color: #fafafa; color: #333333; font-size: 14px;">the Microsoft development stack, </span><span style="background-color: #fafafa; color: #333333; font-size: 14px;">I can now more objectively </span><span style="background-color: #fafafa; color: #333333; font-size: 14px;">assess </span><span style="background-color: #fafafa; color: #333333; font-size: 14px;">what its pros and cons are.</span><br />
<span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;">In Receipt Bank this year I continued with my role as a (mostly) backend developer in the </span><span style="background-color: #fafafa;"><span style="color: #333333;"><span style="font-size: 14px;">RBA Mobile Apps team, but I also worked on some small features in the web app. My productivity and comfort developing with Ruby/Rails improved further. I also</span></span></span><span style="background-color: #fafafa;"><span style="color: #333333;"><span style="font-size: 14px;"> developed expertise in various technologies and APIs -</span></span></span><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"> Segment, MixPanel, Twilio SMS, etc. It's somewhat strange that I changed jobs at a time when I had just started to feel quite competent both in the tech stack and the domain. Overall I felt good about my work at </span><span style="background-color: #fafafa; color: #333333; font-size: 14px;">Receipt Bank. </span><span style="background-color: #fafafa; color: #333333; font-size: 14px;">I think I had my fair share in helping the company deliver superior products and services to its clients. On the other hand, I was feeling that my opportunities to contribute significantly to the business success of the company were limited, given how much talent RB had already employed. It was quite a difficult decision to leave such a good job and great teammates, but I simply couldn't ignore the opportunity to be among the first COZYROC devs in the Sofia office. I had also wanted for a while to try developing components/developer tools and </span><a href="https://en.wikipedia.org/wiki/SQL_Server_Integration_Services" style="font-size: 14px;">SSIS</a><span style="background-color: #fafafa; color: #333333; font-size: 14px;"> looks like an interesting enough space for that. There are a lot of systems and technologies that businesses would be interested to integrate with, so variety is more or less guaranteed :)</span><br />
<span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;">Besides programming, 2017 was a somewhat good year for my physical shape. E.g. the last 3 months I started to do some cycling in the park, which I hadn't done in 20+ years. But the highlight of the year was definitely my running practice. I did four 20K runs (Pancharevo, Pleven, Batak, Borisovata Gradina), and also discovered that trail runs are much more fun than city jogging. Unfortunately I got the infamous "runner's knee" problem in late November (obviously I overworked my right knee during my last two 20K runs), but I expect that I would fully recover in the next couple of months. Hopefully I would do a full marathon next year, if all goes well.</span><br />
<span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px;"><br /></span><span style="color: #333333;"><span style="background-color: #fafafa; font-size: 14px;">Wish everyone a great 2018 year!</span></span></div>
Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com1tag:blogger.com,1999:blog-6471778.post-15111761204549007472017-01-28T23:05:00.000+02:002017-01-28T23:05:03.056+02:00Code Comments - Friend or Foe?<div dir="ltr" style="text-align: left;" trbidi="on">
Recently I had an interesting discussion on code comments, which motivated me to spend some time to research and meditate on this topic. It started with a code review, where I was advised to better remove a comment that I have added. Basically I have added a warning that the code did something with dubious value from the user perspective. Additionally there was nothing in the UI to warn the user what would exactly happen and how to deal with potentially undesired effects. What was special about the situation is that there was nothing wrong with the code implementation-wise, but there was something potentially wrong with the intent behind the code. I also brought the UX issue to the attention of the product owner, but as it wasn't something that seemed to require an immediate action, I felt that I also needed to warn with a code comment the other curious readers. Btw, later it was actually decided to prioritize the issue, so the comment could be safely removed. But if there was no decision to do something about it, other developers might have scratched their heads over the meaning and the value of this code section.<br />
<br />
Anyway, the bigger topic to tackle here is whether code comments are a friend or a foe. Some arguments against them are "writing clean code eliminates the need for comments", "code comments should not be an excuse for not fixing things or doing them properly", "code comments are dangerous, as if they get out-of-sync with the code, they only bring confusion". There is definitely an element of truth in all these statements, but all such arguments need to be evaluated in the proper context.<br />
<br />
I believe it's a false dichotomy to "write clean code vs. write documented code" - why not just do both, if it would make developers' work more efficient and enjoyable. E.g if the code is there to handle some peculiarities of 3rd party system, why not describe those and add some reference links, instead of just having some code without any context.<br />
<br />
When we analyze the cost of writing comments, we should also try to evaluate the cost of the time wasted, due to not having good comments. There are so many factors in the economics of maintaining code comments that I am sure I can't cover them in a single blog post :)<br />
<br />
Actually the question <b>if</b> it's worth writing comments is a way too vague, the better question is probably <b>when</b> it's worth to write comments. Or at least when to consider writing comments. My rule of thumb is that whenever it's not clear <b>why</b> this code is there or why it is written in a particular weird way, better consider adding some explanation (assuming there is a good one). Legacy code with poor quality should get special treatment, as it can have a completely different maintenance challenges. Here is one example I am <a href="https://www.quora.com/How-much-should-I-comment-on-my-code/answer/Phil-Jones">quoting</a> below:<br />
<br />
<i>"When working with a lot of dense legacy code, you might want to add comments to help you keep track of what you're discovering about what the code is doing, and the dates of particular interventions and fixes that you made. This is not "good" as such, but might be a necessary evil. It's really just a work-around for the lack of better tools to do the same job."</i><br />
<br />
Btw, besides clean code, good commit messages can also decrease the need of code comments. But they do have some disadvantages - mainly discoverability and accessibility. A code comment is much harder to ignore than a commit message, as it's in your face. You don't see commit messages unless you look for them. And even if you decide you need to look for them, they might be hard to find. E.g. after multiple changes in the same line of code, "annotate" won't bring you quickly the context that you need to familiarize yourself with. Trying to find the intent and the relevant context from commit messages might be time-consuming and sometimes annoying. Having such information easily-accessible within the code obviously saves you time and energy.<br />
<br />
This topic certainly has a lot of depth and breadth, and I am just scratching the surface here. If i have to summarize my current take on code comments is that when done right it pays off to maintain them. When done wrong, they can be a source of distraction and confusion. I also think that no code exists in vacuum, i.e. as it gets written to solve problems in a particular domain, the more easily accessible the domain knowledge is, the better. Anything that helps you jump quickly from the code to the context in which the code operates is a clear win (be it code comments or links to some wiki, document, issue, etc).<br />
<br />
<b>P.S.</b> See also some interesting links below that also advocate on saying "yes" to code comments:<br />
<a data-saferedirecturl="https://www.google.com/url?hl=en&q=http://blog.codefx.org/techniques/documentation/comment-your-fucking-code/&source=gmail&ust=1485602590271000&usg=AFQjCNHOsMWEjQgx3cFEH54jyDKQ2IzWuw" href="http://blog.codefx.org/techniques/documentation/comment-your-fucking-code/" style="-webkit-text-stroke-width: 0px; background-color: white; color: #1155cc; font-family: arial, sans-serif; font-size: small; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;" target="_blank">http://blog.codefx.org/<wbr></wbr>techniques/documentation/<wbr></wbr>comment-your-fucking-code/</a><br />
<a data-saferedirecturl="https://www.google.com/url?hl=en&q=http://mikegrouchy.com/blog/2013/03/yes-your-code-does-need-comments.html&source=gmail&ust=1485602590271000&usg=AFQjCNHdGJEsehZK4Q8tJaKjAiWPORzciw" href="http://mikegrouchy.com/blog/2013/03/yes-your-code-does-need-comments.html" style="-webkit-text-stroke-width: 0px; background-color: white; color: #1155cc; font-family: arial, sans-serif; font-size: small; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;" target="_blank">http://mikegrouchy.com/blog/<wbr></wbr>2013/03/yes-your-code-does-<wbr></wbr>need-comments.html</a><br />
<a data-saferedirecturl="https://www.google.com/url?hl=en&q=http://blog.codefx.org/techniques/documentation/comment-your-fucking-code/&source=gmail&ust=1485602590271000&usg=AFQjCNHOsMWEjQgx3cFEH54jyDKQ2IzWuw" href="http://blog.codefx.org/techniques/documentation/comment-your-fucking-code/" style="-webkit-text-stroke-width: 0px; background-color: white; color: #1155cc; font-family: arial, sans-serif; font-size: small; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px;" target="_blank">http://queue.acm.org/detail.cfm?id=1053354</a></div>
Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-75379246726048514592016-12-28T16:58:00.002+02:002016-12-28T22:25:38.092+02:00Summary of the year 2016<div dir="ltr" style="text-align: left;" trbidi="on">
<span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">I am continuing my series of annual retrospectives from<span class="Apple-converted-space"> </span></span><a href="http://immitev.blogspot.bg/2016/01/summary-of-year-2015.html" style="-webkit-text-stroke-width: 0px; background-color: #fafafa; color: #00b2b4; display: inline; font-family: "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; outline: none; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; transition: color 0.3s; white-space: normal; widows: 2; word-spacing: 0px;">2015</a><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">,</span><a href="http://immitev.blogspot.bg/2014/12/summary-of-year-2014.html" style="-webkit-text-stroke-width: 0px; background-color: #fafafa; color: #00b2b4; display: inline; font-family: "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; outline: none; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; transition: color 0.3s; white-space: normal; widows: 2; word-spacing: 0px;"> 2014</a><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">,<span class="Apple-converted-space"> </span></span><a href="http://immitev.blogspot.com/2013/12/summary-of-year-2013.html" style="-webkit-text-stroke-width: 0px; background-color: #fafafa; color: #00b2b4; display: inline; font-family: "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; outline: none; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; transition: color 0.3s; white-space: normal; widows: 2; word-spacing: 0px;">2013</a><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">,<span class="Apple-converted-space"> </span></span><a href="http://immitev.blogspot.com/2012/12/summary-of-year-2012.html" style="-webkit-text-stroke-width: 0px; background-color: #fafafa; color: #00b2b4; display: inline; font-family: "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; outline: none; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; transition: color 0.3s; white-space: normal; widows: 2; word-spacing: 0px;">2012</a><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">,<span class="Apple-converted-space"> </span></span><a href="http://immitev.blogspot.com/2011/12/summary-of-year-2011.html" style="-webkit-text-stroke-width: 0px; background-color: #fafafa; color: #00b2b4; display: inline; font-family: "Helvetica Neue Light", HelveticaNeue-Light, "Helvetica Neue", Helvetica, Arial, sans-serif; font-size: 14px; font-style: normal; font-variant-caps: normal; font-variant-ligatures: normal; font-weight: normal; letter-spacing: normal; orphans: 2; outline: none; text-align: left; text-decoration: none; text-indent: 0px; text-transform: none; transition: color 0.3s; white-space: normal; widows: 2; word-spacing: 0px;">2011</a>... <br />
<br />
<span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">The highlight of this year for me (professionally) was joining <a href="https://www.receipt-bank.com/">Receipt Bank</a>. It is a really special company that operates extremely well on so many levels - vision, <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">strategy</span>, execution. It is clearly a leader in its domain and it has bold ambitions (that <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">are </span>backed up with smart plans and capable people) to sustain and even accelerate its<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;"> </span>rapid growth.</span><br />
<span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><br /></span>
<span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">I already blogged about Receipt Bank </span><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><a href="http://immitev.blogspot.bg/2016/10/my-new-job-at-receipt-bank.html">here</a> and I can only add that currently I am a part of the RB Mobile Apps team. <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">My main responsibilities are</span> tak<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">ing</span> care of the backend API and of <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">a couple of features in the web<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;"> app</span></span> <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">which</span> would increase the adoption of the mobile apps. I learned a lot about RESTful APIs along the way, as well as I got <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;"><span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;"><span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">acquainted <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">to</span></span></span> GraphQL <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;"><span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;"><span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">(<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">the</span></span> new <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">promising HTTP APIs parad<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">igm<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">)</span></span></span></span></span></span>. Besides getting more proficient in Ruby, I also refreshed my Java knowledge a bit by getting to know a part of the code-base of the RB Android app.</span><br />
<span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><br /></span>
<span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">So yes, 2016 was definitely a<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">n interesting</span> year <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">- <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">wrest<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">ling with</span></span></span> a new programming language (Ruby), <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">new and highly-<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">magical</span></span> web framework (Rails), new version control (Git, <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">for which I ha<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">d</span> a qui<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">te <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">basic knowledge</span></span></span>), database (Postgre<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">S</span>ql), various new third-party services (<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">Elastic<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;"> Search</span></span>, MixPanel, Twilio, Mandrill, etc), a new opera<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">ting system (<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">s<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">wit<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">ching to Ma<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">c OS after so many years of Win<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">dows), etc<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">..</span></span></span></span></span></span></span>. </span><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;"><span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">W</span>ith so many new things to get my head around, </span>I am happy I didn't <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">feel</span> <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">almost any</span> "learning fatigue" and that I <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;"><span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">have ov<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">ercome the initial friction<span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">s to productive work.</span></span></span></span></span><br />
<br />
<span style="background-color: #fafafa; color: #333333; display: inline; float: none; font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif; font-size: 14px; font-style: normal; font-weight: normal; letter-spacing: normal; text-align: left; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px;">Let's see what the year 2017 would <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">have <span style="font-family: "helvetica neue light" , , "helvetica neue" , "helvetica" , "arial" , sans-serif;">in store</span></span>! Bring it on!</span></div>
Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-59800950526317620472016-11-28T19:41:00.001+02:002016-12-02T23:16:00.444+02:007 months with RubyMine<div dir="ltr" style="text-align: left;" trbidi="on">
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin: 0px; padding: 0px;">
<div style="margin: 0px; padding: 0px;">
<br /></div>
<div style="margin: 0px; padding: 0px;">
This is a cross-post (with some minor edits) from the internal dev blog of Receipt Bank, which I was motivated to write after a recent company offsite event. Our dev team organized an Unconference, and there were a couple of talks about tools there. Surprisingly I am the only developer in our Ruby team that uses RubyMine for Ruby coding, so I wanted to let my colleagues know why I chose it and why I am quite happy about it.</div>
</div>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin: 0px; padding: 0px;">
<br /></div>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin: 0px; padding: 0px;">
<b>Why I chose RubyMine:</b></div>
<ul style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin: 10px 0px 0px;">
<li>RubyMine is part of the JetBrains family - I have enjoyed working with JetBrains tools for years - everything I tried was very polished and improved my productivity significantly. I have been using ReSharper (VS.NET extension) for full 10 years and reached a point where I would simply refuse to do any serious C# development without it. I have also used PyCharm while I was playing with Python (it was, as I expected, quite good, too). Btw, <a class="external-link" href="https://en.wikipedia.org/wiki/Android_Studio" rel="nofollow" style="color: #3572b0; text-decoration: none;">Android Studio</a> (the official Android IDE), that I recently tried, is also based on JetBrains IntelliJ IDEA platform and seems to offer a similarly smooth development experience.</li>
<li>RubyMine understands Ruby (and Rails) better than any general purpose text editor. This opens up possibilities of offering some unique features and a superior implementation of other common features (e.g. its code navigation is more reliable than navigation based on simple CTags).</li>
<li>A lot of devs, on various internet forums, swear that RubyMine is the best IDE for Ruby development. I even stumbled upon a <a class="external-link" href="http://blog.andrewvc.com/i-am-now-a-ruby-miner/" rel="nofollow" style="color: #3572b0; text-decoration: none;">post</a> by Vim/Emacs user who switched to RubyMine :) </li>
</ul>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin: 0px; padding: 0px;">
<br />
<b>Some notable characteristics of JetBrain IDEs:</b></div>
<ul style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin: 10px 0px 0px;">
<li>Excellent editor with many built-in features. also extensible (via plugins)</li>
<li>Fuzzy search a file, class, etc.</li>
<li>Navigation to recent/recently edited files, etc..</li>
<li>Flexible windows positioning</li>
<li><div class="_mce_tagged_br" style="margin: 0px; padding: 0px;">
Integrated version control, very nice built-in diff editor, quite useful Annotate feature, etc.</div>
</li>
<li><div class="_mce_tagged_br" style="margin: 0px; padding: 0px;">
Integrated database tools - more or less can replace one's DB admin/query </div>
</li>
<li>Keyboard-friendly - you can assign any command/action a keyboard combination</li>
<li>Plugins - tons of plugins for the IntelliJ platform (i.e. would work on any JetBrains IDE)</li>
</ul>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin: 0px; padding: 0px;">
<b><br /></b></div>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin: 0px; padding: 0px;">
<b>Ruby/Rails-specific productivity features (listing just a few):</b></div>
<ul style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin: 10px 0px 0px;">
<li>Excellent editor for all file types you need - Ruby, Rails, Slim, ERB, CoffeeScript, Markdown, Yaml, etc.</li>
<li><span style="color: #222222;">Super nice code navigation, especially useful when working with big and unfamiliar codebases. You can quickly navigate around, even go to gems' code. Navigate from Rails controller to views and vice-versa. Navigate from spec to class and vice-versa, etc...</span></li>
</ul>
<div style="background-color: white; color: #333333; font-family: Arial, sans-serif; font-size: 14px; margin: 0px; padding: 0px;">
<ul style="margin: 0px;">
<li class="_mce_tagged_br">Code completion that works pretty well</li>
<li class="_mce_tagged_br">Code formatting (instantaneous) + on-demand reformatting. Warnings for formatting inconsistencies.</li>
<li class="_mce_tagged_br">Quick smart code block selection (Cmd + W)</li>
<li class="_mce_tagged_br">Find usages and refactoring features - it's not fully automatic, as Ruby is a dynamic language, but still quite good</li>
<li class="_mce_tagged_br">Powerful visual test runner that offers everything you need for executing and troubleshooting RSpec and Minitest tests</li>
<li class="_mce_tagged_br">Visual Ruby debugger - yes, an actual debugger with breakpoints. I use it mostly for debugging test runs, as it is somewhat slow to start the with a huge web app. Btw, RubMine support for attach to process is cooking for the next release and it might be useful.</li>
<li class="_mce_tagged_br">Catch errors early - show syntax errors & warnings while you type, warn about typos (via integrated spell checker)</li>
<li class="_mce_tagged_br">Internationalization helpers - preview the English value instead the key, quick jump to key definition, autocomplete of keys</li>
</ul>
<div class="_mce_tagged_br" style="margin: 0px; padding: 0px;">
<div class="_mce_tagged_br" style="margin: 0px; padding: 0px;">
<div style="margin: 0px; padding: 0px;">
<div style="margin: 0px; padding: 0px;">
<div style="margin: 0px; padding: 0px;">
<br />
<b>Getting started with RubyMine is easy:</b></div>
<ul style="margin: 10px 0px 0px;">
<li>Has very reasonable defaults - just install RubyMine and you can start coding without much frustrations (i.e. no need to tweak configurations or install additional plugins)</li>
<li>Fully configurable key mappings - choose a familiar binding and customize it further, as you wish</li>
<li>Excellent features discoverability - good menus organization, intuitive UI, extensive online help, and there is even an action "Find Action" action within the IDE</li>
<li>Learn as you go - initially you can start discovering and using features by just looking around in the GUI. Gradually you would want to become more productive and start to learn the shortcuts and other tricks. After using it for 6-7 months, I still have a lot to learn and to automate in my workflow.</li>
</ul>
</div>
</div>
<div style="margin: 0px; padding: 0px;">
<br />
<b>Popular objections to using RubyMine</b>:</div>
<ul style="margin: 10px 0px 0px;">
<li><i>You don't really need a full-fledged IDE to get work done in a dynamic language like Ruby</i> - it's definitely not a must have, but once you get used to its unique productivity features, you would be hesitant to go back to a generic text editor :)</li>
<li><i>Very few rubyists use an IDE, it's somewhat against the philosophy of the language, which emphasizes simplicity</i> - well, I agree that sometimes less is more, and that initially an IDE like RubyMine might look overwhelming. But sill some developers (like me) just want it all <img alt="(smile)" class="emoticon emoticon-smile" data-emoticon-name="smile" src="https://receiptbank.atlassian.net/wiki/s/413795213/6451/ff643a3edd67cd06cf9429fe8aff81d1c07bc876/_/images/icons/emoticons/smile.png" style="border: 0px; margin: 0px; padding: 0px; vertical-align: text-bottom;" /></li>
<li><i>Slow and memory-hungry</i> - well, memory has definitely not been an issue for my MacBook Pro. Speed has been fine most of the time (well, for some huge legacy files you could turn off code analysis, if it gets too much in your way). Startup time is also not an issue, as I keep RubyMine always open.</li>
<li>I<i>t's paid software</i> - so what? SublimeText is also paid (although cheaper). If it helps you get in the state of flow by enabling you read and write code faster, isn't it worth it. It can also detects some errors for you, and ultimately improve the quality of the software you produce.</li>
</ul>
<div style="margin: 0px; padding: 0px;">
<b><br /></b></div>
<div style="margin: 0px; padding: 0px;">
<b>Final words</b></div>
<div style="margin: 0px; padding: 0px;">
OK, I suspect that no one would decide to leave the comfort of their favourite editor easily after reading some ramblings by a developer who's been doing Ruby for just 7 months. If you have been using SublimeText (or something equivalent like Atom, VS Code, etc.) till now, you might feel it serves you very well. You are probably right, but I would still encourage you to consider giving RubyMine a try, if you want to enjoy an extra feeling of control and further improve your productivity. Especially if you are working on a big codebase, I think you might find it well-worth it. But words are cheap, you gotta see it in action. Here is one nice <a class="external-link" href="https://www.youtube.com/watch?v=LnN-JIxDRCg" rel="nofollow" style="color: #3572b0; text-decoration: none;">screencast</a> I found recently, that might get you hooked further <img alt="(smile)" class="emoticon emoticon-smile" data-emoticon-name="smile" src="https://receiptbank.atlassian.net/wiki/s/413795213/6451/ff643a3edd67cd06cf9429fe8aff81d1c07bc876/_/images/icons/emoticons/smile.png" style="border: 0px; margin: 0px; padding: 0px; vertical-align: text-bottom;" /> </div>
<div style="margin: 0px; padding: 0px;">
<br /></div>
<div style="margin: 0px; padding: 0px;">
Anyway, whatever your editor/IDE of choice is, the important thing is to develop with pleasure!</div>
</div>
</div>
</div>
</div>
Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-3614178321476980222016-10-28T07:34:00.001+03:002016-12-28T15:34:58.766+02:00My new job at Receipt Bank<div dir="ltr" style="text-align: left;" trbidi="on">
It's been now nearly 7 months since I joined <a href="https://www.receipt-bank.com/">Receipt Bank</a> and it's about time to share my impressions. This has been a very intriguing endeavour for me as this is quite a different company from my previous employers. Here is what's so fascinating about my job at RB:<br />
<ul style="text-align: left;">
<li><b>Company Size</b> - <a href="https://www.linkedin.com/company/1370329">Receipt Bank</a> is a fast growing SAAS startup, employing more than 150 people, among which around 50 developers (most of them based in Bulgaria, and ~20% based in Slovenia). That's by far the biggest company I have worked for (before RB, the largest dev team I had been a part of was 4 times smaller).</li>
<li><b>Remote Work</b> - That's the first time in my career when I get to work remotely (well, if I am not counting occasional sick days when I had been working from home :) ). Besides Sofia, there are RB developers are in Plovdiv, Burgas, Varna, etc. But the company also holds a nice office next to hotel Hilton, Sofia, so people could work in an office space if they prefer to (or just pass by when they want to socialize face-to-face).</li>
<li><b>Developer Culture</b> - Receipt Bank has by far the best developer culture that I have got a chance to experience first-hand. Very reasonable and constantly improving processes, very smart and capable colleagues, a strong management buy-in for doing whatever it takes to continuously deliver high-quality software. Basically a fantastic place to learn, to improve your skills and to build things you can be proud of.</li>
<li><b>Technology Stack</b> - My main duties in the last 7 months were in supporting and extending the web application and the API of the company's main SAAS product. It's all Ruby on Rails there, which is a quite different beast compared to my beloved C# and ASP.NET. I really liked to try out writing production-class code in a dynamic language like Python or Ruby, and see for my self how it compares to C#. There are pros & cons - e.g. Ruby gives you more freedom, more expressiveness and more magic, but in order to maintain a large code-base you need to write a lot more automated tests. </li>
</ul>
<div>
So yeah, this job is a really big change for me - new development ecosystem, new tools, different processes, etc. Fortunately, after these 7 months I feel comfortable enough with the technology and the business domain and I have the basics to contribute much more effectively to the success of Receipt Bank's products.</div>
</div>
Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-47672999729530686312016-01-02T19:18:00.001+02:002016-01-20T16:56:55.600+02:00Summary of the year 2015<div dir="ltr" style="text-align: left;" trbidi="on">
I am continuing my series of annual retrospectives from <a href="http://immitev.blogspot.bg/2014/12/summary-of-year-2014.html">2014</a>, <a href="http://immitev.blogspot.com/2013/12/summary-of-year-2013.html">2013</a>, <a href="http://immitev.blogspot.com/2012/12/summary-of-year-2012.html">2012</a>, <a href="http://immitev.blogspot.com/2011/12/summary-of-year-2011.html">2011</a>, <a href="http://immitev.blogspot.com/2011/01/summary-of-year-2010.html">2010</a>, <a href="http://immitev.blogspot.com/2008/12/summary-of-year-2008.html">2008</a>, <a href="http://immitev.blogspot.com/2008/01/summary-of-year-2007.html">2007</a>, <a href="http://immitev.blogspot.com/2007/01/summary-of-year-2006.html">2006</a> and <a href="http://immitev.blogspot.com/2006/01/summary-of-year-2005.html">2005</a>... <br />
<br />
I already <a href="http://http//immitev.blogspot.bg/2015/10/my-new-job-at-klear.html">blogged</a> about the most significant change – my new job at <a href="https://klearlending.com/">KLEAR</a>. There is not much to add to this topic two months later, besides that we launched a beta version of our <a href="https://klearlending.com/budget">free personal budget management web application</a>. I was not involved much in it (just spent one week helping with some infrastructure and deployment stuff), but still it’s nice that we already put out there something that some people can find useful. Well, the first release is lacking in usability (so most likely only advanced users would find it appealing), but it would evolve next year… Anyway, our main focus is the P2P platform and we are making a good progress with the front office and the back office applications. <br />
<br />
Technology-wise, it is good that I got to work with ASP.NET MVC. After so many years of ASP.NET WebForms, I find it refreshing. Working with RavenDB is also interesting - my first attempt to introduce a NoSQL database in my previous company 4-5 years ago was unsuccessful (although it was quite a good fit for one of Validata products), so now I finally can develop more in-depth understanding of the technology. I am also improving my frontend development skills – JQuery, Kendo UI, and various other Javascript libraries.<br />
<br />
Last year was definitely a year to remember, but I am now looking at what 2016 would offer!</div>
Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-73407285803943118222015-10-31T19:24:00.001+02:002016-01-02T16:11:19.235+02:00My new job at KLEAR<div dir="ltr" style="text-align: left;" trbidi="on">
Five months ago I quit <a href="http://www.validata-software.com/">Validata Group</a> where I worked more than 8 years. This was a big change for me, but for many reasons I felt that this was the proper time to move on. I took the summer off to decide what to do next (in the meantime I traveled a lot - visiting my sister in Mexico, going to a friend's wedding in Germany, and enjoying a 2 week vacation at the Bulgarian seaside).<br />
<div>
<br /></div>
<div>
There were several technology areas which I was planning to explore since years and finally I found the time to do so this summer. After a decade in the .NET world, it was fun to try some Python coding, play with <a href="http://robotframework.org/">Robot Framework</a>, etc... And just as I was ruminating about a couple of startup ideas with those technologies, I learned about a 3-months old startup called <a href="http://www.klearlending.com/">KLEAR</a> who were working on a type of platform that I had not heard about previously - P2P lending. They had a promising sounding job ad for a senior developer and a <a href="https://www.facebook.com/KLEARLENDING">Facebook page</a> with cool videos. Well, I also happened to know one of the co-founders - as if I needed another compelling reason to learn more about this venture :)</div>
<div>
<br /></div>
<div>
Initially I was quite skeptical about this concept of P2P lending. I couldn't imagine how it was going to attract lenders. Giving money to random strangers and expecting them to return it? Nah, not very attractive idea to risk-averse people (like me :)). But as I read a bit about the <a href="https://en.wikipedia.org/wiki/Peer-to-peer_lending">10 year history of p2p lending</a> and its success in UK, US and other countries and as I visited KLEAR office and got to know the company vision from the <a href="https://bg.linkedin.com/in/loiclepichoux">CEO</a> Loic, I started to change my mind. I realized that the founders know very well what they are doing and that they truly believe they can make this a successful business, which would also have a positive social impact for people that face financial difficulties. They had gathered a team of talented individuals with a lot of experience in the lending business, which were not only coworkers, but friends. KLEAR seemed to me the kind of startup that was doing everything right and I wanted to be a part of it. A week after having a lunch with <a href="https://bg.linkedin.com/in/lukaszlukaszewski">Lukasz</a>, I joined the company and I have already spent almost 2 months working there.</div>
<div>
<br /></div>
<div>
The more I understand the business and the more I work with the team, the more confident I get that we can build a solid trustworthy P2P lending platform that would benefit both borrowers and lenders. We would be launching the summer of 2016 in Bulgaria, so stay tuned!</div>
</div>
Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-25490722909542484092014-12-30T22:22:00.001+02:002015-04-16T22:29:51.797+03:00Summary of the year 2014<div dir="ltr" style="text-align: left;" trbidi="on">
I am continuing my series of annual retrospectives from <a href="http://immitev.blogspot.com/2013/12/summary-of-year-2013.html">2013</a>, <a href="http://immitev.blogspot.com/2012/12/summary-of-year-2012.html">2012</a>, <a href="http://immitev.blogspot.com/2011/12/summary-of-year-2011.html">2011</a>, <a href="http://immitev.blogspot.com/2011/01/summary-of-year-2010.html">2010</a>, <a href="http://immitev.blogspot.com/2008/12/summary-of-year-2008.html">2008</a>, <a href="http://immitev.blogspot.com/2008/01/summary-of-year-2007.html">2007</a>, <a href="http://immitev.blogspot.com/2007/01/summary-of-year-2006.html">2006</a> and <a href="http://immitev.blogspot.com/2006/01/summary-of-year-2005.html">2005</a>... <br />
2014 was my 8th year in <a href="http://www.validata-software.com/" target="_blank">Validata</a>. Surprisingly there are still interesting developments that I get the chance to be involved in :) <br />
About half of the year, I had been working on incremental improvements in several of the company’s key products (performance, usability, newly requested features). I tend to enjoy doing such type of work, especially if it is on foundations that me or someone else has previously laid well.<br />
Besides this, there were a couple of new undertakings. <a href="http://www.validata-software.com/index.php/products/validata-software-assets-suite-sas/quality-suite/cob-monitoring" target="_blank">The first</a> was a nice addition to the company portfolio of T24 offerings, where we released a very decent tool in quite short time frames. The other undertaking is yet in the works, so the only thing that I can mention about it, is that it’s a quite an ambitious project with interesting challenges - both technical and business ones. As it is heavily reporting-related, I got to know a dozen reporting and BI frameworks for a start…<br />
I am thinking for the next year that it might be good to finally get involved in an open-source project and get a taste of other technologies that have been interesting to me. While there were recent <a href="http://blogs.msdn.com/b/somasegar/archive/2014/11/12/opening-up-visual-studio-and-net-to-every-developer-any-application-net-server-core-open-source-and-cross-platform-visual-studio-community-2013-and-preview-of-visual-studio-2015-and-net-2015.aspx" target="_blank">exciting news</a> for the .NET eco system, I think I should jump to something much different. Most likely Python or Javascript (I have been reading a lot about those languages, but without a more hands-on experience, that's not real knowledge).<br />
I am sure that 2015 would be an exciting year!</div>
Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-73263789569128075522013-12-24T12:24:00.001+02:002013-12-24T12:24:31.866+02:00Summary of the year 2013<p>I am continuing my series of annual retrospectives from <a href="http://immitev.blogspot.com/2012/12/summary-of-year-2012.html">2012</a>, <a href="http://immitev.blogspot.com/2011/12/summary-of-year-2011.html">2011</a>, <a href="http://immitev.blogspot.com/2011/01/summary-of-year-2010.html">2010</a>, <a href="http://immitev.blogspot.com/2008/12/summary-of-year-2008.html">2008</a>, <a href="http://immitev.blogspot.com/2008/01/summary-of-year-2007.html">2007</a>, <a href="http://immitev.blogspot.com/2007/01/summary-of-year-2006.html">2006</a> and <a href="http://immitev.blogspot.com/2006/01/summary-of-year-2005.html">2005</a>... <br /></p> <p>The highlight of this year for me was definitely the birth of my son in January. But this blog is about software, and Stamen still can’t code, so let’s see now how I did professionally:</p> <ul> <li>The year started with a month of polishing off a product that is yet to be used for the first time in actual projects. It has already reached a pretty good maturity and a client was close to adopting it, but unfortunately this didn’t happen in 2013. But in the beginning of the next year other clients would finally start using it, and I am excited to see how it will serve their needs.</li> <li>Worked on many maintenance tasks in various functional areas throughout the year. Besides those small stuff, there was one major development that I lead, which I am pretty proud of. It was the next generation of our migration’s solution mapping schemas. The legacy approach had numerous flaws – didn’t scale, didn’t allow expressing intuitively condition logic, wasn’t convenient, wasn’t stable. It was more or less completely redesigned in terms of features, UI and storage. It became a desktop application that resembles a mini-IDE for a visual programming language. There were numerous usability challenges how to make it productive both for developer-minded users and not-so-technical users. And it turned out pretty well. It is being used for more than 3 months in a couple of projects, and the feedback helped us to polish it even further.</li> <li>In the last couple of months I also continued to work on the cloud strategy for our testing product. Participated in some architectural redesign of test execution components, in order to have better deployment flexibility that works outside a LAN (via HTTP).</li> <li>For fun, I spent some time with IronPython. I wanted to experiment with an interpreted language for awhile. Read a couple of books about it, tried it on a small work-related task. It’s certainly a fine language, but since I do most development with C#, I am not sure that the context-switching to IronPython makes me more productive, though for exploratory code it’s definitely nice.</li> </ul> <p>Looking forward to what 2014 has to offer!</p> Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-13160272509162109162012-12-21T17:35:00.002+02:002015-04-16T12:47:53.375+03:00Summary of the year 2012<div dir="ltr" style="text-align: left;" trbidi="on">
I am continuing my series of annual retrospectives from <a href="http://immitev.blogspot.com/2011/12/summary-of-year-2011.html">2011</a>, <a href="http://immitev.blogspot.com/2011/01/summary-of-year-2010.html">2010</a>, <a href="http://immitev.blogspot.com/2008/12/summary-of-year-2008.html">2008</a>, <a href="http://immitev.blogspot.com/2008/01/summary-of-year-2007.html">2007</a>, <a href="http://immitev.blogspot.com/2007/01/summary-of-year-2006.html">2006</a> and <a href="http://immitev.blogspot.com/2006/01/summary-of-year-2005.html">2005</a>...<br />
Here is how the year 2012 went for me professionally:<br />
<ul style="text-align: left;">
<li>Expected in 2012 the bulk of my time to go for the role of a team lead/product owner for one of our emerging products, but this turned out to be not a full-time effort (spent just a couple of months on it). So my concerns of too narrow specialization were groundless :)</li>
<li>Lead another project – integration of HP Quality Center with our testing solution. Was glad that I put extensive logging all over the place, otherwise troubleshooting of the issues on-site would have been a PIA.</li>
<li>Expected not to spend much time on customer support this year, but there were weeks when my sole assignment was providing technical assistance, especially when troubleshooting difficult issues. I still like it, given that it’s a part of a mix with other activities.</li>
<li>Participated in the development of a cloud strategy for the company’s products. It was interesting to get to know Amazon, Azure and other offerings. In the beginning of the year Amazon seemed to be way ahead, but Azure is doing some good catch up work. This project was also a good chance to re-examine the architectural decisions in our products.</li>
<li>Several tools, that I had tried to introduced last year, were finally adopted: PlasticSCM for source control management and Jira for task management and issue tracking. The transition was not painless, but it was well worth it. Both release often new versions (especially PlasticSCM) and it’s fascinating to observe the evolution of such best-of-breed products.</li>
<li>Worked with several newly hired developers with various experience and personalities. That taught me valuable lessons what to do and what to avoid in such work relationships. Also continued to participate in developers assessment in recruiting campaigns.</li>
<li>Kept reading my favourite blogs + some <a href="http://jasonhaley.com/blog/">link blogs</a>. Several books that I read recently and liked are <a href="http://shop.oreilly.com/product/0636920018025.do">Team Geek</a>, <a href="http://shop.oreilly.com/product/9780596155414.do">Being Geek</a>, <a href="http://shop.oreilly.com/product/0636920028741.do">User-Centered Design</a> and <a href="http://shop.oreilly.com/product/9780596517717.do">Making Things Happen</a>.</li>
<li>Spent a couple of weeks researching if it’s worth to learn another language. Thanks to stackoverflow contributors, I narrowed down the candidates to Python, Ruby, Powershell, F#, Clojure, Scala, Fantom, Cobra. Wrote my first Python program a couple of months ago, when I needed to organize a big e-mail address list. Have to say I liked the language conciseness. But after all, despite some minor deficiencies C# is not that bad for a general-purpose language, so I am not sure if I want to invest much time on other languages.</li>
</ul>
So that’s it for 2012.<br />
<br />
P.S. My memory is getting bad. I had to browse through hundreds of e-mail subjects to recollect what I was doing in the first three quarters of the year :)</div>
Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-37610246829212575972011-12-31T18:05:00.001+02:002012-02-18T18:41:46.331+02:00Summary of the year 2011<div dir="ltr" style="text-align: left;" trbidi="on"><span style="background-color: white; color: #555544; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif; font-size: 12px; line-height: 16px;">I am continuing my series of annual retrospectives from <a href="http://immitev.blogspot.com/2011/01/summary-of-year-2010.html">2010</a>, </span><a href="http://immitev.blogspot.com/2008/12/summary-of-year-2008.html" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #669922; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif; font-size: 12px; font-weight: bold; line-height: 16px; text-decoration: none;">2008</a><span style="background-color: white; color: #555544; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif; font-size: 12px; line-height: 16px;">, </span><a href="http://immitev.blogspot.com/2008/01/summary-of-year-2007.html" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #669922; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif; font-size: 12px; font-weight: bold; line-height: 16px; text-decoration: none;">2007</a><span style="background-color: white; color: #555544; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif; font-size: 12px; line-height: 16px;">, </span><a href="http://immitev.blogspot.com/2007/01/summary-of-year-2006.html" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #669922; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif; font-size: 12px; font-weight: bold; line-height: 16px; text-decoration: none;">2006</a><span style="background-color: white; color: #555544; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif; font-size: 12px; line-height: 16px;"> and </span><a href="http://immitev.blogspot.com/2006/01/summary-of-year-2005.html" style="background-attachment: initial; background-clip: initial; background-color: white; background-image: initial; background-origin: initial; color: #669922; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif; font-size: 12px; font-weight: bold; line-height: 16px; text-decoration: none;">2005</a><span style="background-color: white; color: #555544; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif; font-size: 12px; line-height: 16px;">...</span><br />
<span style="background-color: white; color: #555544; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif; font-size: 12px; line-height: 16px;"><br />
</span><br />
<span style="color: #555544; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif;"><span style="font-size: 12px; line-height: 16px;">There just a couple of things that probably deserve a brief mention about the year 2011:</span></span><br />
<br />
<ul style="text-align: left;"><li><span style="color: #555544; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif; font-size: 12px; line-height: 16px;">I've been given recently a new role in the company I work for - to lead the development of one of our products. It's an interesting challenge. I am a bit reluctant to get overly specialized, since till now I've been contributing in a much broader scope, but on the other side there are benefits in working in a more narrow context.</span></li>
<li><span style="color: #555544; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif; font-size: 12px; line-height: 16px;">In the last month or so, I've been active in improving the company development process - mainly by assessing our current tools and practices and searching/evaluating others. Most likely we will soon transition to a better version control system (<a href="http://www.plasticscm.com/">PlasticSCM</a>) and a more powerful issue tracking system (<a href="http://www.atlassian.com/software/jira/overview">Jira</a>). We might also adopt various other tools to improve our productivity in different parts of the development process.</span></li>
<li><span style="color: #555544; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif;"><span style="font-size: 12px; line-height: 16px;">As the previous year, I continued to participate in our developers hiring process (helping with the job ads text, and in candidates assessment). I think I am getting pretty good in guessing </span> <span style="font-size: 12px; line-height: 16px;">just by looking at a CV a developer's abilities, strengths and weaknesses, (well, the candidate's code still surprise me occasionally, usually unpleasantly ;) ).</span></span></li>
<li><span style="color: #555544; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif; font-size: 12px; line-height: 16px;">Mid-year I returned back for a couple of months to my old duties as a Support manager, but hopefully it was temporary. The next year I don't expect to be involved much in this type of work.</span></li>
<li><span style="color: #555544; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif; font-size: 12px; line-height: 16px;">Technology-wise, there were not that many novelties worth mentioning, besides me getting to know MS SQL Server much better. I planned and participated in supporting of MSSQL as a backend for our applications (we supported only Oracle until recently). Learned a lot from this - e.g. the differences in the default locking models of Oracle/MSSQL turned out to be interesting. Although new technologies are now introduced in our development at a slower rate, I am trying to keep up-to-date with everything interesting in the software development field. Besides the .NET related stuff, there are so many exciting trends to follow, e.g. NoSQL comes easily to mind. And of course, there's much more than the programming frameworks, libraries and tools, it's a big universe...</span></li>
</ul><div><span style="color: #555544; font-family: tahoma, 'Bitstream Vera Sans', 'Trebuchet MS', 'Lucida Grande', lucida, helvetica, sans-serif;"><span style="font-size: 12px; line-height: 16px;">This pretty much sums it all. Hope that the year 2012 would offer a lot of excitement and positive experiences.</span></span></div></div>Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-54640958756529648882011-02-12T19:59:00.001+02:002015-04-16T15:22:10.978+03:00On hiring entry-level/junior devs<div dir="ltr" style="text-align: left;" trbidi="on">
I was recently asked about my opinion on adding some young & not-experienced people to our dev team, and after I emailed my analysis, I decided the topic is worthy of a blog post.<br />
I’ll first start with the possible <b><i>disadvantages </i></b>of hiring junior devs:<br />
· Might be very ineffective compared to more experienced devs, due to lack of necessary knowledge, skills and habits. Of course, attitudes and motivation also affect productivity. Btw, productivity b/n developers might vary <a href="https://www.construx.com/10x_Software_Development/Origins_of_10X_%E2%80%93_How_Valid_is_the_Underlying_Research_/">significantly</a>.<br />
· Might require significant time (usually the time of senior devs) to train them & supervise them continuously (especially in the first several months)<br />
· More people equals increased time for communication & coordination. <br />
<b></b><br />
<b><br /></b>
<b>NOTE</b>: When I speak of skills, I guess I should be more specific. Here are a few categories of <strong>skills</strong> that would determine how effective a developer would be at his work:<br />
· <b>Programming skills</b> – ability to write/understand/debug/modify code efficiently (those include skills working with tools like the IDE, the source control + basic skills like touch-typing) <br />
· <b>Problems solving and design skills</b> – ability to analyze (and redefine) problems, to come up with several solutions and evaluate what’s the best, etc.<br />
· <b>Learning skills</b> – how fast can he learn new things and adopt beneficial practices<br />
· <b>Communication skills</b> – how well the developer expresses his ideas (via code/documentation/e-mails/verbal discussions etc) + how well does he cooperate with others from the team + how willing is he to ask for help when stuck<br />
· <b>Get-into-the-others-shoes skills </b>– how well he can understand what the client needs + how well he understands how his work is affecting the work of the team.<br />
· <b>Leadership skills </b>– those are probably not software-specific.<br />
<br />
Though most young people have probably not had the time and the opportunity to develop those skills, there are still probably several <i><b>advantages</b> </i>in hiring them:<br />
· <b>Easier to find on the market</b> (and cheaper)<br />
· <b>Motivated and energeti</b>c (hopefully)<br />
· <b>Free of bad habits </b>– developers with experience are more or less shaped by their experience, and might have accumulated many bad habits that they’ll need to unlearn. Newbies can be molded into good programmers, if given appropriate tasks, training and feedback.<br />
<br />
<strong>Conclusion</strong><br />
I have a feeling that the best mix is with predominantly senior devs and ~20% junior devs, but I’m sure that other combinations could work fine too.</div>
Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-3154227853974512292011-01-02T22:01:00.001+02:002011-01-02T22:01:28.770+02:00Summary of the year 2010<p>I somehow missed to write anything about 2009, but I am continuing my series from <a href="http://immitev.blogspot.com/2008/12/summary-of-year-2008.html">2008</a>, <a href="http://immitev.blogspot.com/2008/01/summary-of-year-2007.html">2007</a>, <a href="http://immitev.blogspot.com/2007/01/summary-of-year-2006.html">2006</a> and <a href="http://immitev.blogspot.com/2006/01/summary-of-year-2005.html">2005</a>.</p> <p>The most noteworthy change for me this year was my new role as <strong>support manager</strong> that I undertook for the last nine months of 2010. Initially the plan was just to substitute for a couple of months the person who recently got in charge of the customer support activities, but who had to go on-site to an important project. But I ended up doing this kind of a job for such an extended period of time. I was all the time trying to keep up with my work as developer as much as I can, though there were days when I couldn’t write code even for a minute.</p> <p>It was a very different type of work. Definitely more stressful, especially in the begining. Unlike my dev work, it required often switching between tasks, quickly prioritizing where to put effort and where not. There were times I worked overtime by answering support tickets from home (before going to work or in non-working days), but the worse part is that often my mind continued to go back to the problems at work, even when I was trying to get rid of such thoughts.</p> <p>The nature of this type of work was pretty demanding, as well:</p> <ol> <li>It required deep and broad knowledge of many aspects of our products (I guess only a developer can have both).</li> <li>It required knowing which of my colleagues to ask for assistance for particular customer issues (I admit I initially hated to delegate work that I though I would finish more quickly than anybody, but soon I realized that this is not always as effective as it seems). </li> <li>It required an ability to quickly find out what is the customer really wanting and help him get it (either by directly solving his issue or thinking of clever workaround to get the job done in another way). </li> </ol> <p>Often it felt very rewarding to help people solve their problems, and as an additional benefit my support work gave me a better understanding of how our products were getting used. This lead to better clarity what matters and what not, so I could concentrate on the truly important things.</p> <p>Being the person responsible for the support, I strived to improve the process in several ways: by customizing the help desk software that we use, by educating our staff and our customers how to use it effectively, by trying to setup proper expectations and attitudes. There were numerous challenges and even several mini-crisis during those nine months. They definitely gave me a better understanding of the bigger picture. They also shaped my vision how things should be done in order to things to go smoothly. It was a valuable experience, but I am happy that I will be handing it back to my colleague, since I think that I would be more valuable in other areas of the product development. My passion for being a developer is stiill strong, but additionally I think I’m a person whose understanding of the product, the technlogies and the customer needs, could be used for architecting proper solutions for the areas that will make a difference for the company and its customers.</p> <p>Besides this role of the support manager, there were other experiences that were new to me:</p> <p><strong>Going on a two-week on-site project</strong> – I went to Poland for an on-site work at our client there. I am not used to such type of work, but I think it went very well. Besides answering questions and troubleshooting issues, I also coded a few simple tools that help them solved some problems. The work was diverse and interesting, and it kept me busy all day. It was pretty exhausting too, so I am grateful that my lovely fiancé (now my wife) came for the second week to make my stay in Poland much more pleasant. It really helped me get my work-leasure balance back.</p> <p><strong>Interviewing candidates for a developer position</strong> – the last month I participated in several interviews (I’ve used to be only from the other side of the table). I was responsible for evaluating their technical abilities. Although the CVs gave hints about what the candidate knows and is capable of, asking proper questions sometimes revealed unexpected voids in the knowledge of people. Btw, in my first interview I was totally unprepared and didn’t know what to ask, but after some research on the topic I became more adequate to the task, though I guess I could be more creative. In addition to the interview questions, I also prepared a simple coding homework assignment that we were giving to the candidates. I am happy we used this approach since it showed pretty well how people approach code and what their skills are. It was also interesting to notice how differently people could try to code their way through such a simple problem.</p> <p><strong>Looking towards 2011</strong> – I already mentioned what are my preferences about my career development for the new year. I hope that it will be a great year for everyone I work with. I wish my colleagues all the best, to keep it cool and to their best to maintain a friendly and supportive work environment.</p> Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-26696939738327074892010-12-27T09:24:00.001+02:002011-01-02T19:48:20.204+02:00Release notes – less or more structured approaches<p>Continuing my <a href="http://immitev.blogspot.com/2010/12/release-notes-whats-and-hows.html">post</a> from last week, I’ll briefly explain how we maintained a change log in my company for about an year (this was back in 2009) and what were the the things we liked and disliked about it.</p> <p>We used a shared OneNote notebook that had a page per each internal build. After a developer had checked-in a bugfix or some new functionality, he had to describe the change in a free text format, Pasting screenshots was encouraged too, when applicable. The OneNote looked like that:</p> <p><a href="http://lh6.ggpht.com/_wuDhHfQy0oA/TSC6YSn0RYI/AAAAAAAAHXA/zG_4fRjfyLA/s1600-h/oneNoteChangeLog%5B4%5D.jpg"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="oneNoteChangeLog" border="0" alt="oneNoteChangeLog" src="http://lh3.ggpht.com/_wuDhHfQy0oA/TRg_N8HL0cI/AAAAAAAAHXE/1vQ_NHx7MKg/oneNoteChangeLog_thumb%5B3%5D.jpg?imgmax=800" width="401" height="145" /></a> </p> <p>We chose OneNote because of its several conveniences:</p> <ul> <li>Easy to setup and use. </li> <li>Allows concurrent editing. </li> <li>Easily searchable. </li> <li>Allows WYSIWYG rich text formatting (including pasting screenshots) </li> </ul> <p>Actually we didn’t use many OneNote features. It was just a visually appealing and easy-to-setup wiki. I think it was pretty useful for devs and QAs in terms of shedding more light in the product development. People could quickly got a good idea how features were evolving and be kept up-to-date with the changes in a non-obtrusive way.</p> <p>But there were several things that were not that great about this process:</p> <ol> <li>Some developers complained that it was getting too difficult to commit changes: first they had to write checkin comments, then they had to write a resolution in the issue tracking system, and finally they had to update the change log. Though the comment text could slightly differ, sometimes it seemed like a duplication. </li> <li>It was not that easy assemble all the changes for the official release notes from the changelog. One of the reasons was that changes were organzied by date, while it made more sense to have them finally grouped by component and sorted by importance. Also the writing style of developers differs, so it was necessary to rephrase many of the changes. </li> <li>Since the log has loose structure, it was not possible to query the changes, e.g. “find me the fixes by developer X made in the past 2 weeks”. </li> </ol> <p>So I was thinking why not capture all release notes information in the issue tracking system itself. The advantages of such approach are obvious, but the system has to meet several requirements for this to work well:</p> <ol> <li>Support <strong>custom fields</strong> (for a text field “<em>DescriptionForReleaseNotes</em>” and probably another one “<em>ImportanceForReleaseNotes</em>”) </li> <li>Support specifying in which <strong>release</strong> was the change made. </li> <li>Support specifying the <strong>component</strong> that changed. </li> <li>Support generating a custom <strong>report</strong> that for any selected release(s) outputs the non-empty changes, grouped by component and sorted by importance. </li> </ol> <p>I guess that most popuplar issue tracking systems would support the first three features. I have my doubts only for the report, but some systems might offer powerful enough reporting out of the box. And even if they don’t, exporting the result to Excel and doing some data manipulation there, is an option, too.</p> <p>Another challenge is that this approach assumes that each item in the release notes should describe only one issue in the system, which is not always the case. You might want to group several small changes in one area in a single item. Well, you can just put a value in <em>DescriptionForReleaseNotes</em> for only one of them, but it will be difficult to manage this, unless there is a support for linking the other related issues to the one that contains the description. So linking issues is probably another requirement for this approach to work well.</p> <p>So is it worth commiting to such a highly structured approach of storing release notes? I am not sure. If your issue tracking system can handle such process well, it might be relatively painless to adopt it. But if you have to use another tool just for managing release notes, it might be an overkill. What do you think?</p> Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-38630617163083392362010-12-19T23:55:00.001+02:002011-01-02T19:49:17.532+02:00Release notes – whats and hows<p>So you are asked to prepare a detailed list of changes in the last N months that would be the basis for creating the release notes for the brand new shiny version of your product. Unfortunately you have not been maintaining a change log throughout the product development. Naturally you can’t come up with a detailed list from the top of the head (even for the stuff you developed yourself). In order to do a decent job, several people have to invest hours (or days) to dig out stuff from various sources: the SCM system, the help desk, design documents, e-mails. Under time pressure they have to formulate the changes in a way that they make sense for the target audience. And if the deadline is tight, you might sacrifice the quality of the release notes. That’s stressful and inefficient. But before digging deeper on how to take preventive measures, let’s first take a look at what’s the purpose of release notes/change log and how to prepare them.</p> <p><font size="3">What is the target audience of a change log/release notes? </font></p> <p>I initially planned to use the terms “change log”, “release notes” and “revision history” as synonims. But I have a subtle feeling that a change log is for internal audiences, while release notes/revision history are targetted to the end users. A change log also seems to have a connotation of an on-going effort, while release notes are often created just before the release as a one-time effort.</p> <p>It’s clear that not only the end users (current and prospecitve clients) are interested in what’s fixed/ehnahnced/added. A lot of people involved in the product development need such information and they surely need it on a much more regular basis. The list of the internal stakeholders includes QAs, technical writers, developers, customer support, consultants, trainers, management. Probably everyone is interested in slightly different subset (or aspect) of the changes, but to keep things simple let’s examine for now only the differences b/n internal and external change logs.</p> <p><font size="3">Targeting external vs internal audience</font></p> <p>The purpose of an <strong>external</strong> release notes (i.e. publicly visible & easily discoverable) is not only to inform, but most importantly (from the business perspective) is to:</p> <ul> <li><em>Advertise what goodness the new release brings</em> – how does it empower the user (or at least alleviate some of his pain) </li> <li><em>Increase the confidence in the product and the company behind it</em> - by demonstrating that serious efforts are put in its development and that there is a significant progress on many fronts. </li> </ul> <p>The purpose of the <strong>internal</strong> change log is to make sure that everyone knows what is going on in the development and to take this in consideration while doing their job. It’s necessary to have additional information about the circumstances of the change (e.g. who was the developer behind the change, so he can be contacted later). The purpose here is just to inform (not to persuade), but still the description of each change should be done concisely from the perspective of the product evolution.</p> <p><font size="3">How release notes should be written? </font></p> <p>I was looking for an answer of this question myself before deciding to write this post. I found several good answers <a href="http://stackoverflow.com/questions/638423/how-should-release-notes-be-written">at stackoverflow</a> and in a <a href="http://blog.davingranroth.com/2010/03/how-to-write-release-notes/">blog post</a>. But let’s first take a look at some sample release notes to have some background.</p> <p>I spent a few hours looking at the release notes of a dozen of products (some of which I’ve used, some I’ve just been interested in). Here are a few links of various product types:</p> <p><strong><em>.NET control suites</em></strong>: <a href="http://www.telerik.com/products/winforms/whats-new/release-history/q3-2010-version-2010-3-10-1109.aspx">Telerik</a> , <a href="http://help.infragistics.com/NetAdvantage/WinForms/2010.3">Infragistics</a>, <a href="http://www.devexpress.com/Subscriptions/DXperience/WhatsNew2010v2/index.xml">DevExpress</a>, <a href="http://www.componentone.com/SuperProducts/StudioWinForms/Release+History/">ComponentOne</a>. </p> <p><strong><em>VS.NET addins</em></strong>: <a href="http://www.jetbrains.net/jira/secure/ReleaseNote.jspa?projectId=10241&styleName=Html&version=11685">ReSharper</a>, <a href="http://www.testdriven.net/downloads/releasenotes.html">TestDriven.Net</a>, <a href="http://docs.typemock.com/isolator/Default.aspx##typemock.chm/Documentation/ReleaseNotes60.html">Typemock</a>, <a href="http://entrian.com/blog/category/ChangeLog/">Entrian Source Search</a></p> <p><strong><em>SCM systems</em></strong>: <a href="http://mercurial.selenic.com/wiki/WhatsNew">Mercurial</a>, <a href="http://www.plasticscm.com/download/releasenotes.aspx">PlasticSCM</a>, <a href="http://subversion.apache.org/docs/release-notes/1.5.html">Subversion</a>, <a href="http://www.sourcegear.com/vault/releases/index.html">Vault</a></p> <p>If you looked at the release notes, you’ve probably noticed that they differ both in terms of content and presentation:</p> <p><font size="3" face="Times New Roman"><strong>Content</strong></font></p> <p><strong><em>Highlights </em>:</strong> more often than not, release notes start with an overview of the most important changes</p> <p><strong><em>Leaving out the bugs</em>:</strong> some release notes don’t include list of fixes, but only improvements (or at least the list of fixes can be found in other not as easily accessible location). Since there is no bug-free software that I know of, I guess the this information filtering is geared mostly towards attracting new customers.</p> <p><em><strong>Level of detail</strong>:</em> some vendors prefer to describe changes in the most laconic way possible, some are more descriptive</p> <p><strong><em>Automatically generated</em>:</strong> some changelogs appear to be generated directly from the issue tracking system (or even from the source control system), but most of them look hand-crafted (especially in cases when rich output formats are used, e.g. pictures :) )</p> <p><font size="3" face="Times New Roman"><strong>Presentation</strong></font></p> <p><strong><em>Output Format</em></strong>: plain text vs richer format (HTML, PDF, etc.). Rich formats are more expressive & more visually appealing, but for some types of products a plain text change log might be just good enough.</p> <p><strong><em>Organization of the list of changes</em></strong>: usually the changes are grouped/sorted by component and/or by change type. The change types can be as basic as <em>ADDED, IMPROVED, FIXED</em> (see <a href="http://www.telerik.com/products/winforms/whats-new/release-history/q3-2010-version-2010-3-10-1109.aspx">Telerik</a>), though some vendors like JetBrains use more detailed types: <em>Bug, Cosmetics, Exception, New Feature, Performance Problem, Usability Problem, Meta Issue, Task</em> (as <a href="http://www.jetbrains.net/jira/secure/ReleaseNote.jspa?projectId=10241&styleName=Html&version=11685">ReSharper</a>).</p> <p><font size="3">Continued…</font></p> <p>This post got rather lengthy, so I am continuing this topis in <a href="http://immitev.blogspot.com/2010/12/release-notes-less-or-more-structured.html">my next post</a> with a brief analysis of what kinds of tools you could use for manageing change logs. I’ll share some of my experience and will discuss the pros/cons of different approaches.</p> Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-10708717973964517822010-10-20T00:51:00.001+03:002010-10-20T00:51:52.832+03:00Devreach 2010<p>The 5th edition of Devreach was again excellent - so many world-class speakers, who are passionate about development. </p> <p>I visited the following sessions:</p> <p><a href="http://www.devreach.com/Event/Sessions.aspx#Anti-Corruption-Layers">Anti-Corruption Layers</a> <em>by <a href="http://www.devreach.com/Event/Speakers.aspx#Philip Japikse">Donlad Belcham</a>, <a href="http://www.devreach.com/Event/FAQ.aspx#1609f821-fefc-46b2-9283-c3ea408e4812">Level200</a></em></p> <p><a href="http://www.devreach.com/Event/Sessions.aspx#WCF-4.0">What's New in WCF 4</a> <em>by <a href="http://www.devreach.com/Event/Speakers.aspx#MiguelCastro">Miguel Castro</a>, <a href="http://www.devreach.com/Event/FAQ.aspx#1609f821-fefc-46b2-9283-c3ea408e4812">Level 200</a></em></p> <p><a href="http://www.devreach.com/Event/Sessions.aspx#kanban-scrumban">Kanban and Scrumban</a> <em>by Joel Semeniuk, <a href="http://www.devreach.com/Event/FAQ.aspx#1609f821-fefc-46b2-9283-c3ea408e4812">Level 200</a></em></p> <p><a href="http://www.devreach.com/Event/Sessions.aspx#client-jQuery-visual-studio">Leveraging Client Capabilities with jQuery in Visual Studio</a> <em>by <a href="http://www.devreach.com/Event/Speakers.aspx#RobertBoedigheimer">Robert Boedigheimer</a>, <a href="http://www.devreach.com/Event/FAQ.aspx#1609f821-fefc-46b2-9283-c3ea408e4812">Level 300</a></em></p> <p><a href="http://www.devreach.com/Event/Sessions.aspx#ASP.NET-provider-model">Dynamic State Storage Using the ASP.NET Provider Model</a> <em>by <a href="http://www.devreach.com/Event/Speakers.aspx#MiguelCastro">Miguel Castro</a>, <a href="http://www.devreach.com/Event/FAQ.aspx#1609f821-fefc-46b2-9283-c3ea408e4812">Level 300</a></em></p> <p><a href="http://www.devreach.com/Event/Sessions.aspx#Team-Foundation-Server">Customizing TFS to Your Needs</a> <em>by <a href="http://www.devreach.com/Event/Speakers.aspx#Joelsemeniuk">Joel Semeniuk</a>, <a href="http://www.devreach.com/Event/FAQ.aspx#1609f821-fefc-46b2-9283-c3ea408e4812">Level 300</a></em></p> <p><a href="http://www.devreach.com/Event/Sessions.aspx#visual-studio-2010">Deep dive into Load Testing features in Visual Studio 2010</a> <em>by <a href="http://www.devreach.com/Event/Speakers.aspx#MartinKulov">Martin Kulov</a>, <a href="http://www.devreach.com/Event/FAQ.aspx#1609f821-fefc-46b2-9283-c3ea408e4812">Level 300</a></em></p> <p><a href="http://www.devreach.com/Event/Sessions.aspx#development">Worst Practices and Anti-Patterns of Software</a> <em>by <a href="http://www.devreach.com/Event/Speakers.aspx#StevenSmith">Steven Smith</a>, <a href="http://www.devreach.com/Event/FAQ.aspx#1609f821-fefc-46b2-9283-c3ea408e4812">Level 200</a></em></p> <p><a href="http://www.devreach.com/Event/Sessions.aspx#automated-testing">Automated Testing in the Agile Environment</a> <em>by <a href="http://www.devreach.com/Event/Speakers.aspx#ChristopherEyhorn">Christopher Eyhorn</a>, <a href="http://www.devreach.com/Event/FAQ.aspx#1609f821-fefc-46b2-9283-c3ea408e4812">Level 300</a></em></p> <p>I have to say that none disappointed me – most of them were both informative and entertaining. Altough there were 5 parallel streams of lectures for each time slot (Presentation Layer, Data Layer, Business Layer, Best Practices, Architecture) the titless that grabbed my interest were usually just one or two. </p> <p>I am not sure how much value the information from this conference would bring to my work, but at least it is refreshing to hear (or get remineded) about various practices, approaches, technologies and fantasize how they might help you in you everyday job.</p> Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0tag:blogger.com,1999:blog-6471778.post-30874193948497876982008-12-25T15:47:00.002+02:002008-12-25T16:06:44.244+02:00Summary of the year 2008Another quite year of blogging, though the last quarter this blog was somewhat resurrected.<br /><br />It has been 2.5 years since I started working on <a href="http://www.validata.co.uk/"><span class="blsp-spelling-error" id="SPELLING_ERROR_0">Validata</span></a> product. The last year was moderately interesting one,. I worked on various staff, the most notable of which are an HTTP load testing tool (pretty challenging task) and a language parser using <span class="blsp-spelling-error" id="SPELLING_ERROR_1">ANTLR</span> (just for a week). I also continued to work on our web application and a couple of desktop applications. I feel good that some my ideas finally were implemented and went in production. Also I think my efforts to improve our development process start to pay off...<br /><br />Unfortunately my pet project with <span class="blsp-spelling-error" id="SPELLING_ERROR_2">ActiveRecord</span>, Monorail, <span class="blsp-spelling-error" id="SPELLING_ERROR_3">MySql</span>, <span class="blsp-spelling-error" id="SPELLING_ERROR_4">JQuery</span> that I got started was put on hold in <span class="blsp-spelling-error" id="SPELLING_ERROR_5">february</span>, but still it was a good learning experience. After getting to know Monorail, now I quickly got was ASP.NET <span class="blsp-spelling-error" id="SPELLING_ERROR_6">MVC</span> all about.<br /><br />Next year, I plan to become an <span class="blsp-spelling-error" id="SPELLING_ERROR_7">MCTS</span> (I think my company finds more value in those certifications, than I do), so I am starting with <a href="http://www.microsoft.com/learning/en/us/exams/70-536.aspx">70-536</a>. As a matter of fact, this morning I finally took a practice test from the training kit. I expected to top it without reading a word from the training book, but wishful thinking did not suffice :) I realized that there are areas of the .NET Framework that I don't know enough about i.e. .NET Security, <span class="blsp-spelling-error" id="SPELLING_ERROR_8">WMI</span>, Interoperability. I wonder if I concentrate only on those areas, will this be enough to pass the exam. Having solid 4 years experience in the .NET world should be a good starting point, so reading a few chapters for a couple of days might be exactly what I need.Ivan Mitevhttp://www.blogger.com/profile/00282745654787781625noreply@blogger.com0