Full-Stack / Generalist Software Engineer (f/m/x)
- After one month: The repository, the pipelines and the deployment path exist, because you set them up. The MVP’s scoped historical data lands somewhere you can query it.
- After three months: Firstversion of the MPC, DFP logic, and audit log are all running on historical data, allowing the client to replay history against the system, and appearing on real dashboard screens.
- After six months: A one-site pilot is run before setting up the multi-site, high availability version of the system. The optimisation engine can be swapped out without rebuilding everything around it. New engineers join and are useful within a week, because the Claude Code setup and the review practice are already there.
- You are a senior builder somewhere big enough that you only own a slice of the system. You are capable of considerably more than the role allows.
- You have lived with the consequences of architecture decisions long enough to know which ones you would make differently. You want the next set of calls, and their consequences, to be yours from the start.
- You already work AI-native and have run out of room to do it properly around people who do not. This build is meant to be AI-native from the first commit. The rest of ANNEA’s development is moving in that direction, and we can adopt what you set up here.
- You have taken a product from nothing to production before. Since then you have mostly been maintaining, scaling or advising, and you want to be back at the first line of code.
- Deciding something with incomplete information, writing down the reasoning, and making it happen.
- A data pipeline in the morning and a React chart in the afternoon.
- Working out why data arrived late, arrived wrong, or stopped arriving. And deciding which steps to take next.
- Talking to the partner's engineers about how a renewable energy plant behaves or members of their C-suite about strategic trade-offs and priorities.
- Tightening the context files and tests after an agent gets something wrong, so it won’t happen again..
- Working through a backlog somebody else wrote.
- A long design phase before anyone writes code.
- Going deep in just one layer of the stack.
- Implementing what an architect decided.
- You have taken at least one system from an empty repository to something people depend on in production. More than once is better.
- You have shipped backend, frontend and infrastructure. Not one layer with exposure to the others.
- You have worked with data that arrives late, arrives wrong or stops arriving, and built for that reality. Energy, industry, IoT, logistics, medical devices and market data all count.
- Python and TypeScript/React to production standard. Time-series data at scale: storage, retention, aggregation, backfilling. Containers, CI/CD and infrastructure as code that you run yourself.
- You use tools like Claude Code every day. You have set up a repository-level configuration that other people worked in, and you can name two places where AI produced confident nonsense.
- You can name an architecture decision you got wrong and say what it cost. Anyone who has owned enough of a system has one.
- Energy, industrial or IoT experience is a plus, not a requirement.
- You have been the person engineers call directly, and the person management asks what it will cost.
- The first contract is fixed term, though we expect to continue with a good fit. We are a small team, so how we work together matters as much as what you can build, and neither of us can tell until we start.
- You get more autonomy than usual, and the responsibility that comes with it. There is nobody to absorb an unclear decision on your behalf.
- For this product, and just for the first months, you are the team. You will have part-time support from the existing ANNEA team who work on our main product and other projects. We then expect to also grow “your” team over time.
- Real plant data arrives later than we would like, and it will be messier than promised.
- The domain is real: renewable energy deals with physics, big client contracts and liabilities. You will have to learn it. Nobody expects you to arrive knowing it.
The role is based in Lisbon, Portugal, with regular time (at the moment 2-3 days/week) in the office in the heart of the city. We are flexible about the details, but we are not remote-first.
