- You already know it's broken. The brakes failed. Stop measuring what you already know.
- You can only find smell by reading the code. Don't measure hydraulic pressure in every car: find cars with mushy brakes. Any measurement will be debated down to a subjective judgement. A CC threshold of 10 will have exceptions. Don't waste time creating a rule and then creating a lot of exceptions. Stop trying to use metrics as a way to avoid thinking about the code.
- You already know what else smells. The hard part is taking action. You don't need more metrics to tell you where the costs and risks already are. It's in production -- you have all the history you need. A review of trouble tickets is enough.
- It's a human enterprise. There are too many independent variables, stop trying to measure things you can't actually control. You need to find the idiot who didn't fill the brake fluid reservoir.
Rants on the daily grind of building software. This has been moved to https://slott56.github.io. Fix your bookmarks.
Moved
Moved. See https://slott56.github.io. All new content goes to the new site. This is a legacy, and will likely be dropped five years after the last post in Jan 2023.
Tuesday, February 23, 2010
Numerosity -- More Metrics without Meaning
Friday, February 19, 2010
Information Technology -- It's all about Decision-Making
Monday, February 15, 2010
Enterprise Applications (Revised)
- What makes an application an “enterprise” or “enterprise-level” application?
- Is the LAMP stack appropriate for Enterprise use?
- What is “Enterprise ready”? Can we test for it?
- Python in the enterprise: Pros and cons
The install is not "next-next-done" wizard
Tuesday, February 9, 2010
Layers of Management == Layers of Veto
Monday, February 8, 2010
Controlling the Message
Thursday, February 4, 2010
ALM Tools
- Requirements - in user terms; the "what"
- Modeling and Design - in technical terms; an overview of "how"
- Project Management (backlog, etc.) - requirements and dates
- Configuration Management - technology components
- Build Management - technology components
- Testing - components, tests (and possibly requirements)
- Release and Deployment - more components
- Bug, Issue and Defect Tracking - user terms, requirements, etc.
- Requirements have an overview in the backlog, on the scrumboard. Details can be captured in text documents written using simple markup like RST or Markdown. You don't need much because this is an ongoing conversation.
- Modeling and Design is a mixture of UML pictures and narrative text. Again, simpler tools are better for this. Tool integration can be accomplished with a simple web site of entirely static content showing the current state of the architecture and any detail designs need to clarify the architecture. Write in RST, build it with Sphinx.
- Project Management should be simply the backlog. This is digested into periodic presentations to various folks outside the scrum team. There isn't much that can be automated.
- Source Code Control, sometimes called Revision Control. See the Comparison of Revision Control Software page for more information.
- Software Configuration Management; the actual deployment of assets. See the Comparison of Configuration Management Software page for more information.
Build Management might be interesting for complex, statically compiled applications. Use of a dynamic language (e.g., Python) can prevent this. Build management should be little more than Ant, Maven or SCons.
Additional tools include the Build Automation list of tools.
Testing is part of the daily build as well as each developer's responsibility. It should be part of the nightly build, and is simply a task in the build script.
Overall integration or acceptance testing, however, might require some additional tools to exercise the application and confirm that some suite of requirements are met. It may be necessary to have a formal match-up between user stories and acceptance tests.
There's a Wikipedia article with Testing Tools and Automated Testing. Much of this is architecture-specific, and it's difficult to locate a generic recommendation.
Release and Deployment can be complex for some architectures. The article on Software Deployment doesn't list any tools. Indeed, it says "Because every software system is unique, the precise processes or procedures within each activity can hardly be defined."
Something that's important is a naming and packaging standard, similar to that used by RPM's or Python .egg files. It can be applied to Java .EAR/.WAR/.JAR files. Ideally, the installed software sits in a standard directory (under /opt) and a configuration file determines which version is used for production.
Perhaps most important is the asset tracking, configuration management aspect of this. We need to plan and validate what components are in use in what locations. For this BCFG2 seems to embody a sensible approach.