Jan 05 2017

Negative feedback management

Category: English posts,TechnicalIuliana @ 23:03
In the software development world we have a lot of processes, standards and ways to measure quality. When it comes to code quality the  standard measurement is the WTF/minute, depicted in the image on the left. The result of such measurement is usually a feedback given to you by a superior. If the feedback is positive, you will receive a pat on the back, the responsibility of teaching your mastery to others and if you are lucky, a bonus or a raise. Giving and receiving positive feedback is a easy, but life is not only milk and honey and sometimes negative feedback has to be given and received. And it can be quite uncomfortable for both parties involved. But fear not, I took a little of my precious time to write a post about it.  Because even if you are a genius, you are human and you are most probably doing at least one thing wrong. And negative feedback is not only given for the quality of your work, but for your overall behaviour during working hours as well.
This being said, let’s begin. There are three ways to give negative feedback:

  1. officially, via a review that will affect your future career path
  2. privately in a professional/unprofessional manner
  3. publicly in a professional/unprofessional manner

Officially, negative feedback is given to you in the best way possible, wrapped up as an “ability you need to improve” (or more). The fact that you are given negative feedback, means that you actually matter to the company and somebody above you in the company hierarchy believes you can improve. The first time when you receive negative feedback might be a drama, because if you are passionate about your job you cannot stop yourself from taking it personally and feel like a failure. The emotion is similar to what you feel when you let down someone you love, only in this case this someone is you. Just allow yourself to breath, to think about it and then start working on improving the mentioned point. And the most important, ask guidance in how to do this from the one that gave you the negative feedback.

Negative feedback given privately, is a warning sign. It is one of the most embarrassing ways to receive a negative feedback and it usually means you screwed up badly, but somebody wants to understand what happened and try to help you make things better. When given such feedback, try to pay attention to what it is being said to you, hold your ground and emotions in check and try not point the finger to somebody else, not without accepting your own fault in the matter. Negative feedback given privately is usually the result of some behavioural issues, usually harassment of any kind. Depending on how badly you screwed up and depending on how short tempered your manager is, the negative feedback can be delivered professionally or unprofessionally. If the negative feedback is provided unprofessionally, the same as said before applies, there must be at least one person in that room to hold their shit together, it is better that is you. Because even if the discussion is private, the outcome will be in an official review. So, obviously it is better to say in your review that you admitted your part of the guilt, you are sorry about it and will work on improving in the future. And you can also report the short tempered manager to his manager.

Negative feedback given publicly, is clearly inappropriate. It is a warning sign for the provider of the feedback and for the receiver as well. It means there is a clash of egos there, maybe some issues that were never resolved or reported. Whether provided professionally or unprofessionally, this is one of the most uncomfortable things that can happen in a company. It reveals that the two persons involved both as problem employees. Maybe they either do not know or do not care about the internal hierarchy, or they do not trust the matter can be solved by official channels. If you are being scolded publicly, just remember school. Even if you have never been scolded by a teacher, you have witnessed it and you probably remember, that answering and defending yourself in the heat of the moment, did not do much. The same advice as in the previous case applies: hold your ground, keep your emotions in check and just take it. Just let it pass. Then think, raise the issue to the next person higher on the hierarchy and show yourself open to make things work.

No matter how good at your job you are, the fact is that we are all humans. We all make mistakes and we all have our moments when our mind plays tricks with us. When you work with the same people for a long time, conflicts are unavoidable. But you must remember why you are there for: you are there to excel at your job, you are there to teach others what you know, work with your team and make work more efficient for everybody so in the end the company will flourish and so will you. Unless the negative feedback is a backlash caused by personal issues with the person providing it, the negative feedback should always be considered an opportunity to improve yourself and others too. If the matter is personal, well… in this case things get complicated, unless you find a way to put it aside and separate personal from professional issues. Not all persons have the ability to separate professional from personal issues, but you can get better at this by talking to a counselor, for example.

I’ve written the above from my professional experience. I remember my first negative feedback and I remember my last. There is one recurring recommendation managers keep giving me: to be less blunt. But from overall personal experience I know that some people do not react unless they are hit with the naked truth. The best I can do is to try to know my colleagues as best as I can, thus I can modify my behaviour depending on them. I guess, we all just have to be understanding, considerate and flexible after all.

Stay safe, stay happy!

Tags: ,


Dec 20 2016

Company given rank and how much it matters

Category: English posts,TechnicalIuliana @ 1:01

I’ve been promising for a while to start writing technical posts, but until I’ll have some time to write some code, I do have a few ideas regarding management and internal hoochy-moochy that happens inside IT companies. Bare with me, it might be either fun, either instructive, depends on how my mood changes while I write. Also, do not expect a small post that you will read in five minutes, you know I rarely do that.

I’m in my 10th year of experience in the IT field. I have worked on a lot of different type of projects, I taught at the university for a while, did some consulting and even written two technical books.  The company I work for currently has knighted me at the beginning of the year and therefore I am now called a software architect. My diplomas say that I am an engineer. And I find the term  software engineer much more suitable, because engineers break down problems into smaller problems and provide solutions or they concoct contraptions to make life easier and work more efficient. This is what I’ve been doing since 2010, concocting contraptions to make my work easier so I can be payed for being lazy.

But back to the original point. Last week, the company I work for sent me to a training/workshop where some guys were explaining something that I cannot currently write about and at the beginning of the workshop asked all of us to present ourselves. These guys were just there for the workshop, we will probably never see them again and the plan is to provide our own implementation for the thing they talked about. Nevertheless my colleagues started giving super details, their full names and full titles within the company. I just told them my first name,  the project I work on and the reason I was interested in the workshop. All done in 20 seconds or so. Bam!

I never liked labels, maybe because I was given so many while growing up (crazy, poor, weird, teacher’s pet, geek, nerd, etc). I do not like titles either. Unless you are freaking royal, then… oh well, you can have your title and shove it where the sun don’t shine. I have been doing architect work since 2010 when I had a full project on my hands, and I had to migrate it to some new technologies. And I did that and only missed the deadline because I broke my right hand and I had to program for two weeks only with my left hand. And I am right handed.(Since then I kinda started doing a lot of things with my left hand too, so now I think ambidextrous fits.) Returning to the original idea, bragging about your title when it does not fit you, is quite ridiculous. You can call yourself a manager, but you’re not doing much managing if your team members keep leaving. You can call yourself and architect, but if your solutions are crappy you’re not doing much … architecting(sic!). You can call yourself a web developer, but if you cannot develop a responsive web interface, allow me to have my doubts. And plus, a title given by the company you work in is as valuable as your wife knighting you the best lover in the world.

This is why I used to make fun of my architect title at the beginning. People who do not know me well, did not get my sarcasm. Many of my colleagues took my Lync status (I am architect, therefore I am God…) as bragging. I do not feel like an architect when I do not have architect specific tasks. So I present myself as a developer or engineer. It suits me better at the moment.  The way I see it, presenting myself as an architect, when I do little architect work, would be like presenting myself as Miss Romania, after I gained 20 kilos. So I do not present myself as an architect. I let others do it.

Another term I totally loath is expert. In the company I work for people like to use it a lot. I just started on a project called Regulator, people I interacted with, already started calling me The Regulator Expert. Then I switched to something called XBRL, I became The XBRL expert. Seriously???

I am no expert, in anything. Really. But what I am good at is keeping things simple and keep learning. Everything I do, I try to make it so simple that anybody with a little motivation could understand it, use it and maintain it. Why? Because I am lazy, I prefer the work to be self explanatory, than for people to bother me with questions. The other reason why I prefer not being asked questions about my work is that I kinda’ lack social skills. So if I develop something, expect tests, proper documentation with three types of UMLs  and some extra schemes drawn in Google Drawings. Anything to keep you away from me.

Also, company ranks mean nothing if you are not up to the task. And I’m the kind of asshole that even if you are a manager, if you are a crappy one, I will treat you accordingly and eventually tell you to your face, because negative feedback is also a thing.  :D

This being said, there is a post about negative feedback in the works. I hope you will enjoy that too.

Stay safe, stay smart!

Tags: , , ,


Oct 03 2016

WordPress & MySql…

Category: English posts,TechnicalIuliana @ 23:28

… is a recipe for disaster. Once every few weeks I get this:

Error establishing a database connection.

Today I tried another two tricks:
1. Adding the following configurations to the Apache httpd.conf file.

StartServers 3
MinSpareServers 3
MaxSpareServers 5
MaxRequestWorkers 25
MaxConnectionsPerChild 0

2. Configurating MySQL like this in /etc/my.cnf
[mysqld]
innodb_buffer_pool_size=10M
performance_schema=offM
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Set internal buffers, caches and stacks very low
key_buffer = 16K
max_allowed_packet = 16K
table_cache = 1
sort_buffer_size = 16K
read_buffer_size = 16K
read_rnd_buffer_size = 1K
net_buffer_length = 1K
thread_stack = 16K
# Don't listen on a TCP/IP port at all.
# Will still work provided all access is done via localhost
skip-networking
server-id = 1
# Set the query cache low
query_cache_limit = 1048576
query_cache_size = 1048576
query_cache_type = 1
# Set various memory limits very low, disable memory-hogging extras
[mysqldump]
quick
max_allowed_packet = 16K
[mysql]
no-auto-rehash
[isamchk]
key_buffer = 16K
sort_buffer_size = 16K
[myisamchk]
key_buffer = 16K
sort_buffer_size = 16K
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

I’ll come back here with an update, in case I managed to make the bloody damn thing stop from crashing.

[Update]: Well, the database no longer crashed, but the ec2 instance did. So I had to terminate it and create a new one. And of course I did not remember anything I did to keep it working so I cam back to this post. And I just found out that the innodb_buffer_pool_size property value depends on the machine you are on. If it is too big, the connection pool will require too much memory and if you do not have that memory, Mysql will still crash. So I just switched to the smallest value that I think it could be necessary for my blog to be accessed by my 50 readers per day: 10MB. And aside from this I modified my instance to add some swap. You can find a really useful tutorial here, I used the first option to create the file in the current file system.

 

Tags: , ,


Sep 29 2016

What means to be a good programmer

Category: English posts,Funny,TechnicalIuliana @ 20:18

A few weeks ago this picture appeared on my Facebook wall.
14481798_1347939108557879_3012695335241845599_o
And it got me thinking. Are programmers that special? We really do programming just because it is fun? And what actually means to be a good programmer? Because in 10 years of experience in this field I had the occasion to work with really good programmers that were really awful people and good people that were not that good programmers, but they were easy to work with.

So then, what makes a programmer good? His ability to write an algorithm? His ability to improve it? His ability  to work in a team? His ability to write stable, extendable, testable and maintainable code? What means to actually be a good programmer?

Because if good programmers write code for fun, this means that I am actually a good runner, because I run for fun. It also means I am a good dancer because I dance for fun. This also makes me a good comedian, because I make my friends laugh for fun. And so on. And what happens when I have a bad day and I write code and hate doing it? Does this make me a bad programmer?

I am not looking the define what a good programmer is. Because programming is not about having fun. Bill Gates did not do it for fun. Steve Jobs did not do it either, I assure you. They did it because they have inferred the potential of technology when used properly. Programming is about making the technology do the work for you. The better you are at it, the more work it will do for you. So fuck it, I do not want to be a good programmer! Because I do not program for fun, not 90% of the time. I program to improve my life and others’ too.

I do not want to be a good programmer, because I want to be an excellent programmer. And if I succeed I want my work and my effort to be recognized, I want to be adulated by the public and I do expect to get properly remunerated.


Sep 05 2016

How do you recognize applications created by me?

Category: English posts,Funny,TechnicalIuliana @ 21:02

9781484208120_Figure_06-16

Well… There will always be that user, called gigi.pedala, that I probably created when  I was pissed off that something did not work as I intended…

Who is Gigi Pedala? In Romania Gigi Pedală, also known as Dorel is the guy creating trouble, that knows nothing (and he is nothing like John Snow) and most of the time does nothing. Except trouble. That he does.


Jun 22 2016

xmlrpc attacks and how to handle them

Category: TechnicalIuliana @ 23:05

Here I am managing my own blog. Last week the blog crashed. Which made no sense because everything was brand new and the setup on my Amazon instance was pristine. So when I got home I started investigating. And the only hint as to what happened were a lot of entries in /var/log/httpd/access_log, entries that looked like this:

64.137.235.207 - - [22/Jun/2016:18:19:44 +0000] "POST /xmlrpc.php HTTP/1.0" 500 251 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
64.137.235.218 - - [22/Jun/2016:18:19:45 +0000] "POST /xmlrpc.php HTTP/1.0" 500 251 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
64.137.235.218 - - [22/Jun/2016:18:19:48 +0000] "POST /xmlrpc.php HTTP/1.0" 500 251 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"
64.137.235.207 - - [22/Jun/2016:18:19:50 +0000] "POST /xmlrpc.php HTTP/1.0" 500 251 "-" "Mozilla/4.0 (compatible: MSIE 7.0; Windows NT 6.0)"

I had no idea what these were and what to do about them, so the first thing I did was to ask my dear friend Google. And I found this guy. I did everything he recommended and this week it happened again.

So I did what every person that manages a blog and the machine it is on. I asked the previous administrator if he knew what to do about it. And he said that these kind of attacks on my blog happened all the time when he was administering it, but he manually took the ip classes and added them to iptables with DROP. Plus, the previous server was more powerful and the effect of the attack was not visible. My micro Amazon machine is quite a defenseless victim.
So I did what could be done at this point, modify the iptables settings to be more restrictive.

#This will reject connections above 15 from one source IP.
iptables -A INPUT -p tcp --syn --dport 80 -m connlimit --connlimit-above 15 --connlimit-mask 32 -j REJECT --reject-with tcp-reset
#In this 160 new connections (packets really) are allowed before the limit of 150 NEW connections (packets) per second is applied.
iptables -A INPUT -m state --state RELATED,ESTABLISHED -m limit --limit 150/second --limit-burst 160 -j ACCEPT

But this is not enough, I want to shame the organizations allowing this to happen, so I created a java program to analyze the access_log file and extract ip families and organizations they match to. So below, you can see the full list of culprits:

AT&T Internet Services; Richardson
African Network Information Center; Ebene
Amazon Technologies Inc.; Seattle
Asia Pacific Network Information Centre; South Brisbane ;
CLGW; Kennett
KW Datacenter; Petersburg; 104.233.88.236
Latin American and Caribbean IP address Regional Registry; Montevideo
MCI Communications Services, Inc. d/b/a Verizon Business; Ashburn
Qwest Communications Company, LLC; Monroe
RIPE Network Coordination Centre; Amsterdam
Shaw Communications Inc.; Calgary
Time Warner Cable Internet LLC; Herndon

The requests spamming this blog came from 401 ips, I could write a script to block connections from all of them to this blog, but I don’t have the time. So I’ll just lease the rues above for iptables and I’ll see if there is need for anything else more drastic. But I really hope it won’t be for a while.
Below is the ip list, in case somebody is interested. Continue reading “xmlrpc attacks and how to handle them”


Mar 11 2016

Despre companii și ironie

Category: Miscellaneous,TechnicalIuliana @ 11:29

De ceva vreme în compania în care lucrez au loc schimbări majore. V-am povestit despre migrarea de la CVS la Git, acum că s-a cam terminat cu asta, pasul următor a fost să ne folosim de Git pentru a ne ușura viața. Zis și făcut, așa că am făcut un document în care care explicam cum se lucra pe proiecte înainte, explicam de ce nu merge acum și explicam cum ar trebui să lucram. Ar fi trebuit să fie simplu, uite ce fain, e uite ce ne ușurează munca, după următorul release facem.

Numai că lucrurile nu sunt mereu ușoare în companiile mari, pentru că sunt oameni și echipe specializate e o anumită treabă și ăia trebuie să și-o facă, nu-i așa? Indiferent dacă se pricep la ea sau nu. Și uite așa echipa de infrastructură, care se auto-numesc cu mândrie DevOps au preluat controlul GitBlit și al întregului setup făcut de mine și acum eu sunt user normal cu drept de citire și scriere doar pe un repository.

Partea ironică e că, cică eu sunt arhitect și când lucrez la câte un task, schimbarile pe care le fac sunt pe repo-uri diferite și aici începe partea distractivă, pentru că eu nu pot push-ui schimbarile mele pe repo-urile respective. Și asta pentru că un indian paranoic, care a vrut să instaleze camere de luat vederi în biroul din Sibiu să se asigure că muncim, vrea doar echipa lui, cea de infrastuctură, să aibă drepturi depline pe un tool de development. Because, fuck logic!

Și în afară de echipa de infrastructură, mai este o echipă de testare, care a modificat documentul creat de mine trasformându-l într-un monstru care urmează să fie standardul de lucru. Da, am scris bine, iar voi ați citit bine, echipa de testare, care este o chestie abstractă cu scop încă nedefinit și un lider foarte deschis la idei noi cât timp el este cel care decide implementarea. Care din punctul meu de vedere și al multora, n-ar trebui să aibă nici o treabă în a ne defini noua sistemul de development (branching) folosing Git. Mai ales când nici el și nici unul din oamenii din echipa lui n-au lucrat cu Git în viața lor.

Și mai ironic este că de când sunt arhitect mi se pare că efectiv ideile și părerile mele sunt ignorate total. În momentul de față aș prefera să dau promovarea aia înapoi și să ne întoarcem la stilul vechi de interacțiune.

Și cu adevărat ridicol este faptul că oamenii ăștia din paranoia lor și obsesia lor de a împărți oamenii pe roluri bine definite, nu realizează că efectiv se împușcă singuri în coiae. Eficiența oamenilor va scădea drastic, motivația la fel, mai ales când efectiv nu poți lucra și nu poți învăța un tool cum trebuie când poți folosi numai două funcții ale lui. E ca și cum un părinte ar vrea ca al lui copil să ajungă înnotător profesionist, dat îi dă voie să înoate doar în cadă. La un moment dat, unul din mai marii companiei mă numise a jewel, referindu-se la cunștințele mele în domeniu. Nu aș fi ajuns așa, dacă n-aș fi lucrat înainte în companii unde mi s-au permis foarte multe. Am avut drept de admin pe orice tool cu care am lucrat și de root pe mașini de producție, de îmi doream să scap de ele, pentru că era prea stresant să am atâta putere. Aici nu mai am drept de root decât pe macul meu și este uimitor cât de ineficientă sunt, pentru că efectiv când am nevoie de ceva, fie trebuie să rog pe cineva să facă asta, fie trebuie să fac un request și să aștept să îmi răspundă cineva. Deși am demonstrat că pot să mă descurc cu un drept de admin și root, dar rules are rules.

Dar m-am resemnat, dacă ei preferă să mă plătească pentru a fi ineficientă, e alegerea lor. Pe principiul cum îți așteni așa dormi, ai copiii așa cum îi crești și companiile au angajații exact așa cum și-i formează.

Stay safe, stay happy!

Tags: