Arseni Mourzenko
arseni.mourzenko@gmail.com
Founder and lead developer
Developer, architect, project manager, tester, and active DevOps supporter, I'm studying, observing and advising companies which have an important risk to fail their IT-related projects. I specialize in quality and productivity.
After six years of freelancing, I worked for several companies, including Tata Consultancy Services. Today, I'm a happy member of Finaxys. I mostly work with Linux, Python, and Node.js, as well as the Microsoft stack.
Outside information technology, I'm interested by photography.
I'm mostly active on SE.SE; I'm not registered in any social networks, as I don't see the point.
If you want to contact me, my email is shown above. Feel free to drop me a note about any development-related discussions. If you live in Paris or want to visit Paris, you're very welcome to contact me too.
Articles
- Taking screenshot of a QOpenGLWidget containing text Working on a Qt application that uses OpenGL to draw lines and polygons, and cpp::QPainter to draw text, I was surprised to find that it is not particularly straightforward to make the application…
- Stopping Python program from Supervisor I was quite puzzled recently by a following problem. I needed to run a Python program that had an infinite loop: every N seconds, the script would perform a task. In order to ensure that the script…
- Edge cases Software products are designed for the cases where things go right, the situations, where networks are perfectly flawless, servers don't reboot randomly, and processes happen as they would happen in…
- Interviewing ChatGPT for a job Recently, I was reviewing the interview questions for a few companies. Many of them were unfortunately only about algorithms—sadly indeed, since those questions were for the jobs that have nothing to…
- What targetting 100% code coverage taught me I was recently in charge of drafting a new system for a customer. I took it as an opportunity to demonstrate some of the approaches that should lead to higher quality software, compared to what the…
- Correlation tags For quite a long time, correlation IDs were used to map the log entries to a given HTTP request. The idea is simple: every request coming to a web application is being assigned a pseudo-random piece…
- Reviewing code through dialogue Recently, I tried a new technique which mixes pair programming and code review. I don't know if this technique has a name, and I don't even know if it is used by somebody else—sure, I haven't seen it…
- This is what you get when you measure lines of code A few months ago, I wrote an article about a technical leader who misunderstood how to measure code quality. Trying to improve things, his only achievement was to make everything worse, because of the…
- Side effects Recently, I had a discussion with a colleague about the notion of side effects. I was talking about the functional approaches to work with arrays, and listed three functions: map, filter, and reduce.…
- Designing documentation and technical emails A few years ago, I was working on a project where a part was done by a team in London, and the other part was developed in France. To communicate, we were using among others the WebHooks, for the sole…
- Poor man’s temperature monitoring for data closets A few months ago, I explained how I replaced the fans in a server power supply unit, in order to reduce the noise made by the server. Similarly, in another article, I described how to silence an UPS.…
- Non-blocking reading from stdin in Python One of my projects relies heavily on multiprocessing. Some of its components are chained through the Linux pipes in order to process data. A common way to read from stdin is to use…
- Trimming strings Regularly, I find interesting questions on Stack Overflow, that look basic at the first sight, but appear to be not that simple after all. Today, it was a question on the Russian version of Stack…
- Using LOCs to validate hypotheses In my previous article, I was talking about the tool which gathers the diffs from the version control commits, and uses them to compute the number of lines of code (LOC) per language over time, in…
- Languages usage over time I started programming a long, long time ago. The oldest source code I can find in the archives is from 2004. Back then, I was seventeen years old, using Visual Basic and something that I believed…
- When testing is not fun enough On regular basis, some colleague starts complaining in an informal discussion about the low quality of some project he's working on. It has to do with code quality, or lack of tests, or both. Every…
- How to deadlock a project In 2014, I wrote the article Taking hostages with Waterfall, explaining how Agile moves the power of decision about the scope and the cost of the project from the ones who make the software to the…
- Welcome to the new blog engine A few days ago, I released the new version of the blog engine. Original development of the blog engine started in the beginning of 2014. Back then, I was publishing my articles in a form of a static…
- Measuring quality like a pro My previous article led some of the readers wondering how a correct approach to measuring stuff looks. I'll use this as an opportunity to show how I worked myself as a consultant. The article would…
- Measuring quality and undesired behavior When I talk about measuring quality, I can't emphasize more how measuring a given thing influences the behavior of the persons who are being measured. When done properly, this is an excellent lever which encourages persons to work better. In other…
- Tricky, tricky dates Any programmer who worked with dates would tell that dates are a complex subject. Time zones, UTC, daylight saving time, leap years, and, my favorite of all—leap seconds that “are not entirely…
- Beyerdynamic T51p repair I own a Beyerdynamic T51p headphones. I bought them in 2017, and a few months after its warranty expired, it started to experience a common problem for this model: the right driver would work only when the wire was put in a specific position. A few…
- Silencing PWS-741P-1R power supply I have a bunch of SuperMicro 2U chassis 825TQ that I use for the tasks which don't require a lot of CPU power. The original chassis makes a lot of noise. When I say a lot, I mean it. You can't possibly stay in the room when this thing is on. I…
- Hiring process is inherently wrong Regularly, managers ask me questions about the hiring process. All of them complain about three things: They have a lot of bad candidates—candidates who clearly don't qualify for the job. They have few good candidates. They often hire persons who end…
- Architecture without culture I was recently watching the DeepMind's AlphaGo documentary, which starts with several views of Oxford, including a shot where half of the frame is filled with the outside of The Sheldonian Theatre, the other half showing the History of Science…
- Setting inter-VLAN communication in Netgear ProSafe switches Recently, I was trying to configure VLANs in order to create more logical network view and increase the security of the network by limiting the traffic from the different types of machines through the router ACLs. In order to do that, I had two…
- Workflows, ETLs, and pure magic Five years ago, I wrote a rather opinionated and very critical article about Nintex Workflows, a perfectly useless product which makes your life miserable while you're paying for it. Nintex is sold as a solution to allow non-technical persons to…
- How metrics impact the way we work A long time ago, I started studying how quality and productivity can be measured. I wrote articles about it, and I convinced a few dozen entrepreneurs about the importance of measurement in their…
- Designing a contact form Recently, a colleague asked me how I would redesign a contact form on a website. An e-commerce site he was working on had a “basic” (as he claimed) form where you had to provide: Your full name. Your…
- Minimum viable product An interesting question on SE.SE got my attention recently. The question is about things that may happen to a project, in a context of a project which is targeted to be delivered eight months after its start. A discussion that followed showed that…
- Build complexity I'm always amazed at the capacity of large and small companies to pick the tools which would make their build as complex as possible. It's like they enjoy paying money for something which will cost them even more money. The core problem here is the…
- Fixing RTSP in a Vivotek camera I own a Vivotek camera. It appears that I haven't been to serious updating the firmware—but neither is the manufacturer—since the camera was bought in 2015, but didn't have the latest firmware released in... 2014. Although the description of the…
- YAGNI principle in action Discussing YAGNI with colleagues, I often find myself in a situation where they give me a concrete example where they were very happy to think about a given feature or aspect before it was really needed. As those discussions always follow the same…
- Lazy programmer fallacy There is, among project managers, a thinking that programmers are lazy. Programmers—they say—don't want to work; they prefer playing games or just doing nothing at all. This is all but truth. Actually, many programmers enjoy programming. They have…
- The essential skills of a developer, and why don't we check them during an interview A few months ago, I described a fracture which exists between the skills considered desirable during an interview and the skills which are actually valuable for an employee. I haven't explained, however, the reasons for this fracture. This is the…
- Documenting types used in services SOA and microservices trends caused the frenzy where everyone started to expose everything as a service. Large and small companies wanted to replace big systems of components with relatively unclear interfaces between them by bigger systems of…
- Unit testing methods which are calling static methods Disclaimer: the article below talks about methods calling public static methods from other classes. This excludes the calls to private static methods. Recently, I wrote a rather unpopular answer on Stack Exchange about static methods in a context of…
- Monochrome laziness Twelve years ago, Windows Vista was released, impressing everyone by its shiny, elaborate icons. For instance, a recycle bin was illustrated by a shiny transparent waste basket. Search functionality was shown in a form of a metallic magnifying glass.…
- Take risks, fail fast In many software development teams, the source code is sacred. Its sacredness is caused by two factors: The code is the ultimate expression of the intellectual work of the developers. If you have anything against the code, it means that you're…
- Aligning plain text with spaces and tabs A fellow developer asked me how to solve the following problem. An application is displaying some data in a form of a grid. The user should be able to copy this data to a text field in a third-party application. The text field has no support for any…
- Silencing a 2U UPS I have a home office with a bunch of servers and network hardware. In order to protect myself against occasional problems with the power grid, I had two Eaton UPS units, but a firmware upgrade bricked both of them, so I had to buy another one. I…
- Quiet fans with high static pressure for 2U servers Recently, I purchased a bunch of 2U chassis for a SAN. Since the servers are in my home office, they should be quiet. This wasn't a problem when I used 4U servers, but with 2U size factor, and especially in the context where the front panel is all…
- RabbitMQ clustering I'm working on an application which would rely extensively on RabbitMQ for two things: transmitting messages from sensors to the end user, and transmitting the orders from the end user to the actuators (such as lamp switches). For the first category…
- Identifiers in bug tracking systems One annoying aspect of bug tracking systems is the identifiers. In systems such as Jira, every time a ticket is created, an identifier is assigned to it. The identifier is based on a number which increments every time. For example, I create two…
- On bug tracking systems There are no good bug tracking systems, and I'm about to explain what makes them not good and why good systems weren't developed yet. To begin, let's illustrate a journey of two persons working on the same team: one of the programmers and a product…
- What makes performance decrease over time? In an excellent blog post, Nikita Prokopov shares his thoughts about “our industry’s lack of care for efficiency, simplicity, and excellence,” explaining, among others, that year after year, hardware becomes more and more powerful, but applications…
- The essential skills of a developer I was recently approached by a manager working in a large (more than a thousand employees) company. Aside his management job, he was also actively contributing to the hiring interviews. He have read the series of articles I wrote on the subject back…
- Why do you need a productivity consultant Many of the persons who learn about my previous activity as a productivity consultant are wondering what sort of problems I was solving, and why would a given company be needing a consultant instead of solving those problems on their own. This…
- Streaming large uploads to a backend API When it comes to uploading large files to a Flask application, the subject seems to be well documented. Flask (or rather Werkzeug) has lots of features to stream not only downloads, but also uploads themselves, in order to receive huge files with…
- Kevin D. Mitnick's The art of deception Just finished reading Kevin D. Mitnick's The art of deception. The first part of the book contains the stories of social engineers in action. The second part is a set of recommendations. The stories are fun to read; the recommendations are sometimes…
- Make your build agents short living While discussing with a friend of mine what I described in my previous article, it appeared that my approach to launching tests from a build pipeline is not necessarily well known. It seems that I can share some insight on that subject. A mandatory…
- Gated checkins are evil I was recently talking with a developer about a pre-build strategy he wants to set up in his team which uses trunk-based development. His idea is that in order to prevent problematic code from hitting the trunk in version control, a client-side…
- Candy security The title of this article is a term I discovered through the book of Kevin D. Mitnick, The art of deception, page 79. It means that the company has strong security perimeter with the outside world, but once you got through, nothing can stop you. In…
- Don't ask writing quality code Four years ago, I complained about people who are asking to write good code in a context where the company culture itself leads to bad code in the first place. I explained the necessity of RCA, and the uselessness of individual suggestions to write…
- “T-shaped” people model misuse In Handbook for new employees (PDF, 4 MB), Valve introduced on page 47 a concept of “T-shaped” people. What it means that people who want to work at Valve are expected to be both generalists—“highly skilled at a broad set of valuable things” and…
- DRM, custom hardware and technical solutions to human problems A now closed question on SoftwareEngineering.SE asked about a way to prevent the users from getting screenshots of an application. The context is an application showing sensitive documents in a bank. While the document is encrypted, it remains safe.…
- Bulky, heavy, fat ORMs A long time ago, I wrote the following in the description of Orseis. I never liked ORMs. They are bulky, heavy, fat. They build SQL queries behind my back, and I don't like it. I want to be in control. Recently, a person asked on SE.SE how is it…
- Reinventing authentication I'm delighted by the simplicity of OAuth 2.0 (as far as its integration into Flask and express takes takes less than five minutes) and the fact that it makes password management someone else's problem.¹ Really, I'm so delighted that I now use it in…
- Ratings in a CV Heard today a discussion of two colleagues about a possible improvement of a CV by adding for every technology a rating, showing the mastery level of the person in this particular technology. I'm sorry about those colleagues. They have a deep…
- Naming conventions for servers, two years later A few years ago, I wrote an article explaining how do I name servers. Since then, little changed, and conventions used in companies are still insane. Mentality hasn't changed either, and it's still considered professional to have arbitrary,…
- Users matter more than bytes and CPU cycles There is something completely wrong in developers' nature to be obsessed with performance to the detriment of everything else. It seems even that this compulsive obsession is not something we acquire with practice, since it affects even beginner…
- Blogging and plagiarism A few days ago, I was contacted by a CS student who wanted my advice on his online presence. He had an interesting CV, a decent website, and a blog which had regular articles—much more regular than mine. I enjoy a lot working with students who did…
- Hidden costs of freeware libraries There are so many open source libraries and frameworks out there for developers to download and use that it is very tempting to use them universally, without asking oneself if a given library or a framework is really necessary for the project. With…
- Those things we measure A recent change in Bookshelf service removed the counter which indicated how many books were displayed on the page. To be more precise, the counter can only be visible by the user in person, but not publicly. This is essentially a shift to substance…
- Introducing... a pen In most projects, sooner or later, someone asks himself which tool should be used to make diagrams. It may be that the team wants to document their architecture, or explain something to a customer, or... whatever. Long story short, one needs to do a…
- Working with the people you manage A few years ago, I worked in a company in Poitiers. Things went well until our boss left, and a new one arrived. The new one appeared to be, well, a bit proud of his new status, and, naturally, decided that he has plenty of important things to do and…
- Interfaces in microservices Observing large in-house systems which either use SOA approaches or even attempt to mimic microservices, I constantly notice a pattern which makes those systems sub-optimal and difficult to maintain. A tiny Hello World-style application can easily…
- Beautiful identifiers In the vast area of mistreated design elements, there is one which is implemented consistently wrong: the identifiers. In IT, identifiers are everywhere. Make a purchase on Amazon, and your order gets an identifier. Once the package is shipped, the…
- Utility classes are wrong Everyone has somewhere on a PC a directory called “miscellaneous”, or simply “misc.” This is where we put orphaned stuff which haven't found its place somewhere else, grouped with similar files in a well-named directory. For some people, the desktop…
- Desperate designs: Microsoft Bob legacy Since I'm moving to a different city, I had to find a moving company for my furniture and the servers. Here in France, the user experience when dealing with those companies ranges from poor to “WTF happened in the head of the guys who did this…
- The greatness of TDD illustrated During an interview, I was asked to solve the following problem: A validation function takes as input a string containing parenthesis and square brackets. It should return true if the closing parenthesis and brackets are matching the opening ones, or…
- Duplicating database constraints in code When I review database models for RDBMS, I'm usually surprised to find little to no constraints. For instance, percentage is often stored in a column of type int (while tinyint would be more appropriate) and there is no CHECK constraint to restrict…
- Estimation vs. commitment I love estimating software projects. Oh, who am I kidding?! Most IT professionals hate being asked how long the task will take. They hate it for a good reason: they find it worthless, and they know their estimates are usually wrong anyway. As such IT…
- XY-problem and project estimates A year ago, I was working as an architect and IT consultant with a company on a large software project. The project was estimated by their in-house lead developer, and I was asked to review the estimate to check if it's correct. The only problem was…
- What this blog is not for This blog is a good place for rants and detailed analysis of specific subjects (but mostly for rants), I always found it a bad place for short textual content or content consisting mostly or exclusively of media. For instance, if I want to recommend…
- A bug or a change? A feature is delivered to a customer. The customer complains that something doesn't behave as expected and creates a ticket in a bug tracking system. Should we classify this ticket as a bug or a change? The question matters for many software…
- Expensive projects are really cool Following my previous article, a colleague told me a similar but much more impressive story which happened to him. Since he doesn't enjoy writing too much, he invited me to tell the story here. Six years ago, Nicolas was hired as a freelance…
- Questioning the goal of the project Recently, a friend of mine approached me with a rewrite of a software product. A small company where she works has a small piece of desktop software written ten years ago in WinDev¹ by an in-house developer left five years ago. The purpose of this…
- Execution plan caching for stored procedures and parametrized queries Reading different explanations about execution plan caching by Microsoft SQL Server, I found very confusing the discussion about the benefits of using stored procedures instead of parametrized queries. While [some reliable sources][1] mention no…
- Official version control, competing systems and free market The way version control service is organized within many corporations is that there is an operations department which is in charge of the official system, and, depending on the company, developers are either forced to use this system, or are simply…
- Person-centered metrics and self-organizing teams We cannot reliably measure developers' productivity, and this is the major elements which pushes many managers to focus on less representative aspects of developers' contribution to a project and a company. Some companies do a really bad job,…
- Telecommuting and procrastination My colleagues and I had recently an interesting discussion about letting developers to work at home. They highlighted that one of the issues of telecommuting is that it makes it difficult for the…
- Narrative requirements I was recently discussing with a group of fellow developers the qualify of documents which are usually done to list the product requirements. After complaining about the low quality of most documents I've seen (and this complaint was shared by the…
- The harm of emotional response I can't stop noticing how emotional project managers can be, and how much harm could emotions cause to their project. A week ago, I had myself an interesting case when my emotional response during a call with a customer led to a negative conduct on…
- Do we think enough about coding standards we use? What is wrong about coding standards and “best practices” in general is that they throw the thinking process away. This may be a good idea for manual workers, but is quite problematic for developers.…
- Visual management and the everlasting tasks Nearly a year ago, I described how I implemented visual management in my company. My usage of visual management remained roughly the same, but over time, I discovered one aspect I wasn't thinking of when I wrote the original article: the tasks which…
- Corporate environment: the death of creative thinking The nature of corporate environment stifles creativity and makes the most interesting projects impossible to do. Let me explain it through an example. A few months ago, as a project manager in a…
- Packages, dependencies and interaction between teams Recently, a question of Programmers.SE passed unnoticed, because of its length. This is unfortunate, because the question highlights a bunch of misunderstandings within many teams on a broad range of subjects, from Continuous Integration to…
- Measurement: a two-edged sword Too often, the practice of measuring things is used in place of basic thinking, and, logically, leads to low customer satisfaction and poor product quality. The major reason for that is that in most cases, measurement is dehumanizing. A customer,…
- Linters and style checkers: how to save hours of painful debugging I'm always impressed with the consistency of screw-ups caused by the unwillingness of programmers to follow basic guidelines. To be more specific, I'm talking about my own screw-ups here. I've been convinced a long time ago that: Style checkers and…
- Should students be using syntax highlighting? A few months ago, someone asked a question on StackExchange, wondering if there is a research paper indicating whether syntax highlighting helps or slows down the learning process of future programmers. The question was closed and deleted, so here…
- Tampering SharePoint assemblies part 2 In the previous article, I explained the context of a legacy SharePoint code which should be tested. For instance, regression testing should cover methods such as: public string DoSomething(int whatever) { var urls =…
- Tampering SharePoint assemblies part 1 I've inherited a SharePoint project and I'm at the step when I start adding tests for regression testing. If the authors of the code knew anything about object orientation and design, there would be no problems at this step; but, as usual, they were…
- Control Human beings want to control everything. Their lives, other people, things around them, events which can affect them in any way. The illusion of control gives them certainty, the feeling of order, the…
- Topography of tests Important note: this article is written for developers who don't practice TDD, that is more than 99% of developers I know. TDD is a very different world, and a few assertions I make in this article don't apply there. For instance, my skepticism…
- Workflows Important note: this article focuses specifically on SharePoint workflows. What is written here doesn't apply to Windows Workflow Foundation (WF) and similar workflow tools, which have a perfectly valid usage and empower developers with the ability…
- Cloud computing: a rather expensive alternative I was always convinced that buying own servers is the most stupid thing a company can do at the era of cloud computing. If I deal with servers, it is exclusively because: I love dealing with servers. This alone is enough. There are a lot of things to…
- Servers monitoring UI proposal In the young industry which is software development, most domains are filled with applications made by developers with no thoughts about the end users. Bulletin boards, for instance, were an excellent example of terrible, unacceptable user…
- Micro-services in a context of high complexity and low code quality One of the most problematic things of a software developer is how to handle the increasing complexity of a given code base and the decreasing quality of it. Code which, when originally written, was readable and understandable, looks completely scary…
- Why do I need to install SQL Server for a simple Hello World ASP.NET MVC website? I needed to create a small server-side web-based application. The application is extremely simple, just a few lines of code. Hosting provider seems to support only PHP and ASP.NET/ASP.NET MVC, and I picked the last one, since the application may…
- Bad, bad passwords Passwords are an aberration. In a ideal world, we wouldn't have passwords, but only keys. The concept of a password as a security measure is flawed, and leads to multiple issues. Among others: When the password is sent by the client to the server,…
- Naming conventions for servers The rant series of this blog will be incomplete if I wouldn't mention the naming conventions for servers, especially since I've never even seen a convention which would make at least some sense in any company. The three prevailing naming conventions…
- The complexity of API keys When it comes to handling API keys, there are classically two situations which are a bit problematic: public sharing of a key and man in the middle. Looking at the approaches by Amazon, Google and other big companies, I find it both overly complex…
- Streaming input and output in Flask I always found Flask painful to use when it comes to streaming binary data, such as when I need to send a binary file or receive one. The official documentation is very sparse, explaining how to receive files submitted through a form, how to send a…
- Organizing information: from rigid structures to the lack of information organization When organizing information such as files, two problems arise every time: the uncertainty that the current structure is appropriate, and the cases which are outside the structure. Those two problems…
- Simplifying systems by adding proper abstractions The original draft of Solange project defined a notion of profile and instance. According to the today's documentation (revision 1234): A profile is a generic description of a machine, i.e. a set of configuration items and operations which define a…
- Early and “where to start” questions I already discussed how Stack Overflow encourages laziness and how most performance questions are wrong. The more I focus on the questions asked by my peers, the more I notice how incomplete, raw and…
- Teaching patterns College degrees in IT-related disciplines are known for not teaching some crucial things that every developer should know. Many students may be proud of contributing to dozens of projects, but don't…
- Scripting languages, automation and productivity I remember Pragmatic Programmer book encouraging to use plain text, and what could be more powerful than Linux shell and a scripting language to work with text in order to transform it? That's why…
- Comparing Java with C# I started programming in Java a few days ago and immediately felt in love with Java. As a person who have used C# for seven years, I was afraid that I wouldn't appreciate Java, would find that a lot of C# features are missing in Java, and that in…
- Unit tests, stubs and non-deterministic behavior When it comes to unit testing, beginner programmers are often blocked when reaching code which feels non-deterministic or when the result changes over time. Two classical examples are code which…
- Most performance questions are wrong I don't remember any question posted on SoftwareEngineering.SE related to performance which would be a good, on-topic question. I remember questions which were completely wrong or simply unanswerable.…
- Measurements as a precursor of culture of quality When auditing different IT companies, the noticeable pattern is that companies which perform badly have problems in every imaginable area. I've never seen a company which has outstanding work quality…
- A few words about Solange project For nearly nine months, I am working on a project called Solange which consists of DevOps platform which makes it painless to deploy new projects in production. Surprisingly, I haven't written too much about it, not because it's a secret (the source…
- Stack Overflow make us lazy It is common to think that the purpose of Stack Overflow is to make the world better, and it does, somehow. I think that it increased the overall quality of developer-oriented resources, provided a…
- The documentation is the spec A problem encountered by most developers and teams is that any project requires to perform a lot of tasks in parallel. Writing code implies doing a bit of design, refactoring should be done at the same time, but there is also testing, and…
- Freedom of choice Scott Adams recently wrote an article called [Would You Take Orders From Machines?][1]. Although the idea is interesting, my humble opinion is that Scott is missing the point. The first problem with his article is the use of the term “orders”. We…
- Does it look like an XSLT-based website to you? The article talks about the [source website][1], the website which hosts the source code of public projects. Five years ago, I was challenged with a problem related to source code. I had to make it somehow accessible from anywhere, primary to make…
- Did you know that Ruby is faster than C? In the past few days, there was on Programmers.SE at least three questions ([example][1]) which can be summarized as: “Which programming language is faster, this one or that one?” This is annoying. I already asserted once that it makes no sense to…
- Google Search is great, or why should your internal documentation be public Recently, I answered a question on Programmers.SE about documentation tools such as Confluence for the internal documentation of the project. My answer was badly written and I had no enough time or interest to rewrite it correctly, so I removed it.…
- And what if most projects were research projects? When I started to work on the latest project requiring skills in Linux, Python and Node.js, that is three domains I never used before, I was very clear with myself: the project will take what it will take, maybe two months, maybe six, maybe three…
- Written in stone On most projects, a huge amount of time is spent hypothesizing about subjects which not only don't matter, but often don't have a definitive answer. I often see programmers arguing about which one of two implementations is faster and which one will…
- Aren't we misusing YAGNI too often? OK, I get it, I'm over-thinking and over-engineering this app. I should KISS, because YAGNI. Great. I should not attempt to solve problems I don't have. I should not attempt to solve problems I don't have. Or should I? Development is filled with…
- What if the team would just circumvent the “productivity measures”? Working with teams and companies which experience problems, I can't notice a strong correlation between the way management treats employees and those employees treat projects they are working on. It always amazes me how many CEOs are expecting their…
- Image formats and why do they matter See also [How does Yahoo's Smush.It work and why doesn't everyone use it?][8], from which this article is inspired from. One question any web developer asks himself sooner or later is which format is the best format for images. The broad support of…
- Terminology: developer vs. programmer vs. coder Developer, programmer and coder are terms which are quite complicated to define. Moreover, many persons just use them interchangeably, making things worse. Finally, definitions from Wikipedia and other sources don't emphasize enough the difference…
- Interview questions I'm often surprised by the low quality of answers I get from the candidates during interviews. Technical questions quickly show a deep misunderstanding of the basic concepts, and I'm wondering how could it be that a person who claims being a…
- Elaboration through sharing The risk of working alone is that one may start to have a simplified vision of a problem, and not being able to see beyond this simple model. This happens to me a lot; today, I have an excellent illustration of the problem. Everything started with…
- Visual management I discovered [Visual management blog][1] in 2013. Although I already heard about Kent Beck's Big Visible Chart, I've never actually seen visual management in practice before. For me, tickets went straight to FogBugz or TFS and remained there,…
- Cables labeling Recently, I was adding new server hardware. I took it as an opportunity to rewire all network cables. This article explains how the task was performed. Cables management is like regular backups: everybody (by everybody, I mean people who actually…
- Brooks's law in Agile projects I was recently asked whether [Brook's law][1] applies to Agile projects as well. By Agile projects, the person asking the question means actual, real Agile projects, the ones where canceling a project and resuming it several months later with a…
- Taking hostages with Waterfall It is early summer, year 2013. A company I was working for starts a new project scheduled for release in September. A few days earlier, the project manager determines that the project should take…
- Do requirements matter? For the last decade, I've met in my life hundreds of French programmers, developers, leads and CTOs. None of them knew the difference between functional and non-functional requirements. This wouldn't be so disturbing if it were limited to France:…
- Trial-screens setup: the definitive guide You got your second monitor. You've seen how much it enhances (or degrades) your productivity. Now, you are dreaming of having three monitors. Or maybe you don't have dual-screens setup and you're jumping straight to three monitors setup. Or maybe…
- Les rencontres nationales du numérique Le 13 novembre à Poitiers se sont déroulés les rencontres nationales du numérique, un événement organisé par l'association Réseau des professionnels du numérique (SPN). Un événement intéressant aussi bien en ce qui concerne les sujets abordés que les…
- Linters rock, but they are slow I love linters. I love them so much that I'm actually considering to use some of them at pre-commit stage to reject commits which contain errors. The only thing which is the reason I hesitate to do it is that some of them are quite slow. Currently,…
- 80 columns limit I recall discussing 80 columns limit a year ago with a friend of mine. It's fun to read this part now, to see how I changed, and to try to understand what could my friend tell me to convince me that I was wrong. This is the quote I'm talking about: I…
- Dunning–Kruger effect Dunning–Kruger effect consists for unskilled persons to believe that they are more experienced, and for highly skilled persons to underestimate their level, believing that tasks, which they find easy,…
- Extensibility When modifying a system (such as adding features), one should be concerned about the ability of the system to be modified. This implies the presence of two extensibility aspects: architectural and quality-centered. I believe it is essential to…
- Roadmaps, goals, morale, beliefs and motivation One of the aspects of developer performance to consider is the availability of the roadmap, a roadmap which is very precise near the point the person is, and less precise far from it. Why is it important for a developer to have an immediate access to…
- Les non-talents Après avoir écrit la série d'articles sur la recherche des talents, j'ai reçu de nombreux commentaires et questions de la part, notamment, des développeurs français. Pour beaucoup, je dois faire une précision : cette série d'articles parlait des…
- Hiring process part 4 · after the interview In 2013, I was searching for a flat in Paris. For people who are not familiar with this specific task of searching for a flat in this specific city, I should explain that flats are hugely expensive there, but there are still many persons who search…
- Hiring process part 3 · interview The candidate is in the hall, waiting for the interview. What should be your next steps? How to guide the candidate through the process of the interview? Probably the worst thing a company can do is to have a person from human resources in charge of…
- Hiring process part 2 · finding and capturing talented people It's difficult to interview candidates for a specific job. It's scary to hire somebody who shouldn't be hired, and it's unfortunate if you don't hire someone who should be hired. While it's practically impossible to suggest anything on the choice…
- Hiring process part 1 · job posting When I worked as a freelancer, one of the tasks I did was to help companies hiring talented people. Aside the case of Melusyn startup, I was mostly handling the technical interviews with the candidates, and gave my advice to the company: this…
- What's wrong with SQL Server's FILESTREAM? Microsoft SQL Server contains a feature called FILESTREAM. For those who don't use SQL Server, in short, this feature allows to store very large chunks of data in a database with all the benefits and none of the drawbacks. Under the hood, Microsoft…
- Relevance of tags on Careers Careers profiles includes a list of tags the person is top 10%, top 20% and top 30% in. Surprisingly (maybe not), those tags are followed religiously by some recruiters. They make a big mistake. If we want tags to be relevant, i.e. to have a…
- Programming made easy When I started programming, a few people around me told me that this may not be the smartest career path, because it may happen that in a few decades, we won't need programmers any longer. The idea is…
- Code duplication Beginners' code is always an amazing opportunity to remove code duplication, as well as explain what code duplication is to the original author. I was reviewing a few thousand LOC, so I thought this is an opportunity to post an example and to show…
- Eyestrain A few months ago, I left the company, but it's only today that I understood why I often had headaches and eyestrain at work, and I rarely have that when working at home. At home, I unconsciously follow the next pattern: work for ten minutes to an…
- Comments classification This is a bad comment: int i = 0; i + 1; // adding 1 to i should work but dont work i dont know why!!!! print(i);For every good comment, I've seen hundreds of bad comments. They harm the code base and give the wrong impression to the author that he…
- Process purists and productivity · Picky about methodology Recently, I found [an old question][1] from 2011 on Programmers.SE. The original poster explained a problem his team has when using Scrum, and asked for advice. From his question, it also appeared that he's not actually using Scrum, but rather…
- Custom search engine Many e-commerce websites implement their own search engine. Many do it wrong, so wrong that they lose potential customers they won't lose if they had no search engine at all. Google provides an easy to implement way to search for stuff within Google…
- Coffee maker Take a coffee maker. What is its purpose? Its only purpose is to make coffee. It’s the only thing it does and knows. It has only one button, and everybody know how to use it. Now take the Boeing 787. How many buttons are there? How many people can…
- Don't ask writing good code What a surprise. After being asked for months to simply write code as fast as possible, with no thinking or testing, management suddenly criticized one of the colleagues, because the code of a new, unstable feature implemented today contains long…
- Closed source, secrecy and trust Most companies which produce source code don't release it in the wild. They are hiding it, protecting it against unauthorized access, obfuscate it, make you sign NDA and ask themselves how they can be sure that the code will never ever reach…
- Seven lies to stakeholders Those are the points that are frequently subject of misunderstandings or plain misinformation between IT personnel and stakeholders. Encountering one of several of those points in a project is a good indication that communication should be reviewed.…
- Permanent prototype Each project follows more or less one of the following models, sometimes several of them combined: Design first, Iterative, Permanent prototype. The first two ones are well-known. The first one is the classical Waterfall model. Prior to development,…
- Do you really care about security? A $25,000-scale project is ordered by a large multinational corporation. They claim they should be and are secure, since security is crucial for them. Ask them how much of the budget of the project is allocated to security. They won't answer, because…
- Ascending and descending representations of quality There are many projects which start with very low expectations of the quality of the source code and project organization. The idea is to get something which simply works, start to sell it, and then, either continuously or in one brutal step,…
- Don't use it, it's slow Recently, I’ve received an e-mail like this from a colleague of mine, the e-mail being sent to a few people in the company: “FYI, we have removed SQL computed columns used when computing the gauges. The profit is impressive: the prices are now loaded…
- Time estimation. Done. When I started my career as a freelancer, I used to recur to ordinary techniques of the good old waterfall-style project management. It is not surprising that I also scrupulously tried to determine the time and the cost of a project before starting…
- Dockyard of ships that can’t sail Badly managed projects often share an element: the willingness to deliver all features in a given amount of time and within budget. Given how we conceptualize the notion of a deliverable outside IT…
- Playing the Russian roulette with your business · the excitement of the randomness After spending a few months in an ordinary small French software development company, I’m truly amazed at the effort which makes the whole process highly unpredictable and increases the odds of failing at every step. If working for a well-organized…
- Review and refactor SoftwareEngineering.SE is a good place for interesting questions. One of the recent questions about unit tests was particularly interesting: not for its unit testing part, but for giving a small piece of code which may seem particularly…
- Tags and categories: what's the difference? This article was originally published on Stack Exchange. Is there a difference between tags and categories? Is this difference clear for people without technical background, i.e. ordinary users? Tags…
- Pooling and performance: what benchmarks and profiling may reveal When benchmarking Orseis, I discovered that with repetitive queries, its performance drastically decline. In some conditions, it was more than ten times slower compared to the direct usage of ADO.NET. This is totally unacceptable for a library which…
- Choosing a color for a brand It is not unusual for some companies to spend numerous meetings discussing the color(s) to use for a logo of a product. Some may waste hours or days because nobody agrees about the color(s) but everyone agrees that choosing the wrong color will…
- The cost of always-on, never fail It is not unusual for the companies of any size to order a website which should “never fail”. Business-wise, this requirement is understandable: if your corporate website is down, you're not giving a positive image of your company. The only issue is…
- Deliver first, develop later No matter which workflow is chosen by a team, there is one common flaw: the product is shipped only when it’s done. In this context, it is not surprising that many products fail to be delivered on time. The delivery process is both complicated and…
- Quantifying time and cost: why do we always get it wrong? Discussions like this happen all the time when you work in IT. You are given a summary which barely describe the project, you have no time thinking about it, and then you receive a strong pressure from your boss because some PHP code monkey from a…
- Quality and practice: convincing as a consultant When you act as a consultant in a company, the first thing you must remember is that you're not the person who takes the decisions. While you might be the source of infinite wisdom, people will listen to you, or they will not. When your voice is not…
- Morceau de code avant l'entretien Lorsque je recherche des prestataires indépendants ou des développeurs pour moi ou mes clients, un point paraît primordial : s'assurer que le candidat sait écrire du code. Dès les tous premiers entretiens, je demandais systématiquement aux candidats…
- The surprisingly bad PhpBB PhpBB always surprised me. At every new version, [the project is rewritten from scratch][1], which is a good opportunity to finally do the interaction design correctly, and still, it's as bad as it was in June 2000 when the first version was…
- A failure as an opportunity Failures happen, especially in software development industry, where multiple factors can induce failure, from unrealistic expectations by the customer to the incompetency of the staff to the severe…
- Refactoring It is not unusual to find a piece of code which has severe issues and cannot be maintained as is. It can actually come from a less experienced colleague, a low quality internet resource, or even… yourself. In all those cases, the code requires…
- Faut-il embaucher un développeur inexpérimenté ? Lorsqu’on est attentif à ce qui se dit dans les communautés comme les sites de Stack Exchange, ou encore par les leaders, tels que Joel Spolky, en matière de l’organisation du travail au sein des…