Skip to main content

Software factory: from chaos to CHAOS


When I was developing my practice project for high-school graduation exam I did a mistake 15 minutes before end of dedicated time. I somehow deleted my source code. It was horrible and I knew that I did not have any time to rewrite it from a scratch. Fortunately I realized that my source code editor was automatically doing backups and that saved me.

I was lucky that time and I learnt my lesson that software factory cannot be chaos but it should be CHAOS: Continues Helpful Automated Organized and Smart. And I can tell that after 21 years I use more sophisticated software factory in my team which follows that principle:

IDE for development: allows fast writing/debugging/profiling of the code, documentation and configuration; the project setup must be generic so developers should be able to use any IDE without project setup change: Eclipse

Source code repository: provides effective & safe storing of the code, documentation and configuration with easy branching & merging option: Git, svn

Code review: helps with effective and quick code quality improvements: Eclipse, Git

Static code analyze: identifies a typical problems in the a code and enforces the best practices: SonarQube

Unit tests: ensures quality of the modules with all external dependencies mocked and good maintainability. Also provides safety net for a re-factoring and keeps information about developer intention and original specification. Runs from IDE or CI server: JUnit, Mockito

Software project management tool: makes builds easy from uniform build system and manages all dependencies: Maven

Continues integration server: continuously builds/tests software project and artifacts from source code and monitors executing of the external jobs: Jenkins

Repository manager: provides a centralized storage of the artifacts and dependencies: Nexus

Virtualization/cloud platform & tools: provides an infrastructure to deploy whole solution for engineering or production: Vagrant, Chef, Ansible, Docker, VirtualBox, AWS


Staging environment: place where all moving parts are assembled/integrated together: AWS

Pre-production environment: place where everything is ready for the production: AWS


API testing: makes sure that public APIs are working and integration is OK: FitNesse, SoapUI

E2E testing: allows front-end test automation: Selenium, FitNesse, Sikuli

Load testing: provides load tests capability and measure performance: JMeter

Test coverage: visualize and measure unit/integration/e2e test coverage: SonarQube with jacoco

Defect reporting: helps with the issues/defects tracking and management and forces agreed issue/defect workflow: JIRA

Test case management: helps to manage test cases, visualize results and test coverage map: Tarantula

Process: defines how the development will be organized and managed: SCRUM, Kanban, Scrumban

Workflow: defines the branching, commit & safe release strategy: Git flow

Documentation tool: everything is better then Word: DITA

API tool: helps build and document API (RESTful): Swagger

Collaboration tools: makes a remote communication and coordination easier:  Skype, Webex, Mail, Confluence, Slack


Comments

Popular posts from this blog

Senior or Junior

Usually companies call young employees Juniors and more experienced Seniors. Sometimes you need to just sit and wait and it will come. Sooner or later. From my point of view it is not enough. I met a lot of old employees they call themselves Seniors but they behave like Juniors. So I defined my point of view on Seniority: professional simple understand what I am doing and understand reason why I am doing it can coach others this is very basic; who can coach others is just fine but who can coach others to became a new coaches is super not genius but have deep knowledge on some specialized parts geniality is overestimated, we do not need "magical guru", to be expert is good enough; if you are "one to go" when there is problem, it is OK big picture overview it is not probably possible to understand a whole system in details but it is necessary to have at least overview know what I know and know what I do not know to see myself in correct light is very

Software Engineer

Recently my company expanded the Software Engineer positions in my team. This leads me to thinking about the skills which are necessary for these positions. So I prepared a list of qualities which I think are important for a good Software Engineer. Abstract concept modelling This is essential and there is no room for discussion on this because this is what we do. Love to code It does not matter if you are 15 or 50 or if you write code 10% or 90% of your time, code writing is crucial. Team player The surgeon style teams (one genius with helpers) are obsolete, I prefer real team players who are able to work towards a common goal and share responsibilities. Communicative Silent geeks siting in the corner with a notebook on their knees are not cool any more, we need to talk to each other, we need to be able explain technical stuff to non technical managers, we need to be able to choose the right phrase at the right time. Take responsibility There is no quali

Anti-Lean Quotes

Set of quotes which usually highlights Anti-Lean behavior Create waste instead of Eliminate waste ' Developer who is not working at least on 4 projects is not properly utilized ' - less is definitely more and only done-done work counts by end of the day, limited work in progress is helping to focus on right priorities ' In case of any network issues please create a ticket on the help desk system at our partner's web-page' - creating catch 22 situations by design is craziness, such a process does not make any sense 'Yes, this is what our customers really need but could we add also this small feature, just in the case?' - extra feature creates an extra complexity, it is better to stay focused on real value and make it great for the users ' I know that you are working on the top priority but I am sure that you can do also this small task till noon' - probably there will be nothing really done by noon, task switching is more expensiv

Scrum rollout

Would you like to start with Scrum in your team? These are few hints from my experience how to make this process smooth, iterative & incremental: get commitment from the management & team define reason: why would you like to do Scrum? what problems it should solve for you? start with simple Kanban in one team: it is easier, you just need to manage 3 lists: backlog (todo), work in progress and done  focus on right priorities of backlog - person who defines the priorities will be 'product owner' setup quick way how to track work in progress and indicate 'impediments' -> daily stand-up; max 15 minutes meeting every day - moderator of the meeting will be 'scrum master', he will be also responsible for solving the 'impediments' focus on dependencies between the tasks to avoid 'impediments' start to put 'discoveries' into the backlog to pre-analyze tasks; discoveries should be done by architect or analyst what is the busi

Agile is not a religion

It is quite annoying to me when argument during discussion is like this:  it must be XY because the book says it. It is kind of: Bible is saying XY so we have to follow = end of discussion.  I am not very happy in such a case because we probably do not understand principles and just trying to blindly imitate something without deep knowledge of the matter. I prefer to admit it or show personal standpoint.